MT4/MT5独自の処理を理解する|MQL入門(8回目)

2018年11月11日

0と1が書かれたボードを見つめる人

今回はMQL独自の処理について学びます。

これまでの内容を理解していれば難しい内容ではないので、気軽に見ていただければと思います。

第7回目までを確認いただいている前提で進めますので、まだ見ていない方は先にご確認いただければと思います。

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

MT4/MT5のコメントと変数について|MQL入門(2回目)

MT4/MT5で数値の計算をしてみる|MQL入門(3回目)

条件分岐をマスターする|MQL入門(4回目)

ループ処理をマスターする|MQL入門(5回目)

配列を使いこなす|MQL入門(6回目)

組み込み関数と自作関数を理解する|MQL入門(7回目)

イベントごとに呼ばれる特殊関数

MT4/MT5にはイベントごとに呼び出される特殊関数があります。

前回学んだ、引数を渡して戻り値を得るタイプとは少し異なります。

ここまで説明してきませんでしたが、今まで勉強に使ってきたプログラムは、全てint OnInit() {}の中に書いてきました。

OnInitのように特定のイベント発生時(チャート適用時のみなど)に動く関数をご紹介します。

 

各イベント関数の説明

いつものようにプログラムを書いて実行しますが、その前に簡単な説明をします。

OnInit()

プログラム実行時に一度だけ呼び出される関数です。

主に以下2パターンで呼び出されます。

  • プログラムをチャートにドラッグ&ドロップしたタイミング
  • チャートにプログラムを適用した状態でコンパイル

 

OnDeinit()

プログラムをチャートから削除したタイミングで一度だけ呼び出される関数です。

 

OnTick()

価格が更新されるたび度に呼び出される関数です。

例えばFXのマーケットは土日が休みですが、その場合は価格が更新されないので呼び出されることはありません。

 

OnTimer()

一定時間経過ごとに呼び出される関数です。

 

OnTester()

バックテストや最適化を行う場合に呼び出される関数です。

 

プログラムの準備

新しいプログラムを作成しますが、以下にチェックを入れた状態で作成してください。

OnTimerとOnChartEvent

OnTester

 

プログラムの実行

呼び出されたことが分かるように、各関数の中でprintfしておきます。

 

OnInit()確認

いつものようにプログラムをチャートに適用してください。

適用したタイミングで以下のメッセージが出力され、OnInit()が呼び出されたことが分かります。

OnInitの確認

 

OnChartEvent()確認

チャート上の適当なところをクリックしてください。

OnChartEvent()が呼び出されたことが分かります。

OnChartEventの確認

もう一度クリックすればまた呼び出されます。

 

OnTimer()確認

60秒経過する度にOnTimer()が呼び出されていることが分かります。

OnTimerの確認

プログラムを確認すると分かるのですが、OnInit()の中の「EventSetTimer(60);」と書かれてる部分で60秒ごとのタイマーを表現しています。

 

OnDeinit()確認

チャートからプログラムを削除してみましょう。

チャート上の適当なところで右クリックして、プログラムを削除してください。

OnDeinitの確認

今度はOnDeinit()が呼び出されたことが確認できました。

Deinitの出力結果

 

OnTick()の確認

本記事の執筆が日曜日で、FXの価格が動いていなかったので仮想通貨(ビットコイン円)で同じプログラムを動かしました。

1秒間に数回程度と、かなりの高頻度で動いているのが分かるかと思います。

OnTick確認

 

OnTester()確認

OnTester()はMT4/MT5に付属しているストラテジーテスターで、バックテストや最適化を行った場合に呼び出されます。

バックテストを実行しますが、ストラテジーテスターが表示されていない方は、「表示->ストラテジーテスター」で表示してください。

表示したら、作成したプログラムを選択して、「スタート」をクリックします。

ストラテジーテスターの実行

ストラテジーテスターの「操作履歴」タブを確認すると以下のようにOnTester()が呼び出されていることが分かります。

※「操作履歴」タブは、ターミナルとテスターの2か所に存在していますが、表示されるのはテスター側の「操作履歴」になりますので、注意してください。

バックテスト結果

 

 

メインで使うものは限られている

種類が多くてよくわからなくなったとは思いますが、実戦で使うものは限られています。

私の場合は、通常の自動売買プログラムを作成するときはOnTick()しか使いません。

ただ、こういった機能も存在すると理解だけしておけば、新しいことをやりたいと思った時に「出来るか?出来ないか?」を即判断できます。

 

外部からの値を取り込む

プログラムの実行

外部の値を使うことで、プログラムを変更することなく動きを変えることができます。

新しく出てきた、「input xxxxx」が外部から読み込むための記述方法です。

実行してみると、プログラムに書いた通りの値が表示されました。

外部の値を取り込んだ結果

 

次に外部から値を変更します。

チャート上の適当なところで右クリックして、「エキスパートアドバイザ -> 設定」と進みます。

エキスパートアドバイザの設定

 

「パラーメタ入力」タブを選択すると、プログラムに書いた値が表示されています。

パラメタ入力

 

値を変更して、「OK」をクリックします。

ma_period・・・30 → 100

rsi_period・・・14 → 5

パラメタ値の設定

 

結果、外部から入力した値が表示されました。

出力結果確認

 

実戦ではどのように使われるか

テクニカル指標の期間やモードなどは外部から変更可能にするのが一般的です。

私の自作EAも、テクニカルの期間は殆ど外部から変更可能なinputを使っています。

 

その他の独自機能

MT4/MT5にはトレードに役立つ便利な独自機能が沢山用意されています。

4本値

[MT4の場合]

一度説明しましたが、MT4が4本値を独自に準備して配列に入れているのでそのまま利用可能です。

  • 始値・・・Open[n]
  • 終値・・・Close[n]
  • 高値・・・High[n]
  • 安値・・・Low[n]

3本前のローソク足の高値は、High[3]と書くだけで取得できます。

 

[MT5の場合]

MqlRates prices[];
ArraySetAsSeries(prices, true);
int numDatas =CopyRates(_Symbol, 0, 0, n, prices);

  • 始値・・・prices[n].open
  • 終値・・・prices[n].close
  • 高値・・・prices[n].high
  • 安値・・・prices[n].low

MT4では直感的にアクセスできるのに対して、MT5はやや面倒です。

面倒と感じる場合は共通ライブラリを利用することで、MT4と同じ書き方で取得可能です。

共通ライブラリについては後述します。

 

スプレッド

現在のスプレッドが知りたい場合は、以下のように書くことで取得可能です。

 

[MT4の場合]

(intMarketInfo(“EURUSD”MODE_SPREAD);

 

[MT5の場合]

double ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
double bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double spread = ask – bid;

int spread_points = (int)MathRound(spread / SymbolInfoDouble(Symbol(), SYMBOL_POINT));

 

余剰証拠金

余剰証拠金も取得可能です。

 

[MT4の場合]

AccountFreeMargin()

 

[MT5の場合]

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

 

殆どの機能は既に用意されている

ユーザーが必要とする機能は殆ど準備されています。

多過ぎて全てを説明することはできませんが、必要になったタイミングでネット検索して利用していけば良いと思います。

 

MQL関連でおすすめのサイトや書籍

Toyolab FX

豊嶋久道先生が運営しているサイトで、MT4とMT5両方の情報を得ることができます。

さらにMT4とMT5の共通ライブラリを作成されています。

ランダムウォークの記事なども、とても興味深いです。

 

同じく豊嶋先生の執筆している書籍はMQLユーザーにとっては必読です。

※電子書籍版と通常書籍版がありますので、購入時はご注意ください。

私のお勧めの使い方は、書籍で基本的な部分を学びタイムリーな情報をサイトから得る方法です。
 
 
 

MQL4 Reference

英語ですが参考になるサイトです。

ただし、世界的にはMT5を利用してく流れがあり、基本的にはMT5推しです。

MT5しかダウンロードできませんし、MT5のみ日本語対応されています。

それでもMT4部分で役に立つ情報がとても多いです。

 

MQL5 リファレンス

MQL5は日本語サポートされているので、日本語でサイトの確認が可能です。

情報交換が活発に行われており、とても参考になるサイトの1つです。

 

まとめ

ここまでくれば、ネットや書籍を見ながら自力で自動売買プログラムを作成することができます。

次回はテクニカル指標をマスターする|MQL入門(9回目)です。

 

一部重複する部分はありますが、自動売買入門編である「メタトレーダー(MT4)で自動売買するための事前準備(第1回)」も並行して進めてみてください。

今回の記事のまとめ

  • MT4/MT5にはイベントごとに呼ばれる特殊関数がある
  • 外部から値を変更することができる
  • 特殊機能の概要だけ理解して、トレードの幅を広げる

 

自動売買入門のまとめは以下をご参照ください