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

2018年11月26日

スマートフォンの中へ向かう人

このシリーズではMT5の自動売買に特化し内容を学んでいきます。

学び終える頃には、内容を理解したうえでMT5のEA(自動売買ツール)を作成できるようになっていると思います。

 

MT4との互換性は考慮しませんので、MT4に興味がある方やMT4とMT5の互換部分を気にされる方は以下の記事を参考にしてください。

同じプログラムでMT4/MT5の両方を動かすことができます。

メタトレーダー(MT4/MT5)で自動売買するための事前準備(第1回)

 

前提

MT5がPCにインストールされている前提で進めていきます。

MT5のインストールが済んでいない方は、MQL5 communityか以下の業者に口座を開設してダウンロードしてください。

研究目的のみであれば、MQL5 communityからのダウンロードで良いかと思います。

 

[MT5が利用可能な業者(私も使っています)]

 

MT5特化の経緯

MQL4を引きずるとMQL5を理解できないから

MT5はMQL5というプログラム言語で書かれ、MT4はMQL4で書かれます。

両者は互換性が無く、MT5で動作するプログラムがMT4では動作しません。

同じプログラムで動作させるためには専用の共通ライブラリを導入する必要があります。

共通ライブラリはとても素晴らしいもので、MQL4で書いたプログラムがそのままMQL5で使えてしまうのです。

 

ただ、こんなにも便利な共通ライブラリにも一点だけ問題があります。

MQL4のプログラムスタイルでMQL5が動いてしまうので、いつまでたってもMQL5が理解できないのです。

※ライブラリが問題なのではなく、ライブラリを使う側の人間の問題です。

両方バランスよく学ぶのが理想ですが、時間も限られていますしなかなかそうはいきません。

 

[MQL5を理解できないと何が悪いのか?]

MQL5が本来持っている機能を使いこなすことができません。

MQL5には考えているよりも多くの便利な機能やトレードアイデアが標準機能として盛り込まれており、それを使わないことは自動売買で利益を得ようとしている私たちにとって、とてもマイナスになります。

 

逆に考えれば、しっかりMQL5の機能を使いこなせば今よりも様々な点で有利になると言えます。

使いこなすには一度MQL4との互換部分を無視してMQL5に特化していく必要があります。

 

MT4には未来が無いから

MT4ではなくMT5を使う理由は、以下の記事をご参照頂ければと思いますが、大きくは「MT5の方が圧倒的に性能が上。メタトレーダーの開発元がMT5を推奨している。(MT4を推奨していない)」という2点になります。

特に「開発元が推奨していない。」というのは、プログラムの世界ではかなり致命的なことです。

MT4を辞めてMT5を使う理由

 

 

早速MQL5でプログラムを作ってみる

MQL5には、非常に強力なEA自動作成機能がついています。

使い方はとても簡単なのですが、内容を理解して使うにはある程度の知識が必要なので説明していきます。

 

プログラムの作成

MetaEditorを起動する

もし起動方法が分からなかったり、EA自体の作成が初めてであれば、以下を先に見ていただいた方が理解しやすいです。

初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)

 

MQL5ウィザード実行

「新規作成」をクリックして、MQL5ウィザードを起動します。

「エキスパートアドバイザ(自動生成)」を選択して、「次へ」をクリックします。

MQL5ウィザード:設定画面①

 

プログラムの名前を入力して、「次へ」をクリックします。

今回はSqmple001という名前にしました。

プログラムの手前部分は、作成するプログラムの配置場所なので初期値のままでも構いません。

MQL5ウィザード:設定画面②

 

「追加」をクリックします。

MQL5ウィザード:設定画面③

 

名前のプルダウンで、「Signals of indicator ‘Moving Average’」を選択し、他は変更せずに「OK」をクリックします。

MQL5ウィザード:設定画面④

 

シグナルが追加されたことを確認して、「次へ」をクリックします。

MQL5ウィザード:設定画面⑤

 

初期値のまま「次へ」をクリックします。

※驚くことにウィザードでトレーリングストップの種類を選択できるようになっています。

今回は練習なのでOFFの設定ですが、ウィザードのポテンシャルが高いことが分かります。

MQL5ウィザード:設定画面⑥

 

初期値のまま「完了」をクリックします。

※さらに驚くことにロットの管理方法を選択することができます。

今回は練習なので、0.1の固定ロットにしました。

MQL5ウィザード:設定画面⑦

 

プログラムが表示されますので、「コンパイル」をクリックして準備完了です。

MQL5ウィザーとで作成したプログラム

 

プログラムの実行

早速バックテストしてみましょう。

トレードされた箇所を黄色丸で囲いました。

MT5のEAバックテスト結果

???
???

これはどういうことでしょうか?

いたるところでトレードされている・・・

そもそも作成するときに移動平均線(Signals of indicator ‘Moving Average’)を選んだけど、移動平均線がどうなった時にトレードするルールなんだ?

え?意味が分からない・・・

よし、MT5を使うのやめよう・・・

使うにしても全部共通ライブラリに任せてしまおう・・・

 

頭の中ではこのようなことになるのではないでしょうか?

 

私も昔なった記憶があります。

でもちょっと待ってください。

新しいことを覚えるには痛みを伴いますが、その先には素晴らしいものが待っています。

 

ウィザードのテクノロジーを理解する

そもそもウィザードで選択した、移動平均線(Signals of indicator ‘Moving Average)は何者なのか?を確認します。

MetaEditorの上の方に「ヘルプ」がありますので、その中の「MQL5リファレンス」を選択します。

以下の画面が起動しますので、「標準ライブラリ > ストラテジーモジュール > 売買シグナルのモジュール > 移動平均」と進んでいくと、右側に説明が表示されます。

MQL5リファレンス(移動平均シグナル)

 

まずはリファレンスの説明文をじっくり読んでいただければと思うのですが、簡単に説明します。

この移動平均線シグナルには「買い4つ、売り4つ」の種類があり、それぞれに数値が割り振られています。

 

※買いの例で説明します。(売りは逆になるだけです。)

モデル 説明 数値
モデル0 終値が移動平均線より上にある 80
モデル1 移動平均線が上昇、ローソク足が移動平均線を上から下にクロス 10
モデル2 移動平均線が上昇、ローソク足が移動平均線を下から上にクロス 60
モデル3 移動平均線が上昇、下髭が移動平均線より下にあり、終値は移動平均線を上回る 60

このプログラムを解読するためにはさらに2つのキーを理解する必要があります。

作成したプログラムの上の方に、以下2つの記述があるかと思います。

Signal_ThresholdOpen=10 // ポジションをオープンする閾値

Signal_MA_Weight=1.0 // 重み

 

例えば、モデル0で買いが成立したときの計算は以下で算出されています。

80(モデル0の数値) × 1.0(重み) >= 10(ポジションオープンの閾値)

 

ここが今までと決定的に違うところではないでしょうか。

とても理解しづらい部分だと思いますので、図で表現してみます。(図の作成が下手くそで申し訳ありません。)

 

[今までのモデル]

条件が成立したか?していないか?(0 or 1)しかない世界のイメージです。

MT4で主流のモデル

 

[新しいモデル]

新しいモデルではそれぞれに数値が割り当てられ、重みを掛けた結果に対して売買の判断が行われます。

MT5ウィザードのモデル

 

これは、一見すると処理を複雑にしただけでとんでもなく無駄に感じるでしょうが、実はそうではありません。

より実戦的な図を示します。

 

「移動平均モデル0と1」、「RSIモデル0と1」で構成され、「移動平均モデル1とRSIモデル0」が成立したことを考えます。

MT5ウィザードの実戦的なモデル

 

MQL5ウィザードはこのような考え方のもと構築されています。

正しくは「買い側の重みを加味した結果」から「売り側の重みを加味した結果」を減算した結果で判定するのですが、図が複雑になってしまうので省略しました。

「買い勢力が64 – 売り勢力が5」なら、結果は買い59となり、閾値50を超えているので買い注文されるイメージです。(詳しくはリファレンスを何度か読み返してみてください。)

 

MQL5自体は従来の方法でもプログラミング可能ですが、開発元がMQL5ウィザードに新しい手法を持ってきているということは、こちらを推奨しているのではないか?と私は考えております。

もし新しいシグナルを思いついたら、自分で「オリジナルのモデル0~100」を作ります。

作成したモデルはMQL5ウィザードから選択できるようになりますので、既存のシグナルとかけ合わせて簡単にテストすることができます。

(モデルの自作は別の記事で説明します。)

 

個人的な話になってしまいますが、私は同じようなモデルをMQL4でも構築して自動売買しております。

例えば「連続X日上昇」、「ローソク足の形」、「移動平均の位置」、「RSIの位置」等々、買いに有利な状況でそれぞれに付けた点数を加算していき、売りに有利な状況で点数を減算していきます。

総合した結果、「結局今はどっちにポジションを取るべきなの?」ということを判断します。

従来型のように0 or 1の直線的なモデルよりも、より柔軟にマーケットの状況を捉えられるのではないかと考えています。

MQL5では開始点(EAの自動生成)からこのモデルが採用されているということです。

 

もちろん良いことばかりではなく、以下のような問題点も出てきますが、メリットの方が大きいと考えております。

  • 0 or 1がはっきりしないので処理がブラックボックス化しやすい
  • パラメタが多くなるため、過剰最適化しやすい

問題点については別の機会に記事にしようと思います。

 

パラメタを変化させて再度実行する

ここまでの学習で、なぜ先ほどの実行結果が常に売り買いされているものになっていたかの説明がつきます。

「モデル0:終値が移動平均線より上にある・・・80」が原因です。(売りは逆)

終値は必ず移動平均線より上か下にありますので、常にポジションを持ってしまうでしょう。

 

試しに90行目付近の「filter0.Weight(Signal_MA_Weight);」の下に以下を追加してみましょう。

filter0.Pattern_0(0);
filter0.Pattern_1(0);
filter0.Pattern_3(0);

これで移動平均線モデル0, 1, 3に割り当たっている数値が0になりますので、シグナルが成立しても売買には至りません。

再度バックテストを実行します。

MT5のバックテスト再実行

 

今度は闇雲に売買されるのではなく、しっかり移動平均線を絡めた場所でエントリーしています。

そもそもが「終値が移動平均より上」というモデルの初期値に、なぜ80が割り当たっているのか謎ですが。。。

 

最後に

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

「MQL5ウィザードの自動生成は全然意味わからねー。使えねー。」という状態が少しでも解消されていれば幸いです。

もちろん、まだまだ学ぶべき部分は多いので、今後の記事で徐々に書いていこうと思います。

次回は「MQL5ウィザードでできること|MQL5の世界(2回目)」です。

 

今回の内容が難しく感じた方は、先に以下をご確認いただければと思います。

初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)

メタトレーダー(MT4/MT5)で自動売買するための事前準備(第1回)