今後はMT4のコードもいくつか書いていきたいと思います。
今回はトレーリングストップです。
ちなみに普段自分が使っているシステムから切り抜いて極力不要なコードを抜いて記載しますので実際にこのままでは動かなかったりや意味が分かりづらいところがあったりしますがご了承ください。
if(OrderType()==OP_BUY && 保有しているかチェック && トレーリングストップ発動の条件 ) { if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(新しいストップロス値,Digits)) { OrderModify(Ticket_L,OrderOpenPrice(),NormalizeDouble(新しいストップロス値,Digits),OrderTakeProfit(),0,Blue); } } else if(OrderType()==OP_SELL && 保有しているかチェック && トレーリングストップ発動の条件 ) { if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(新しいストップロス値,Digits)) { OrderModify(Ticket_S,OrderOpenPrice(),NormalizeDouble(新しいストップロス値,Digits),OrderTakeProfit(),0,Red); } }
簡単に説明しますとまずは現在の持っているポジションが買いか売りかで大きくIF文で分岐しています。
保有しているかどうかのチェック・・・すでに決済されてたり、エラーになった注文でないか
トレーリングストップ発動の条件・・・いきなりは発動できません。まず利益が出ていることが条件です。そのため、例えば現在の価格が注文時の価格より300pips上がっているから処理を始めようといった条件を記載します。
そして、上記の条件を満たした場合に次のIF文に移行します。
ここで買い注文の場合、現状のストップロス値より今回設定する値が高いか低いか確認します。
高くないと発動しません。※当たり前ですが、この条件がないとストップロス値が上下に動いてしまいます。
あとはOrderModifyでストップロス値を新しい値に変更するのみです。
実際は更にこの条件式をIF文で囲んで、どのタイミングでチェックするか、そもそもトレーリングストップをするかしかないかを選択出来るようにして利用しています。