【MQL】指定時間経過後にマイナスなら決済する

f:id:umerin_fx:20211107172523p:plain
最近色々な人の情報を見てて思うのは横軸(時間)の考え方

時間経過でマイナスなら切る、プラスなら伸ばすというロジックも聞いたことあるので、とりあえず指定時間経過後にマイナスなら切るコードを書いてみました。

コード

for(int i=OrdersTotal()-1; i>=0; i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
      if(OrderType()==OP_BUY && OrderMagicNumber()==11111){
         if(TimeCurrent()-OrderOpenTime()>600 && OrderProfit()<0){
            Exit=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,clrBlue);   
         }
      }
      if(OrderType()==OP_SELL && OrderMagicNumber()==11111){
         if(TimeCurrent()-OrderOpenTime()>600 && OrderProfit()<0){
            Exit=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,clrRed);  
         }
      }
   }
}

解説

① 経過時間を調べる
TimeCurrent関数は現在の時間(サーバー時間)、OrderOpenTime関数はエントリーした時間を返します。
現在時間からエントリー時間を引くことで、エントリーしてからの経過時間が分かります。
時間は秒で表します。今回の場合は600なので10分(1分=60秒×10)になります。
以下、早見表になります。

時間 秒換算
10分 600
30分 1800
1時間 3600
4時間 14400
1日 86400
1週間(5日) 432000


② ポジションの損益を調べる
OrderProfit関数はポジションの損益を返します。
損益が0より小さい、つまりマイナスの場合はということになります。


ぼやき

ではまずゴールドでの考え方ですが基本的にエントリーしてから10分以内に含み益に一度もならなかったら捨てます。


これをコードにしたいんですけど、うまくいかないです
今回書いたコードは10分後の話でニュアンスが違うんですよね
10分の間に1度でも含み益になったら、そのポジションが識別できるようにしたいんですけど、マジックナンバー変更は思いついたものの、外部パラメータにしてるしなぁと。。。