MT4のEA開発に関する質問です。 私が考えた手法に、「損切りの後に○○分エントリー…

MT4のEA開発に関する質問です。
私が考えた手法に、「損切りの後に○○分エントリーしない」という制限をつけたいのでこのような関数を作りました。

int RestrictionByLossCut(){
if(TimeCurrent() < restarttime){ //今の時間がwaitingtimeより小さかったら
return 1;
}

int orderselect=OrderSelect(Ticket,SELECT_BY_TICKET);
if(lastorderticket!=OrderTicket()){
if(OrderProfit() < 0){ //損益がマイナスなら(損切なら)
restarttime=OrderCloseTime()+waitingtime;
lastorderticket=OrderTicket();
return 1;
}
}
return 0;
}

この関数は、損切りした後にOrderCloseTime()に待ち時間(waitingtime)を足したものをrestarttimeに入れて、その時間が来るまで1を返すというものです。waitingtimeにはint 型の整数が入っていて、1時間止めるときは3600が入っています。

これでいけると思っていたのですが、なぜかrestarttimeを調べてみると19〇〇年とかになっていて、うまく動きません。どなたかわかる方教えてください。

回答1

>なぜかrestarttimeを調べてみると19〇〇年とかになっていて、うまく動きません。

おそらく、OrderCloseTime()が0(1970.01.01)を返していると思います。

>int orderselect=OrderSelect(Ticket,SELECT_BY_TICKET);

まず、このオーダーセレクト呼び出しが合っているか確認して下さい。
3つ目の引数で、MODE_HISTORYを指定しないと閉じていないポジションからオーダーを探そうとしますので、Ticketが閉じられているポジションの場合はOrderSelect()が失敗するような気がします。

>if(lastorderticket!=OrderTicket()){//最後のオーダーチケットでない時

意味合い的にひょっとしたら間違っているかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA