『新メタトレ入門本』スクリプト:組み込み関数の使い方
『新MT4対応 FXメタトレーダープログラミング入門』(新メタトレ入門本)連動企画です。
今回は、本書の第2章「スクリプトのプログラミング」の「2-5 組み込み関数の使い方」についてです。
【目次】
第1章 メタトレーダーの紹介
第2章 スクリプトのプログラミング
2-1 新規ファイルの作成
2-2 文字列の表示(文字列定数)
2-3 チャート上のデータの表示(定義済み変数)
2-4 データの型と変数
2-5 組み込み関数の使い方
2-6 トレード関数の使い方
第3章 カスタム指標のプログラミング
第4章 エキスパートアドバイザー(EA)のプログラミング
本書アップデート情報
このセクションでは、MQL4の組み込み関数の書式の見方とプログラム中での書き方について説明しています。C言語と同じく、関数の引数、戻り値など用語の確認です。
本書の変更点は、組み込み関数の一覧の場所の説明です。
以前のビルドではメタエディターのヘルプメニューに「MQL4.community」がありましたが、現在のビルドでは削除されています。
なので、組み込み関数の一覧は、メタエディターのヘルプメニューの「MQL4 リファレンス」から参照する形になっています。
ただ、MQL4.communityが完全に消えてしまったわけではなく、MQL4 Referenceのウェブサイトから見ることができます。
関連するMT5情報
組み込み関数の一般的な書式の見方や使い方について、MQL4とMQL5とで大きな違いはありません。サンプルプログラムex7_scr.mq4も、拡張子を「mq5」に変えるだけでコンパイル・実行できます。
MQL4とMQL5とで大きな違いがあるのは組み込み関数の種類です。MQL4にしかない組み込み関数、MQL5にしかない組み込み関数があったり、同じ組み込み関数だとしても使い方が違ったりするところです。
詳しくは次の「トレード関数の使い方」で説明します。
ここでは、「2-3 チャート上のデータの表示(定義済み変数)」の定義済み変数の代わりになる組み込み関数を紹介します。
現在の売買価格(Bid, Ask)
MQL4のBidとAskをMQL5で取得する方法はいくつかあります。ここでは、ひとつの関数の戻り値として取得できる方法を紹介します。
利用する組み込み関数は「SymbolInfoDouble()」です。この関数は2つ引数を取ります。最初の引数にシンボル名(FXだと通貨ペア名)を指定し、2番目の引数に取得したいプロパティを指定し、戻り値として取得します。
最初の引数は、挿入するチャート上のシンボル名なので「_Symbol」を指定します。
2番目の引数は、Bidの値を取得したい場合、「SYMBOL_BID」を、Askを取得したい場合、「SYMBOL_ASK」を指定します。
サンプルプログラムex2_scr.mq4の「Bid」と「Ask」の部分をそれぞれ「SymbolInfoDouble(_Symbol,SYMBOL_BID)」「SymbolInfoDouble(_Symbol,SYMBOL_ASK)」に置き換えると、MT5で実行できるプログラムとなります。
四本値の配列(Open[], High[], Low[], Close[])
MQL4では、過去の4本値を配列の形で取得できますが、MQL5ではそのような定義済み配列がないため、組み込み関数を使うことになります。
Open[]、High[]、Low[]、Close[]に対応する関数は、それぞれ、iOpen()、iHigh()、iLow()、iClose()です。
これらの関数は3つの引数を取ります。最初の引数はシンボル名なので「_Symbol」を入れます。
2番目の引数はタイムフレームの指定です。チャート上のタイムフレームの場合「0」を入れます。
3番目の引数がチャート上のバーの位置です。最新のバーの位置を「0」とし、過去にさかのぼるに従い、「1」「2」「3」と大きくなる時系列配列の添え字と同じ働きをします。
したがって、最新のバーの4本値の場合、3番目の引数を「0」に、1本前のバーの4本値の場合、3番目の引数を「1」にします。
サンプルプログラムex3_scr.mq4で、Open[], High[], Low[], Close[]をそれぞれ、iOpen(), iHigh(), iLow(), iClose()に置き換えると、次のように書けます。
このように組み込み関数を使えば、MQL4の定義済み変数と同じデータを取得することができるわけです。
ただ、記述するコードが多くなり、コードが読みにくくなるという欠点があります。MQL5でもMQL4と同じ定義済み変数を利用したい場合、以下のkindle本の「共通ライブラリ」をご検討ください。