ずっと心の奥底で温め続けていた「メタトレーダーをやりたい」という願い。ドラゴンボールはまだ一つも集まっていませんが、願いが叶いました。
第一弾の記事を書かせていただきます!
MQL5ウィザードなるものを使って初めての自動売買プログラムの作成を行います。
せっかく意気込んでメタトレーダー5の環境を構築し、プログラム作成を始めようとしたのにとっかかりがなく溺れそうになっているあなたに1本のわらを差し出します。
困っていた私がネットの海を溺れながら見つけた「サルでも解るMQL5 ウィザード」というTHE初心者向け!的な記事の内容をさらに簡略化しています。そして、サルごときでは気にならないだろうが人間が気になった点を大量に加筆して記事にしています。
この記事が、あなたのメタトレーダー5の最初の一歩として役立てることを願っております。
メタトレーダーとは
初回の記事ということで簡単にメタトレーダーにも触れておきます。
メタトレーダーとは、ロシアのメタクオーツ(MetaQuotes Software)社が提供している取引プラットフォームです。カスタマイズ性が高く、なんでもござれのプラットフォームで世界中で愛用者も多く、チャートに独自のインジケーターを表示させたりすることもできます。そして、EA(エキスパート・アドバイザ、Expert Advisor)と呼ばれる自動売買プログラムを使用して、システムトレードを実現できるのが大きな特徴となっています。
最新のバージョンはメタトレーダー5なのですが、前のバージョンの4との互換性がない部分があり、実際に使われいるのは圧倒的にメタトレーダー4です。しかし、私はメタトレーダー5に集中することに決めました。
本記事も含め、私の記事はメタトレーダー5に特化してお送りします。
メタトレーダー5を使ってFXとCFDに投資ができます。
(国内業者を利用しています)
ウィザードを使ったプログラム作成
EAのプログラムはMQL(MetaQuotes Language)という独自の言語で記述します。そして、MQLでプログラムを作成するためにメタエディター(MetaEditor)というソフトが用意されています。
メタエディターにはMQLウィザードが組み込まれており、ウィザードを利用することでプログラミングをすることなく簡単に自動売買のプログラムを作成できるようになっています。
自分でプログラムを書きたいと思っている私ですが、とっかかりとしてまずはこのウィザードを使ってプログラムを作成することにしました。
ソースコードの作成
MQL5ウィザードでポチポチとマウスで選んでいくだけでプログラムの元となるソースコードが作成できます。
ステップ1
メニューからツールを選択 → MetaQuotes 言語エディターをクリック
➡メタエディターが開きます。
ステップ2
ツールバーの新規作成をクリック
➡MQLウィザードが表示されます。
ステップ3
エキスパートアドバイザ(自動生成)を選択 → 次へをクリック
ステップ4
名前を入力 → 次へをクリック
下記の画像では「Original\test1」を入力しています。(Originalフォルダの中にtest1という名前のファイルを作成します)
ステップ5
追加をクリック
ステップ6
[名前]でSignals of indicator ‘Moving Average’を選択 → OKをクリック
売買のためのシグナルを選択します。今回は知名度が抜群である移動平均線を使います。
ステップ7
次へをクリック → 次へをクリック → 完了をクリック
色々パラメータがありますが、変更せずに完了まで突っ走ります。
➡ウィザードが終了し、test1.mq5というファイルが作成されます。
コンパイルとテスト
完成したソースコードに対して以下を行い、ちゃんと動作するかどうかの検証を行います。
- メタトレーダー上で動くようにソースコードを変換する(コンパイル)
- 完成したEAをテストで動かす
コンパイルの実行
ソースコードが完成したら毎回行う作業がコンパイルになります。コンパイルをすることによって、人間が分かりやすい言葉で書かれていたものがメタトレーダーが理解できる言葉に変換されます。
コンパイルの仕方
メタエディターにてコンパイルをクリック
➡コンパイルが終わると下部にあるツールボックスに結果が表示されます。
0 errorsとなっていればOKです。
テストの実施
ここまででプログラム完成です。ものの数分ではないでしょうか?ちなみに記事の作成にはめちゃめちゃ時間がかかっています。
すべての準備が整い、いつでも自動売買をできるようになりました。しかし、すぐに戦場に飛び込んでも返り討ちにあうのが落ちです。また、コンパイルでエラーがなくても売買がまったく行われないこともあります。
そこでメタトレーダーに搭載されている過去のデータを使ってバックテストをする機能を利用し、問題なく自動売買が行われるかのテストを行います。
ステップ1
メタトレーダーのナビゲータでエキスパートアドバイザ(EA)のプラスをクリック → Originalのプラスをクリック → test1の上で右クリック
ステップ2
テストをクリック
➡ストラテジーテスターにプログラムがセットされます。
ステップ3
ストラテジーテスターの[オプティマイズ]が無効化となっていることを確認
「オプティマイズ = 最適化」です。パラメータを変えながらテストをするのが醍醐味ですが、今回は簡素化のために無効にします。
ステップ4
ストラテジーテスターの右下にあるスタートをクリック
➡テストが動き出し、しばらくするとテスト結果が表示されます。
テスト結果の見方
テストが終わると売買サインが入ったチャートが別ウィンドウで表示されます。また、ストラテジーテスターにバックテストタブ、グラフタブが追加されます。
何も売買されてない場合は、次の項目「テスト結果がおかしいときは」を見ればヒントが見つかるかもしれません。
■チャート
買いと売りのポイントが矢印で表示されます。マウスオーバーをすると取引価格なども確認できます。
■ストラテジーテスター バックテストタブ
総損失、総利益、取引数、勝ちトレード数、負けトレード数などの詳細なデータが確認できます。
■ストラテジーテスター グラフタブ
グラフ化された資金の推移が確認できます。
右肩下がりからの、ノーマネーでフィニッシュです。
テスト結果がおかしいときは
テストをしてもまったく売買が行われないことがあります。実際私も最初にテストしたときはまったく売買が行われませんでした。
そんな時はストラテジーテスターの操作ログタブを確認します。
例えば下記の例では「Invalid stops」というエラーが出ており、Stop loss(損切り)に設定している値に問題があることがわかります。
パラメータタブにて、利益確定と損切りの値を変更して再度テストを行うとちゃんと売買が行われるようになりました。
取引決定のメカニズム
さて、一通りテストまでが終わったところでウィザードを利用してプログラムを作成した場合の取引するかどうかを決定するメカニズムについて勉強します。
取引は足が新しく作られたタイミングで以下の要素を組み合わせて決定されます。
- シグナルの強度(-100~100)
- 重みづけ(0~1)
- オープン/クローズしきい値(0~100)
1と2は組み込んでいる指標の数だけ存在します。3はEAに対して1つずつしきい値を設定します。
「各指標のシグナルの強度に重みづけしたものの平均」と「しきい値」を比較することで取引の判断を行っています。
例として、2つの指標を組み込んでいるプログラムのポジションオープンの取引判断を考えてみます。
1つ前の足に対して下図のような計算が行われます。
今回は「EAのスコアがマイナス」「オープンしきい値より大きい」という条件が揃ったため、売りのポジションをオープンするという結果になりました。
シグナルのパターンと強度
指標には20種類あり、それぞれにシグナルとそのシグナルに割り当てられた強度が決められています。
ここでは移動平均を例にとって内容を見ていきます。
移動平均の買いシグナルについてまとめたものが以下の表です。売りシグナルは買いシグナルの逆になります。
パターン | シグナルの種類 | 説明 | 強度(初期値) |
---|---|---|---|
0 | 買いに異議なし | 価格(足)がすべて指標より上にある。 | 80 |
1 | 買いシグナル | 価格(足)が下向きに指標を交差(分析されているバーの始値が指標を上回り、終値が指標を下回る)し、指標が上昇する。 (弱いシグナル) | 10 |
2 | 買いシグナル | 移動平均交差。 価格(足)が上向きに指標を交差(分析されているバーの始値が指標を下回り、終値が指標を上回る)し、指標が上昇する。 (強いシグナル) | 60 |
3 | 買いシグナル | 足の下ヒゲが指標と交差(分析されている足の始値と終値が指標を上回り、安値が指標を下回る)し、指標が上昇する。 (弱いシグナル) | 60 |
初期値として設定されている強度は、適切な数値が入っているようには見えないためプログラム毎で調整する必要があると思われます。
- 「異議なし」シグナルの強度が80もある
他の指標のシグナルと掛け合わさるときにこの指標の影響をなくすように作られたものと予想しますが、強度が大きすぎます。
他の指標のシグナルが逆で点灯していても打ち消すぐらいの影響力を持ってしまっています。
影響をなくすのなら理論的にはしきい値と同じ値にすべきでは? - 売買シグナルの数値が弱すぎる
「異議なし」シグナル以外のシグナルでは強度が小さいです。他の指標のシグナルと掛け合わされたときにも有効に働くような数値が必要です。
上記の表に記載した情報は1カ所でまとめて確認することができません。これから自分でプログラムを作ろうとする際には元になっている情報を取ってくる必要が出てきますので、説明をします。
シグナルのパターンの確認方法
シグナルのパターンはメタエディターのヘルプから確認することができます。
ステップ1
メニューからヘルプを選択 → MQL5 リファレンスをクリック
➡MQL5 リファレンスが開きます。
ステップ2
目次をクリック → 標準ライブラリのプラスをクリック → ストラテジーモジュールのプラスをクリック → 売買シグナルのモジュールのプラスをクリック
➡20種類の指標が表示されます。
例えば移動平均をクリックすると以下のようなシグナルと説明が書かれたページが表示されます。
※このページではシグナルに割り当てられた強度は確認できません
シグナルの強度の確認方法
色々なところでメカニズムの説明は書いてありますが、シグナルの強度の数字がどこを見れば確認できるのかを書いてあるページは見つかりませんでした。
シグナルのパターンは分かっても肝心の強度が分からないため難儀をしていました。しかし、メタエディターにてソースコードを探っていくことによりついにその場所を発見できました。
ステップ1
作成したプログラムのソース内から知りたい指標のインクルードファイル名を探す
今回の場合は「Expert\Signal\SignalMA.mqh」が移動平均用のインクルードファイルです。
ステップ2
ナビゲータでIncludeのプラスをクリック → Expertのプラスをクリック → Signalのプラスをクリック → Signal.mqhをクリック
➡Signal.mqhが開きます。
ステップ3
Signal.mqh内でパターンと割り当てられた強度を解析
ソースファイル内にすべての情報は書かれています。例えば「m_pattern_0」でソース内を検索すれば、m_pattern_0に80の強度が割り当てられていることがわかります。
ただし、ソースコードに書かれているパターンとライブラリのどのパターンが合致するものなのかは分かりませんので以下の情報から自分で解析する必要があります。
- ソースコード内のコメント
- ソースコード内のパターンが適用される条件
- シグナルの強度を変更して得られるテスト結果
シグナルの強度を調整したテスト
先ほどのテスト結果を再度見てみるとポジションがクローズした次の足でポジションがオープンしていることが分かります。
これは「異議なし」シグナルが指標と足が接触していない箇所においてもシグナルが点灯することの影響です。そこで「異議なし」シグナルの強度を0にして再度テストを回してみます。
シグナルの強度変更方法(呼び出しプログラム側から)
ステップ1
先ほど作成したtest1.mq5にて「signal.AddFilter(filter0)」を検索
➡ソースコード内の移動平均の指標を組み込んでいる部分が見つかります
ステップ2
[Set filter parameters]部分に「filter0.Pattern_0(0);」を追記
追記をすることで移動平均のシグナルパターン0に対する強度が0になります。
結果発表
変更を加えたソースコードをコンパイルし、同じ条件でテストを回してみます。
得られた結果を確認すると移動平均線とバーに接触がある箇所の次の足のみでポジションがオープンされるようになっていることが分かります。めでたしめでたし。
なお、ノーマネーでフィニッシュするのは変わりません。
ノーマネーになる最後は変わらない…
その他参考サイト
あとがき
私がメタトレーダーの勉強を始めて感じたことは「コミュニティに色々情報が載ってはいるがどれから始めればいいのか分からない」「MT4との比較があるがそもそもMT4を知らない」でした。
メタトレーダー4に比べてメタトレーダー5の情報はまだまだ少ないのが現状です。メタトレーダー5から始めたい!という酔狂な方たちに向けて役立つ情報発信ができるように精進していきます。
コメント