MQL5ウィザードに自作プログラムを組み込む|MQL5の世界(3回目)

2018年11月29日

プログラミング

今回はMQL5ウィザードに自作のシグナルを組み込む方法をご説明します。

プログラムの詳細は少し分かりづらいのですが 作成に必要な部分を掻い摘んで説明していきますので心配いりません。

 

これまでの内容を理解している前提で進めていきますので、まだ見ていない方は先にご確認いただければと思います。

新しいテクノロジーに触れよう|MQL5の世界(1回目)

MQL5ウィザードでできること|MQL5の世界(2回目)

自作シグナルの目的

MQL5ウィザードに自作のシグナルを組み込むのは、「単独で勝てるプログラムを作る」のが目的ではありません。

組合せの数を増やすのが目的です。

様々なシグナルを小さな部品として準備しておけば、あとはその部品をAND条件やOR条件で組合わせて強いEA(または強いEAのベースとなるもの)を作成することができるのではないでしょうか。

 

作成するシグナル

ボリンジャーバンド

シンプルなボリンジャーバンドのシグナルを作成します。

何かしらの経緯はあると思うのですが、MQL5ウィザードのシグナルにボリンジャーバンドが無かったので自作しようと思います。

 

シグナルのルール

プログラムはMQL5 Communityにもアップしていて、以下で簡単にシグナルの説明をしているのでご確認いただければと思います。

また、プログラムも以下のリンクから取得できますので、ダウンロードしてコンパイルしていただければと思います。

シンプルなボリンジャーバンドに基づく取引シグナル

 

※日本語版は、あとあとURLが変わる可能性もあるので念のため英語版のリンクも貼っておきます。(プログラム自体は全く同じものを添付しています。)

Trade signal based on simple Bollinger bands

 

コンパイルがよくわからない方は、先に「初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)」をご確認ください。

 

プログラムの説明

フォルダの作成

まずはシグナルを格納するフォルダを作成します。

Include > Expert > SignalにMySignalというフォルダを作成しました。

MQL5のフォルダ構成

 

プログラムの作成

作成したMySignalフォルダを右クリックして、「新しいファイル」>「新しいクラス」と進みます。

MQL5ウィザードの「クラス作成」部分で以下入力を行い、「完了」をクリックします。

  • クラス名:SignalBands
  • インクルードファイル:自動入力されるので、入力不要
  • ベースクラス:CExpertSignal
  • 著作者:任意
  • リンク:任意

MQL5ウィザード設定画面

 

プログラムの説明

メンバ変数宣言部分

変数名 説明
m_bands 利用するインジケーター
※今回はボリンジャーバンド
m_bands_period ボリンジャーバンドの期間
m_shift インジケーターのシフト
m_deviation ボリンジャーバンドの偏差
m_applied 計算に使う価格
m_pattern_0 シグナルパターン1
m_pattern_1 シグナルパターン2

※シグナルパターンについては、自分で何個のシグナルを準備するかによって個数が変わります。
今回は2パターンのシグナルを準備するので、「m_pettern_0, ma_pettern_1」を準備しました。

 

Public関数(メソッド)宣言部分

関数(メソッド)名 説明
CSignalBands コンストラクタ
~CSignalBands デストラクタ
PeriodBands m_bands_periodに値を設定する
Shift m_shiftに値を設定する
Deviation m_deviationに値を設定する
Applied m_appliedに値を設定する
Pattern_0 m_pattern_0に値を設定する
Pattern_1 m_pattern_0に値を設定する
ValidationSettings エラーチェック
(親メソッドをオーバーライド)
InitIndicators ボリンジャーバンドの取得
(親メソッドをオーバーライド)
LongCondition 買いシグナル
(親メソッドをオーバーライド)
ShortCondition 売りシグナル
(親メソッドをオーバーライド)

説明に「親メソッドをオーバーライド」と記載した部分は、「親クラス(ExpertSignal)にも同じ名前のメソッドがあるけど子クラスで再定義できるよ。LongConditionとShortConditionは親クラスで定義しているけど中身が0を返すだけになっているから必ず子クラスで再定義してね。」という部分です。

あまり深く考えずに「親メソッドをオーバーライド」と書いた部分は、新しく作成するプログラムに書く必要があると理解しておいても問題ありません。

 

Protected関数(メソッド)宣言部分

関数(メソッド)名 説明
InitBands ボリンジャーバンドの取得
Base ボリンジャーバンドの中央値
Upper ボリンジャーバンドの上側の値
Lower ボリンジャーバンドの下側の値
DiffOpenLower 2本前のクローズから下側の線を減算した結果
DiffCloseLower 1本前のクローズから下側の線を減算した結果
DiffOpenUpper 2本前のクローズから上側の線を減算した結果
DiffCloseUpper 1本前のクローズから上側の線を減算した結果

今回のシグナルに必要な計算をしている部分なので、かなり独自の内容になっています。

 

コンストラクタ・デストラクタ

コンストラクタではボリンジャーバンドに使うパラメタの初期値を設定しています。

あとからバックテストなどを実行する際に表示される値は、この部分で調整可能です。

デストラクタでは何もしていません。

インスタンスの削除は、親クラスが全てやってくれますのでこちらで書く必要はありません。

コンストラクタがイメージしづらい場合は、「MT4/MT5でオブジェクト指向入門|MQL入門(10回目)」をご参照ください。

 

エラーチェック

固有のエラーをチェックします。

期間や偏差にマイナス値を設定するのはおかしいので、エラーではじきます。

 

ボリンジャーバンド値の取得

ここは定型で覚えておいて大丈夫です。(余裕が出たらプログラムを追ってみてください。)

定型にならない部分は「indicators.Add(GetPointer(m_bands)」と「m_bands.Create」で、標準ライブラリで準備されているテクニカル指標(今回はボリンジャーバンド値)を取得しています。

 

シグナル出力部分

LongConditionとShortConditionです。

シグナルを出力するための条件を記載しています。

 

MQL5ウィザードからEAを自動作成する

新しいテクノロジーに触れよう|MQL5の世界(1回目)の手順に沿ってMQL5ウィザードを起動します。

シグナルの設定部分でプルダウンを選択すると、作成したシグナルが表示されます。

※表示されない場合はMetaEditorを再起動してください。

MQL5ウィザードのシグナル設定

 

あとは通常の手順通りに設定していけば、ボリンジャーバンドのシグナルを備えたEAの作成完了です。

他のシグナルと組合わせたり、トレーリングストップや資金管理と組み合わせれば有効なパターンが見つかるのではないかと思います。

 

最後に

プログラム部分は説明が不足しているとは思いますが、自作したシグナルをMQL5ウィザードでそのまま利用できることが分かったと思います。

 

MetaEditorにはプログラムを整えるツールがついていて、実行するとかなり標準ライブラリやMQL5 communityで提供されているプログラムの形式に近くなります。

「MetaEditor > ツール > スタイラー」で実行できるので試してみてください。(慣れるまでは逆に読みづらいですが。。。)

 

次は「MQL5ウィザードにOpenとCloseの条件が異なるロジックを組み込む|MQL5の世界(4回目)」です。