【MT5】MQL5ウィザードを使って初めてのプログラム作成

【MT5】MQLウィザードを使って初めてのプログラム作成 メタトレーダー5

ずっと心の奥底で温め続けていた「メタトレーダーをやりたい」という願い。ドラゴンボールはまだ一つも集まっていませんが、願いが叶いました。

第一弾の記事を書かせていただきます!

MQL5ウィザードなるものを使って初めての自動売買プログラムの作成を行います。

せっかく意気込んでメタトレーダー5の環境を構築し、プログラム作成を始めようとしたのにとっかかりがなく溺れそうになっているあなたに1本のわらを差し出します。

困っていた私がネットの海を溺れながら見つけた「サルでも解るMQL5 ウィザード」というTHE初心者向け!的な記事の内容をさらに簡略化しています。そして、サルごときでは気にならないだろうが人間が気になった点を大量に加筆して記事にしています。

この記事が、あなたのメタトレーダー5の最初の一歩として役立てることを願っております。

この記事で分かること
  • MQL5ウィザードを使った一番簡単なプログラムの作成方法
  • 作成したプログラムをテストする方法
  • 指標のパターンの確認方法
  • 指標のパターンの強度の確認方法
  • 指標のパターンの強度の変更方法

メタトレーダーとは

初回の記事ということで簡単にメタトレーダーにも触れておきます。

メタトレーダーとは、ロシアのメタクオーツ(MetaQuotes Software)社が提供している取引プラットフォームです。カスタマイズ性が高く、なんでもござれのプラットフォームで世界中で愛用者も多く、チャートに独自のインジケーターを表示させたりすることもできます。そして、EA(エキスパート・アドバイザ、Expert Advisor)と呼ばれる自動売買プログラムを使用して、システムトレードを実現できるのが大きな特徴となっています。

最新のバージョンはメタトレーダー5なのですが、前のバージョンの4との互換性がない部分があり、実際に使われいるのは圧倒的にメタトレーダー4です。しかし、私はメタトレーダー5に集中することに決めました。

本記事も含め、私の記事はメタトレーダー5に特化してお送りします。

クノウ
クノウ

メタトレーダー5を使ってFXとCFDに投資ができます。
(国内業者を利用しています)

ウィザードを使ったプログラム作成

EAのプログラムはMQL(MetaQuotes Language)という独自の言語で記述します。そして、MQLでプログラムを作成するためにメタエディター(MetaEditor)というソフトが用意されています。

メタエディターにはMQLウィザードが組み込まれており、ウィザードを利用することでプログラミングをすることなく簡単に自動売買のプログラムを作成できるようになっています。

自分でプログラムを書きたいと思っている私ですが、とっかかりとしてまずはこのウィザードを使ってプログラムを作成することにしました。

ソースコードの作成

MQL5ウィザードでポチポチとマウスで選んでいくだけでプログラムの元となるソースコードが作成できます。

各種パラメータがありますが、今回の記事では別の部分に集中するために変更を加えないこととします。

ステップ1
メニューからツールを選択 → MetaQuotes 言語エディターをクリック

プログラム作成 ステップ1
ステップ1

 ➡メタエディターが開きます。


ステップ2
ツールバーの新規作成をクリック

プログラム作成 ステップ2
ステップ2

 ➡MQLウィザードが表示されます。


ステップ3
エキスパートアドバイザ(自動生成)を選択 → 次へをクリック

プログラム作成 ステップ3
ステップ3

ステップ4
名前を入力 → 次へをクリック

  • 最初から入力されている部分は保存場所を示しています。あえて保存場所を変えたい場合のみ変更してください。
  • フォルダを追加すると整理しやすいのでおススメです。

下記の画像では「Original\test1」を入力しています。(Originalフォルダの中にtest1という名前のファイルを作成します)

プログラム作成 ステップ4
ステップ4

ステップ5
追加をクリック

プログラム作成 ステップ5
ステップ5

ステップ6
[名前]でSignals of indicator ‘Moving Average’を選択 → OKをクリック

売買のためのシグナルを選択します。今回は知名度が抜群である移動平均線を使います。

プログラム作成 ステップ6
ステップ6

売買のための指標は20種類が用意されています。


ステップ7
次へをクリック → 次へをクリック → 完了をクリック

色々パラメータがありますが、変更せずに完了まで突っ走ります。

 ➡ウィザードが終了し、test1.mq5というファイルが作成されます。

プログラム作成 ステップ7
作成されたソースコード

コンパイルとテスト

完成したソースコードに対して以下を行い、ちゃんと動作するかどうかの検証を行います。

  1. メタトレーダー上で動くようにソースコードを変換する(コンパイル)
  2. 完成したEAをテストで動かす

コンパイルの実行

ソースコードが完成したら毎回行う作業がコンパイルになります。コンパイルをすることによって、人間が分かりやすい言葉で書かれていたものがメタトレーダーが理解できる言葉に変換されます。

コンパイルの仕方
メタエディターにてコンパイルをクリック

コンパイルの実行
コンパイルの実行

 ➡コンパイルが終わると下部にあるツールボックスに結果が表示されます。
  0 errorsとなっていればOKです。

コンパイル結果
コンパイル結果

テストの実施

ここまででプログラム完成です。ものの数分ではないでしょうか?ちなみに記事の作成にはめちゃめちゃ時間がかかっています。

すべての準備が整い、いつでも自動売買をできるようになりました。しかし、すぐに戦場に飛び込んでも返り討ちにあうのが落ちです。また、コンパイルでエラーがなくても売買がまったく行われないこともあります。

そこでメタトレーダーに搭載されている過去のデータを使ってバックテストをする機能を利用し、問題なく自動売買が行われるかのテストを行います。

ステップ1
メタトレーダーのナビゲータでエキスパートアドバイザ(EA)のプラスをクリック → Originalのプラスをクリック → test1の上で右クリック

テスト実施 ステップ1
ステップ1

今回はOriginalというフォルダを作成していました。
フォルダを作成していない場合は、エキスパートアドバイザ配下にファイルがどんどん増えていきます。


ステップ2
テストをクリック

テスト実施 ステップ2
ステップ2

 ➡ストラテジーテスターにプログラムがセットされます。


ステップ3
ストラテジーテスターの[オプティマイズ]が無効化となっていることを確認

「オプティマイズ = 最適化」です。パラメータを変えながらテストをするのが醍醐味ですが、今回は簡素化のために無効にします。

テスト実施 ステップ3
ステップ3[クリックで拡大]

対象となる銘柄や足、テスト対象期間などが変更できます。


ステップ4
ストラテジーテスターの右下にあるスタートをクリック

 ➡テストが動き出し、しばらくするとテスト結果が表示されます。

テスト結果の見方

テストが終わると売買サインが入ったチャートが別ウィンドウで表示されます。また、ストラテジーテスターにバックテストタブ、グラフタブが追加されます。

何も売買されてない場合は、次の項目「テスト結果がおかしいときは」を見ればヒントが見つかるかもしれません。

■チャート
買いと売りのポイントが矢印で表示されます。マウスオーバーをすると取引価格なども確認できます。

テスト結果(チャート)
テスト結果(チャート)[クリックで拡大]

■ストラテジーテスター バックテストタブ
総損失、総利益、取引数、勝ちトレード数、負けトレード数などの詳細なデータが確認できます。

テスト結果(ストラテジーテスター バックテストタブ)
テスト結果(バックテストタブ)[クリックで拡大]

■ストラテジーテスター グラフタブ
グラフ化された資金の推移が確認できます。

テスト結果(ストラテジーテスター グラフタブ)
テスト結果(グラフタブ)[クリックで拡大]
クノウ
クノウ

右肩下がりからの、ノーマネーでフィニッシュです。

テスト結果がおかしいときは

テストをしてもまったく売買が行われないことがあります。実際私も最初にテストしたときはまったく売買が行われませんでした。

そんな時はストラテジーテスターの操作ログタブを確認します。

操作ログタブには日付や約定した価格などのテストの売買のログが表示されています。

例えば下記の例では「Invalid stops」というエラーが出ており、Stop loss(損切り)に設定している値に問題があることがわかります。

ストラテジーテスター 操作ログタブ
ストラテジーテスター 操作ログタブ[クリックで拡大]

パラメータタブにて、利益確定と損切りの値を変更して再度テストを行うとちゃんと売買が行われるようになりました。

ストラテジーテスター パラメータタブ
ストラテジーテスター パラメータタブ[クリックで拡大]

よく起こるエラーとして「No money」もあります。設定タブにて入金額を増やしてから再度テストしてください。

取引決定のメカニズム

さて、一通りテストまでが終わったところでウィザードを利用してプログラムを作成した場合の取引するかどうかを決定するメカニズムについて勉強します。

取引は足が新しく作られたタイミングで以下の要素を組み合わせて決定されます。

  1. シグナルの強度(-100~100)
  2. 重みづけ(0~1)
  3. オープン/クローズしきい値(0~100)

1と2は組み込んでいる指標の数だけ存在します。3はEAに対して1つずつしきい値を設定します。

「各指標のシグナルの強度に重みづけしたものの平均」と「しきい値」を比較することで取引の判断を行っています。

  • ポジションのクローズ(決済)に関しては、取引決定の判断とは別のタイミングで設定した利益確定・損切りの価格で取引が行われることがあります。
  • すでに決められたポジション数を所持している場合は、新しいポジションはオープンされません。

例として、2つの指標を組み込んでいるプログラムのポジションオープンの取引判断を考えてみます。

1つ前の足に対して下図のような計算が行われます。
今回は「EAのスコアがマイナス」「オープンしきい値より大きい」という条件が揃ったため、売りのポジションをオープンするという結果になりました。

売買判断メカニズム
ポジションオープン判断の例

「EAのスコアがプラス」「オープンしきい値より大きい」という条件が揃った場合は買いのポジションをオープンします。

シグナルのパターンと強度

指標には20種類あり、それぞれにシグナルとそのシグナルに割り当てられた強度が決められています。

ここでは移動平均を例にとって内容を見ていきます。

移動平均の買いシグナルについてまとめたものが以下の表です。売りシグナルは買いシグナルの逆になります。

パターンシグナルの種類説明強度(初期値)
0買いに異議なし価格(足)がすべて指標より上にある。80
1買いシグナル価格(足)が下向きに指標を交差(分析されているバーの始値が指標を上回り、終値が指標を下回る)し、指標が上昇する。
(弱いシグナル)
移動平均買いシグナル パターン1
10
2買いシグナル移動平均交差。 価格(足)が上向きに指標を交差(分析されているバーの始値が指標を下回り、終値が指標を上回る)し、指標が上昇する。
(強いシグナル)
移動平均買いシグナル パターン2
60
3買いシグナル足の下ヒゲが指標と交差(分析されている足の始値と終値が指標を上回り、安値が指標を下回る)し、指標が上昇する。
(弱いシグナル)
移動平均買いシグナル パターン3
60

初期値として設定されている強度は、適切な数値が入っているようには見えないためプログラム毎で調整する必要があると思われます。

  • 「異議なし」シグナルの強度が80もある
    他の指標のシグナルと掛け合わさるときにこの指標の影響をなくすように作られたものと予想しますが、強度が大きすぎます。
    他の指標のシグナルが逆で点灯していても打ち消すぐらいの影響力を持ってしまっています。
    影響をなくすのなら理論的にはしきい値と同じ値にすべきでは?
  • 売買シグナルの数値が弱すぎる
    「異議なし」シグナル以外のシグナルでは強度が小さいです。他の指標のシグナルと掛け合わされたときにも有効に働くような数値が必要です。

上記の表に記載した情報は1カ所でまとめて確認することができません。これから自分でプログラムを作ろうとする際には元になっている情報を取ってくる必要が出てきますので、説明をします。

シグナルのパターンの確認方法

シグナルのパターンはメタエディターのヘルプから確認することができます。

ステップ1
メニューからヘルプを選択 → MQL5 リファレンスをクリック

シグナルのパターン確認 ステップ1
ステップ1

 ➡MQL5 リファレンスが開きます。


ステップ2
目次をクリック → 標準ライブラリのプラスをクリック → ストラテジーモジュールのプラスをクリック → 売買シグナルのモジュールのプラスをクリック

シグナルのパターン確認 ステップ2
ステップ2

 ➡20種類の指標が表示されます。

例えば移動平均をクリックすると以下のようなシグナルと説明が書かれたページが表示されます。
※このページではシグナルに割り当てられた強度は確認できません

移動平均指標のシグナルページ
移動平均指標のシグナルページ

シグナルの強度の確認方法

色々なところでメカニズムの説明は書いてありますが、シグナルの強度の数字がどこを見れば確認できるのかを書いてあるページは見つかりませんでした。

シグナルのパターンは分かっても肝心の強度が分からないため難儀をしていました。しかし、メタエディターにてソースコードを探っていくことによりついにその場所を発見できました。

ステップ1
作成したプログラムのソース内から知りたい指標のインクルードファイル名を探す

今回の場合は「Expert\Signal\SignalMA.mqh」が移動平均用のインクルードファイルです。

パターンの強度確認 ステップ1
ステップ1

ステップ2
ナビゲータでIncludeのプラスをクリック → Expertのプラスをクリック → Signalのプラスをクリック → Signal.mqhをクリック

パターンの強度確認 ステップ2
ステップ2

 ➡Signal.mqhが開きます。


ステップ3
Signal.mqh内でパターンと割り当てられた強度を解析

ソースファイル内にすべての情報は書かれています。例えば「m_pattern_0」でソース内を検索すれば、m_pattern_0に80の強度が割り当てられていることがわかります。

パターンの強度確認 ステップ3
ステップ3
  • 記載されている数値を変えることでシグナルの強度に割り当てられる強度を変えることができます。
    ※インクルードファイルのコンパイル後、呼び出し側も再度コンパイルが必要です
  • 呼び出し側のプログラムからシグナルの強度を変更することも可能です。

ただし、ソースコードに書かれているパターンとライブラリのどのパターンが合致するものなのかは分かりませんので以下の情報から自分で解析する必要があります。

  • ソースコード内のコメント
  • ソースコード内のパターンが適用される条件
  • シグナルの強度を変更して得られるテスト結果

シグナルの強度を調整したテスト

先ほどのテスト結果を再度見てみるとポジションがクローズした次の足でポジションがオープンしていることが分かります。

テスト結果(チャート)
調整前のテスト結果[クリックで拡大]

これは「異議なし」シグナルが指標と足が接触していない箇所においてもシグナルが点灯することの影響です。そこで「異議なし」シグナルの強度を0にして再度テストを回してみます。

シグナルの強度変更方法(呼び出しプログラム側から)

ステップ1
先ほど作成したtest1.mq5にて「signal.AddFilter(filter0)」を検索

 ➡ソースコード内の移動平均の指標を組み込んでいる部分が見つかります

強度の変更 ステップ1
ステップ1

ステップ2
[Set filter parameters]部分に「filter0.Pattern_0(0);」を追記

追記をすることで移動平均のシグナルパターン0に対する強度が0になります。

強度の変更 ステップ2
ステップ2

結果発表

変更を加えたソースコードをコンパイルし、同じ条件でテストを回してみます。

得られた結果を確認すると移動平均線とバーに接触がある箇所の次の足のみでポジションがオープンされるようになっていることが分かります。めでたしめでたし。

調整後のテスト結果(チャート)
調整後のテスト結果(チャート)[クリックで拡大]
  • 単一の指標で重み1.0、しきい値は10としているのでパターン1~3に当てはまるとポジションをオープンする動作になっています。
  • ポジションのクローズは利益確定・損切りで行われています。

なお、ノーマネーでフィニッシュするのは変わりません。

調整後のテスト結果(グラフ)
調整後のテスト結果(グラフ)[クリックで拡大]
クノウ
クノウ

ノーマネーになる最後は変わらない…

その他参考サイト

あとがき

私がメタトレーダーの勉強を始めて感じたことは「コミュニティに色々情報が載ってはいるがどれから始めればいいのか分からない」「MT4との比較があるがそもそもMT4を知らない」でした。

メタトレーダー4に比べてメタトレーダー5の情報はまだまだ少ないのが現状です。メタトレーダー5から始めたい!という酔狂な方たちに向けて役立つ情報発信ができるように精進していきます。

コメント

タイトルとURLをコピーしました