バイナリーオプションで特定の手法が勝てるかどうか検証する方法
公開日:
:
バイナリーオプション自動売買 MT4, バイナリーオプション, バックテスト, 過去検証
バイナリーオプションの場合、
リアルタイムの自動売買開発と過去検証のためのソフト開発は別物です。
過去検証の方がはるかに簡単なので、
バイナリーオプション用のトレード手法はあるけどバックテストのやり方がわからない、
という人向けに考察します。
バイナリーオプションは中身はFXなので、
基本的にはMT4/MT5, jForex, cTrader, TradeStation, NinjaTraderなんでもいいですが、
FX系のソフトでテスト可能です。
仮に、
・5分おきに判定時刻があり、
・1分前にプット/コールができなくなり
・ペイアウトが1.8
の場合、
・分(Minute())が5で割り切れるときに決済。(足の更新のタイミング)
・分(Minute())が5で割って、4余るときにはエントリー不可
・最終的な勝率に対して1.8を掛ける
これだけで、バイナリーオプションでその手法が勝てるのかどうかテストすることができます。
上がるか下がるかだけなので、スリップ、スプレッド、約定拒否など考えなくていいです。
FXのプログラミングをしたことがある方からすれば超かんたんです。
ただし、バックテストするときには、スプレッドを可能な限り0に近づけます。
(MT4の場合1pointが限界です。)
試しに、
ゴールデンクロス、デッドクロスでプログラミングを組んでみましょう。
1分足で14単純移動平均線と28単純移動平均線のクロスのプログラムを組みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
double FastMA[3],SlowMA[3]; FastMA[1] = iMA(Symbol(),Period(),14,0,MODE_SMA,PRICE_CLOSE,1); FastMA[2] = iMA(Symbol(),Period(),14,0,MODE_SMA,PRICE_CLOSE,2); SlowMA[1] = iMA(Symbol(),Period(),28,0,MODE_SMA,PRICE_CLOSE,1); SlowMA[2] = iMA(Symbol(),Period(),28,0,MODE_SMA,PRICE_CLOSE,2); if( OrdersTotal() == 0 ) { if( Minute()%5 != 4 ) { if( FastMA[1] > SlowMA[1] && FastMA[2] <= SlowMA[2] ) { int T = OrderSend(Symbol(),OP_BUY,0.01,Ask,1,0,0,"",0,0,clrRed); } else if( FastMA[1] < SlowMA[1] && FastMA[2] >= SlowMA[2] ) { int T = OrderSend(Symbol(),OP_SELL,0.01,Bid,1,0,0,"",0,0,clrBlue); } } } |
バックテストのみで実際にトレードさせることはないので、
スリッページやAsk,Bidなどは汎用性がない記述でもOKです。
次に、決済処理です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Bar[1] = Bar[0]; Bar[0] = Bars; int OrdersTotal_ = OrdersTotal(); for( int i=0;i<OrdersTotal_;i++) { if( Minute()%5 == 0 && Bar[1] != Bar[0]) { bool R =OrderSelect(i,SELECT_BY_POS,MODE_TRADES); //exit if( OrderType() == OP_BUY ) R = OrderClose(OrderTicket(),OrderLots(),Bid,1,clrYellow); if( OrderType() == OP_SELL ) R = OrderClose(OrderTicket(),OrderLots(),Ask,1,clrYellow); } } |
これまで何度もやっているので、特に解説する必要はないと思います。
モデリング品質が25%なのは、普段からMT4を触っていないのでデータがないということと
そもそも1分足なので本来はノイズが入りまくるということがあります。(つーか、これが限界)
トレード回数は46回で、勝ち回数25回なので、
毎回1000円ベットしたとすると、
投資コスト:46×1,000円=46,000円
リターン:25×1,000円x1.8=4,5000円
差額-1,000円
つまり、負けるってことですね。
実際には、スプレッド1ポイント分で負けなかった可能性もあるので、
それも含めるとトントンといったところでしょうか。
ヒストリカルデータも完璧ではないので”ざっくり”としたデータであることは否めません。
(逆に、誤差の範囲でないと証明することもできませんが)
また、現実においては、
時間帯(朝方、日中、夕方、深夜
通貨ペア
が影響するので、
一概に「このトレード手法はダメ、このトレード手法は勝てる!」と決定づけることはできません。
しかし、プレゼンするには良い資料になるかもしれないですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ static int Bar[2]; void OnTick() { //--- Bar[1] = Bar[0]; Bar[0] = Bars; int OrdersTotal_ = OrdersTotal(); for( int i=0;i<OrdersTotal_;i++) { if( Minute()%5 == 0 && Bar[1] != Bar[0]) { bool R =OrderSelect(i,SELECT_BY_POS,MODE_TRADES); //exit if( OrderType() == OP_BUY ) R = OrderClose(OrderTicket(),OrderLots(),Bid,1,clrYellow); if( OrderType() == OP_SELL ) R = OrderClose(OrderTicket(),OrderLots(),Ask,1,clrYellow); } } double FastMA[3],SlowMA[3]; FastMA[1] = iMA(Symbol(),Period(),14,0,MODE_SMA,PRICE_CLOSE,1); FastMA[2] = iMA(Symbol(),Period(),14,0,MODE_SMA,PRICE_CLOSE,2); SlowMA[1] = iMA(Symbol(),Period(),28,0,MODE_SMA,PRICE_CLOSE,1); SlowMA[2] = iMA(Symbol(),Period(),28,0,MODE_SMA,PRICE_CLOSE,2); if( OrdersTotal() == 0 ) { if( Minute()%5 != 4 ) { if( FastMA[1] > SlowMA[1] && FastMA[2] <= SlowMA[2] ) { int T = OrderSend(Symbol(),OP_BUY,0.01,Ask,1,0,0,"",0,0,clrRed); } else if( FastMA[1] < SlowMA[1] && FastMA[2] >= SlowMA[2] ) { int T = OrderSend(Symbol(),OP_SELL,0.01,Bid,1,0,0,"",0,0,clrBlue); } } } } //+---------- |
このコメントはWEBに公開されるので、問い合わせ等はメールでお願いします。
関連記事
-
-
バイナリーオプションの自動売買開発④
今回はバイナリーオプションのウェブサイトを操作するため、 ウェブサイトのトレード画面の分析を行いま
-
-
バイナリーオプションの自動売買開発①
今回はバイナリーオプションの自動売買をします。 一部の業者ではMT4にプラグインを入れることで
-
-
バイナリーオプションの自動売買開発⑤
これまでの内容で ・MT4からシグナルをファイルに飛ばす ・ファイルからシグナルデータを読み込む
-
-
バイナリーオプションの自動売買開発②
前回は大まかな概要を説明したので、 今回はさっそく作っていきます。 とりあえず、RSIのライ
-
-
バイナリーオプションの自動売買開発③
前回はMT4からファイルにトレードデータを出力するところまでやったので、 今回はファイルをマクロで
Comment
こんにちは。
プログラミング知識がありませんが(勉強中)バイナリ―1分足の00秒ペイアウト90%のノウハウでのバックテストをとりたくて奮闘しております。
文中にあるソースコードを1分用に編集できたとして、このソースをコンパイルしてどう使うのでしょうか?
・バックテスト対象のカスタムインジにのMQL4にこのソースを追加するのでしょうか?
・このソースをコンパイルするとストラテジーテスターにで選択できるようになり、選択することによりバックテストをかけたいカスタムインジを選択できるのでしょうか?
不敵させつなコメントであれば申し訳ありません。
宜しくお願いします。