今日は限られた時間にのみ可能なスキャルピング手法の検証をしていきます。
東京市場スキャルピングトレード手法
この手法は東京市場・・・それも、昼のみに限ってトレードする手法です。
トレード条件
買いも売りも11時30分から12時30分の間だけ実施します。
ボリンジャーバンドで10銭程度の狭いレンジになっていることも条件になります。
売買の条件
ボリンジャーバンドの中心線から3銭上がったら売り、3銭下がったら買います。(逆張り) 利益確定は3銭。
またはボリンジャーバンドの2σに触れた場合です(損切り)
※FX Worksで紹介されていた手法です。詳細はFX Worksをご覧ください。
MetaTrader4でプログラミング
ボリンジャーバンド2σタッチでカウンターする戦略の方が圧倒的に作りやすいのですが・・・;;
ボリンジャーバンド2σ超えで損切りだと損切り連発する気がします。
うーん・・・作る前から悩んでも仕方ないので、とりあえずプログラム作ってみましょう。
まずボリンジャーバンドの幅ですが、人間であれば「だいたい10銭かな」と目で判断するところ、コンピューターは0.1銭の違いでも許されません。
そこで、バッファーを用意する必要があります。
extern double bbRange = 100.0;
extern double bbBuffer = 10.0;
ボリバンの幅を10銭、バッファーは1銭としました。
次にボリンジャーバンドの2σとミドルライン(中心線)を取ります。
upper=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_UPPER,0); lower=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_LOWER,0); middle=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_MAIN,0);
特に指定が無かったのでボリンジャーバンドのパラメータは21としました。
double range = upper – lower;
double lowerLimit = (bbRange – bbBuffer) * Point;
double upperLimit = (bbRange + bbBuffer) * Point;
if(range > lowerLimit && upperLimit > range)
+2σとー2σの値を引いて、それが10銭(±1銭)の間に入ってるかチェックします。
if(middleBands – (TakeProfit * Point) > Ask){
sl = upper;
tp = Ask + TakeProfit * Point;
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,””,Magic,0,Blue);
} if(Bid > middleBands + (TakeProfit * Point)){
sl = lower;
tp = Bid – TakeProfit * Point;
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,””,Magic,0,Red);
}
中心線から3銭分引いた値より価格が下なら買い、3銭足した価格より上なら売ります。 ストップロスは2σ、利食いは3銭です。
バックテスト実行・・・しかし・・・
バックテストを実行してみるとOrderSend error 130が発生してトレードしてくれません・・・。
「恐らくこうなるだろう」と予想していましたが(笑) slとtpが近すぎるんですよね・・・
面倒ですがslとtpは指定せず、手仕舞い判定ロジックを作っていきます。
MetaTrader4再プログラミング(手仕舞いロジック)
2σ割り込みと3銭以上の利益で手仕舞いするロジックを組み込んでいきます。
diff = Bid – OrderOpenPrice();
tp = TakeProfit * Point;
if(OrderType()==OP_BUY && (lower>Ask || Ask-OrderOpenPrice()>tp))
CloseAll();
if(OrderType()==OP_SELL && (upper<Bid || OrderOpenPrice()-Bid>tp))
CloseAll();
こんな感じでしょうか。(買いと売りでif文わけてますが1つのif文にしてもいいです)
仕掛けた時の価格はOrderSelectした後、OrderOpenPrice()で取れます。
それと現在の価格を使って上昇(下降)した価格差を算出、最後に利益確定する価格(今回は3銭)以上あればクローズします。
この後、動作確認のバックテストを実行すると「ホボ全部負け」で破産しました・・・ ボリンジャーバンド2σに達するとオープン→クローズを連続して繰り返すようです;;
そこで、「2σに達していなければオープン」という条件を付け加えました。
バックテスト実行結果
※ユーロ円 期間2014年1月1日~2015年2月13日 [LunchScalper.ex4]
勝率は30%くらいです・・・。
そもそもMetaTraderの場合、バックテストのTickデータは仮想データなので秒単位でトレードする「超短期スキャルピング」のバックテスト結果には疑問があったりするのですが・・・。
トレード時間
バックテストで色々変更してみましたが、どの時間帯でも同じような結果になりました・・・。
結論(?)
MetaTrader4のバックテストで突き詰めても、これ以上有意なデータが取れそうもないのでここで打ち切りにします・・・
東京市場スキャルピング(改?)
ちょっとデモ口座で11時半からトレードしてみました。(試したのは先週金曜日)
元のルールが面倒なので「2σタッチでカウンター、ミドルラインで手仕舞い」という良くあるボリバンカウンタールールでトレードしたのですが・・・結果は10戦9勝1敗。
12時少し前からトレンドが出始めたようだったので最後は損切りしました(1敗はこれだけ)
※デモ環境ですからスリッページも発生しませんし、実際はもう少しパフォーマンスは落ちるかもしれません。
※ミドルライン手仕舞いは絶対的なものではなく、状況みながら1σで手仕舞いしたトレードもありました。また、2σにタッチしても危険を感じた場合には入っていません。
以前、「レンジ相場を避ければ移動平均線だけでも勝てると思う」と書きましたが、「レンジ相場では(トレンドを避ければ)ボリンジャーバンドのカウンターだけでも勝てる」とも言えるのではないかと思す(笑)
当初の予定(表題の手法検証)から外れてしまいますが、ボリンジャーバンドのカウンターでどの程度勝てるか検証してみます。
ボリンジャーバンドカウンターの検証
表題の手法よりも単純なボリンジャーバンドカウンターの方が良いですね・・・。 ※1分足でバックテストしています
トレード時間
1時間毎に区切ってバックテストしてみました。
東京市場では前半(9時~12時)が比較的良く、東京市場後半(日本時間の昼過ぎ)からロンドン市場のオープン~前半までのパフォーマンスは悪くなります。
しかし、NY市場オープン頃からはガラっと良くなり、日本市場の前半より良い結果がでました。
元の記事では「11時30分から12時30分までが最も有効」ということでしたがバックテストの内容を見るとそういった事実はなさそうです。
日本時間午前6時のパフォーマンスが一番良かったのですが、この時間はスプレッドが開いているので除外した方が良いでしょう。
以上の結果より、トレードを行う時間はUTC12時から19時(日本時間21時から翌日4時)とします。
損切りとレンジ幅
利益が出やすいレンジ幅は30pips以上60pips程度まで(広すぎても狭すぎてもダメ) 損切りは25pipsとします。
なかなか健闘しているのではないでしょうか。
1分足を使っている割りにはトレード回数が少ないですね・・・
これなら「1分足スキャルピング」でなく「5分足」でもいけるのでは・・・?と思い、5分足でバックテストしてみました。
5分足でもソコソコいけるようです。(最終的には損失で終わってますが・・・)
※トレード回数は状況によってかなり変わるようです。多い年は1年で3000回を超えます。
※ちなみに長い時間にすればするほど損失が大きくなっていきました。長い時間足では使わないほうが良さそうです。
チャート確認
ミドルラインまで戻らずに2σを何度も叩くような展開になると連敗してしまいます。
逆に、ミドルラインまでしっかり戻るような緩いトレンドやレンジ相場であれば結構勝ってくれます。
リンジャーバンドのみで闇雲に仕掛けるだけでは勝てませんが、使いどころを見極めることができれば勝つことは可能だと思います。
インディケータで使いどころを見極められるのか
ラインを引いたり、移動平均線の傾きを見たりといった方法などでレンジかどうかを見極める・・・というのが裁量での見極め方法かな・・・と思います。
しかし、ラインや傾きといった視覚的な動きをプログラムにするのは簡単なことではありません。(不可能ではありませんが、かなり難易度が高くなります)
そこで、インディケーターのような数値化可能な値で(なんとか)やってみようと思います。
ADX
最初に思いついたのはADXやATRといったインディケーターです。
これらの数値が低いときには相場の勢いが低いとき・・・と言われますが、強い相場の後、強く反転すると数値が低くなりますので「数値が低い=勢いが無い」とは言い切れません。
ADXが40未満のときのみ仕掛けるように変更しました。 なんとなく良くなった気がしますが誤差レベルですね(苦笑)
Bulls PowerとBears Power
Bulls PowerとBears PowerというインディケーターがMetaTrader4にはあります。
bears = iBearsPower(NULL, 0, 13, PRICE_CLOSE, 0);
bulls = iBullsPower(NULL, 0, 13, PRICE_CLOSE, 0);
このように値を取得してきて・・・
if ((Bulls > 0 && Bears < 0) || (Bulls < 0 && Bears > 0))
Bulls PowerがプラスでBears Powerがマイナスのとき、または、Bulls PowerがマイナスでBears Powerがプラスのときは「レンジ」と判断します。(違うこともあるのですが・・・)
意外と安定しましたね。
・・・トレード回数は激減していますが(苦笑) 2011年1月からバックテストするとやはり勝てません(笑)
結論
飽きてきたので終わりにしたいと思います。
「ボリンジャーバンドが2σからミドルラインまで戻るような相場展開」であれば勝てます(勝ちまくります)し、「ミドルラインまで戻らない強い展開」となれば負け続けます。
インディケーターの値でレンジかどうかを判断するのはなかなか難しいと思います。
僕がトレードする際にはボリンジャーバンドの幅や形、バンドの傾き、長い時間軸でのトレンドの有無や方向、現在の値動き、指標発表の有無、重要なチャートポイント(直近高値/安値、ダブルゼロ、トリプルゼロ)・・・といったものを加味して総合的に判断しますが、これをプログラミングに組み込むのはナカナカ大変です;;・・・のでやりません(笑)
逆張りも極めれば勝てると思いますが、トレンドフォローをおすすめします。(あるいは長期時間軸のトレンドにそった逆張り)
※自薦になりますがあるプロトレーダーの至言集:勝ち続ける投資家のマインドも(ご覧になっていなければ)ご覧くださいっ。
当サイトの人気記事です。 はぁ・・・無駄に大作記事になった・・・;;
コメント