せっかくMT4(MetaTrader4)を使うなら、あなたオリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか!?
初心者向けに、MQL4言語を使ったプログラミングについて解説しています。
今回は、MT4のサンプルEAを使って「トレーリングストップ」のソースコードを解説します。
というのも、サンプルEA「MACD Sample.mq4」には、最初から「トレーリングストップ」が実装されているので、これを利用します。
仕組みさえわかれば、自作EAに簡単に実装できます。
ぜひあなたの勝てるEA作りに役立ててください。
トレーリングストップとは
トレーリングストップとは、価格の動きにロスカットラインを追跡させていく投資手法のことです。
例えば、買いポジションの場合は価格の上昇に合わせてロスカットラインを引き上げ、売りポジションの場合は価格の下落に合わせてロスカットラインを引き下げていきます。
トレーリングストップは、損失を抑えつつ、利益を伸ばせる有効な手仕舞い方法として人気があります。
MetaEditor の起動
「MACD Sample.mq4」に実装されているトレーリングストップのソースコードを解説していきます。
MT4の「メタクォーツ言語エディタ」をクリックします。
MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。
「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。
トレーリングストップのソースコード
それでは、いよいよソースコードをみていきます。
外部パラメーター「TrailingStop」の宣言
11行目では、パラメーター「TrailingStop」を宣言しています。
input double TrailingStop =30;
トレーリングストップのトレール幅を30ポイントと設定しています。
買いポジションの場合、価格が上昇したら、その上昇した価格の30ポイント下にロスカットラインを引き上げてついていきます。
買いポジションのトレーリングストップ発動条件
109行目からは、買いポジションを構えている場合のトレーリングストップの発動条件を3つ設定しています。
//--- check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) {
発動条件の内容は以下のとおりです。
- パラメーター「TrailingStop」でトレール幅を設定していること
- 現在の売値(Bid)から建値(OrderOpenPrice())を差し引いた値が、トレール幅よりも大きいこと
- 逆指値(OrderStopLoss())が、現在の売値(Bid)からトレール幅を差し引いた値よりも小さいこと
ストップロスオーダーの変更
116行目からは、トレーリングストップを発動させるOrderModify関数を記述しています。
//--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green)) Print("OrderModify error ",GetLastError()); return;
OrderModify関数は、保有中や待機中の注文を修正する関数で、正常に終了した場合はtrue、失敗した場合はfalseを返します。
3つの発動条件を満たしたら、逆指値(OrderStopLoss)を、現在の買値(Bid)からトレール幅を差し引いた値に変更します。
売りポジションのトレーリングストップ発動条件
135行目からは、売りポジションを構えている場合のトレーリングストップの発動条件を3つ設定しています。
//--- check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
発動条件の内容は以下のとおりです。
- パラメーター「TrailingStop」でトレール幅を設定していること
- 建値(OrderOpenPrice)から現在の買値(Ask)を差し引いた値が、トレール幅よりも大きいこと
- 逆指値(OrderStopLoss)が、現在の買値(Ask)にトレール幅を加えた値よりも大きいこと、または逆指値注文が設定されていないこと
ストップロスオーダーの変更
142行目からは、トレーリングストップを発動させるOrderModify関数を記述しています。
//--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) Print("OrderModify error ",GetLastError()); return;
3つの発動条件を満たしたら、逆指値(OrderStopLoss)を、現在の売値(Ask)に設定したトレール幅を加えた値に変更します。
ソースコードの解説は以上です。
バックテスト
トレーリングストップがちゃんと機能しているか、バックテストで確認してみましょう。バックテストのやり方は別記事にまとめています。
バックテストが終わったら、テスターの「結果」タブを開いてみましょう。
取引種別が「modify」の行を見てみると、決済逆指値(S/L)の値が変化しているはずです。
価格の動きにトレーリングストップが機能し、ロスカットラインが追跡して行っているのです。
まとめ
MQL4言語入門として、サンプルEA「MACD Sample.mq4」を使ってトレーリングストップのソースコードを解説しました。
EA作りはけして難しくはありません。
仕組みさえわかれば、自作EAに簡単に実装できるようになります。
ぜひあなたの勝てるEA作りに役立ててください。