OnTick()関数と追尾の関係についての話

今回はベタ書きで書きたいことを書いていきます。
下記のコードをご覧下さい。

int TicketInitialization_Buy(int ticket){
   if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY) 
      && OrderTakeProfit() < Bid && OrderTakeProfit() != 0 ){
      ticket=0;
   }
   if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY) 
      && OrderStopLoss() > Bid && OrderStopLoss() != 0 ){
      ticket=0;
   }
   return ticket;
}

自作EAサンプルコードのエントリー後、決済条件まで追尾するRSIのEAサンプル(MQL4)には上記のコードを記述しているのですが、このコードは業者によって差がでます。まぁぶっちゃけて言うといわいる手抜きコードって奴です。
OnTick()関数はTickが動くたびに呼ばれるのですが、何しろ発動条件がポジションが履歴にあり尚且つ、決済額をオーバープライスした時なわけですから。OnTick()関数がいつ待機決済注文が決済されたかに気づくかです(笑)
まぁデモ口座でしか試していませんが、待機決済の後のエントリーの間に差がでます。
業者によっては10pips固定で離れてエントリーするところもあれば、3pispだったり30pipsだったりします。

この処理をちゃんと書こうとするとPendingのpipsとprofitのpipsを同じにして条件付きでエントリー処理を書かなくてはならなくなります。
例えば下記のようなカンジ

Pending = 30;
TakeProfit = 30;
StopLoss = 30;

if(初回のみエントリー条件)待機決済付きエントリー
else if(ポジションがなければひたすら繰り返す)待機注文エントリー

まぁザッパですが上記のような処理になるかなぁと思います。実際コードにしてないので本当にザッパですが。。。(笑)
厳密に追尾にしたいのであれば少々コードを書き換えなくてはならなくなりますが、まぁあくまでもサンプルなので(笑)

ちなみにチケット=0はポジションを保有していませんよって意味です。
詳しくはチケットの管理と重要性【自作EA】(MQL4)をご覧下さい。

今回はここまでにします。もうこれ以上説明することもないと思うので(笑)
以上、お読み頂きありがとうございました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする