【MQL】指定時間経過後にマイナスなら決済する
最近色々な人の情報を見てて思うのは横軸(時間)の考え方
時間経過でマイナスなら切る、プラスなら伸ばすというロジックも聞いたことあるので、とりあえず指定時間経過後にマイナスなら切るコードを書いてみました。
コード
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度でも含み益になったら、そのポジションが識別できるようにしたいんですけど、マジックナンバー変更は思いついたものの、外部パラメータにしてるしなぁと。。。