MT4の無料EA第2弾

2018年10月21日

自由な人

無料EAの第2弾を作成します。

今回はトレーリングストップによるExitを使います。

説明で利用するソースコードは自由にご利用ください。

最後にプログラムをまとめたものを完成版として掲載します。

無料EAの第1弾をまだ見ていない方は、「押し目エントリーのEA作成(第5回)」をご覧ください。

また、一からEA作成をしたい方は、「メタトレーダー(MT4/MT5)で自動売買するための事前準備(第1回)」からご覧ください。

事前準備

今回のプログラムも「最短でEAを作る(第2回)」で利用したものと同じMT4/MT5共通ライブラリを使用しますので、先に導入いただければと思います。

 

売買ルール

ブレイクアウトで仕掛けるEAを作成します。

シンプルなルールで一定の利益を上げるEAは、堅牢である確率が高くカスタマイズもしやすいので最も強いです。

プログラムに落としこむために、EntryとExitのルールを厳密に定義していきます。

[N]と記載している部分は、後から値を設定する部分になります。

 

Entry条件

買いルール
1本前のローソク足の終値が1本前の[N]期間指数平滑移動平均線より上である
[N]期間中の高値を1本前の終値が上回る
売りルール
1本前のローソク足の終値が1本前の[N]期間指数平滑移動平均線より下である
[N]期間中の安値を1本前の終値が下回る
 

Exit条件

トレーリングストップを使ったExitを行いますので、設定したStopLossに価格が到達した場合に決済されます。

買いポジション保有の場合
[N]pips下にStopLossを設定し、価格が上昇するにつれてStopLossの位置を引き上げていく
売りポジション保有の場合
[N]pips上にStopLossを設定し、価格が下降するにつれてStopLossの位置を引き下げていく
 

プログラム化

MetaEditorを開いて適当な名前でEAを作成してください。

押し目エントリーのEA作成(第5回)」で使ったプログラムをコピーします。

変更するのはentry_signal()とexit_signal()です。

 

Entry部分

先ほど定義したEntryルールをプログラムに落とし込みました。

 

Exit部分

今回はExitがトレーリングストップによるものなので、ルールとしては存在しません。

トレーリングストップの設定のみ記載します。

  • 4行目・・・現在値からストップロスの位置を割り出す
  • 5行目・・・ストップロスの値を取得
  • 6行目・・・ストップロスの値が0の場合(初回)は無条件で4行目の値を設定、ストップロスの値より4行目の値が大きい場合は4行目の値を設定

 

プログラム最終版

各外部パラメタの説明を記載します。

名称 説明
lot Entry時のロット数(0.1ロット=1万通貨)
margin_limit 最低証拠金
limit_spred 許容できるスプレッド
high_break_period 上値ブレイク判定に使う期間
low_break_period 下値ブレイク判定に使う期間
trail_pips トレーリングストップのpips数

プログラムは以下のような形となりました。

MetaEditorを開いてコンパイルしましょう。

 

テスト

バックテスト

まずはMT4/MT5側のテスト設定をします。

GBP/JPYで動かすので、スプレッドは少し大きめの30に設定しました。(MT5はバックテスト時に正式なスプレッドが自動で利用されるので設定不要です。)

ここからの説明がよくわからない方は、「最短でEAを作る(第2回)」からご確認ください。

項目名
エキスパートアドバイザ 作成したEA名
通貨ペア GBP/JPY
モデル 始値のみ
期間を指定 チェック
開始日 2000.01.01
終了日 2015.01.01
ビジュアルモード チェック無し
期間 H1
スプレッド 30
最適化 チェック無し

 

各パラメタの初期値は以下にしました。

項目名
lot 0.1
margin_limit 1000
limit_spred 30
high_break_period 10
low_break_period 10
trail_pips 200

 

では早速テストしましょう。

かなり凸凹していますが、悪くない結果です。
バックテスト結果

 

最適化

以下設定で最適化を行ってみましょう。

設定後、MT4/MT5の「最適化」を実行してください。

項目名 スタート ステップ ストップ
high_break_period 10 10 100
low_break_period 10 10 100
trail_pips 50 50 300

 

トレーリングストップの値が50の場合、値動きの荒いGBP/JPYでは全く機能しなそうですね。

私の好みになってしまいますが、買いと売りの条件を同じようなパラメタにしたいので、今回は以下の245番を選択します。
最適化結果

 

画面では途切れていて見えませんが、実際設定する値は以下になります。

項目名
high_break_period 50
low_break_period 50
trail_pips 150

それでは設定を変更して再度バックテストしてみましょう。

MT4/MT5の「最適化」チェックを外して「スタート」をクリックしてください。
最適化後のバックテスト結果

先度よりもだいぶ改善されました。これでフォワードテストにかけてみようと思います。

 

フォワードテスト

期間を「2015.01.01」~「2019.01.01」に変更してバックテストを実施します。
フォワードテスト結果

微妙な結果でしたね。

2016年の半ばまで(およそ1年半)は、かなりのパフォーマンスを見せましたが、その後伸び悩んだようです。

 

まとめ

いかがだったでしょうか。

相当シンプルな売買ルールにも関わらずある程度のパフォーマンスが出たのではないかと思います。

ここから自由にカスタマイズすることもできますし、EAポートフォリオの1つとして考えることも可能です。

次はもう少し直近を重視したEAを作成しようと思います。

いちから自作EAの作成方法を勉強したい方は以下もご参照ください。