MQL5 は、その前身であり多数の指標、スクリプト、及びエキスパートアドバイザーを提供したMQL4 プログラミング言語が進化したものです 。この新しいプログラミング言語は、前世代の言語と最大限の互換性を保つものでありますが、これらの言語の間にはいくつかの違いが存在します。プログラムを移行する際には、これらの違いに注意する必要があります。
このセクションは、MQL4になじみのあるプログラマの MQL5 言語へのコード適応の簡易化を意図した情報が含まれています。
初めに留意点がいくつかあります。
MQL4 言語では、(*.mqh インクルードファイルとライブラリファイルを除いて)指標、スクリプトまたはエキスパートアドバイザーで使用出来る 3 つの事前定義された関数が含まれていました。MQL5 では、これらの関数の代わりに類似した関数が存在します。下記の表は関数のおおよその対応を示しています。
MQL4 |
MQL5 |
|---|---|
init |
OnInit |
start |
OnStart |
deinit |
OnDeinit |
OnInit 及び OnDeinit 関数は MQL4 の init 及び deinit と同じ役割を果たします。 これらは、MQL5 プログラムの初期化と初期化解除中に実行されるコードを見つけるために設計されています。MQL4 関数の名称を変更する、または、名称を変更せずに対応した場所でMQL5 関数の呼び出しをする選択肢があります。
例:
void OnInit()
|
start 関数はスクリプトでのみ OnStart で置き換えられます。エキスパートアドバイザーならびに指標ではそれぞれOnTick 及び OnCalculate が使用されるべきです。MQL5 プログラム動作中に実行されるコードはこれらの 3 つの関数内に置かれるべきです。
MQL5 プログラム |
メインファンクション |
|---|---|
OnStart |
|
OnCalculate |
|
OnTick |
指標またはスクリプトコードにメインファンクションが含まれていない場合、もしくは関数名が必要なものと異なる場合、この関数の呼び出しは実行されません。つまり、スクリプトのソースコードが OnStart を含まない場合には、そのようなコードはエキスパートアドバイザーとしてコンパイルされます。
コードが OnCalculate 関数を含まない指標のコンパイルは不可能です。
MQL5 には Ask、Bid、Bars といった事前定義された変数はありません。Point 及び Digits 変数はわずかに異なるスペルを持っています。
MQL4 |
MQL5 |
|---|---|
Digits |
_Digits |
Point |
_Point |
|
_LastError |
|
_Period |
|
_Symbol |
|
_StopFlag |
|
_UninitReason |
MQL5 では Open[]、High[]、Low[]、Close[]、Volume[] 及び Time[] の定義済み時系列は存在しません。時系列の必要な深さは、対応する時系列アクセス関数を使用して設定出来ます。
MQL4 と異なって、MQL5 の エキスパートアドバイザーは新しいティックの受信 イベント を処理する関数である OnTick を必要としません。(MQL4 iのstart 関数は新しいティックが受信された際に実行されます。)MQL5 では、エキスパートアドバイザーは複数の種類のイベントの事前定義されたハンドラ関数を含むことが出来ます。
MQL4 では、指標バッファの数は制限されていて 8 を超えられません。MQL5 にはこのような制限はありませんが、それぞれの指標バッファが端末で存在するためにメモリの特定の部分の割り当てを必要とするので、この新しい権限は悪用されるべきではありません。
MQL4 で提供されたカスタム指標プロットは 6 種類のみでしたが、MQL5 では 18 の描画スタイルが提供されています。描画の種類の名称は変更されていませんが、指標のグラフィク表現のイデオロギーが大幅に変更されました。
指標バッファの索引付けの方向も異なります。デフォルトでは、MQL5 の全ての指標バッファが通常の配列のように振る舞います。すなわち、0 インデックスが付けられた要素は履歴中で最も古いものであり、インデックスの増加に伴い、最も古いデータから最新のデータへの移動がなされます。
MQL4 から保存された唯一のカスタム指標 関数は SetIndexBufferです。しかしその呼び出しが変更されました。MQL5 では、指標バッファとリンクされた配列に格納されるデータ型を指定する必要があります。
カスタム指標のプロパティも変化し、拡大しています。時系列アクセスに使用される関数も加わったため、計算アルゴリズムを全体として考え直す必要があります。
MQL5 におけるグラフィックオブジェクトの数は大幅に増加しています。その上、グラフィックオブジェクトは、任意の時間軸のチャートで秒単位の精度をもって配置することが出来ます。オブジェクトアンカーポイントは現在の価格チャートにおいてバーの開始時刻に丸められていません。
矢印、テキスト及びラベルオブジェクトでは結合メソッドを、そして、ラベル、ボタン、チャート、ビットマップラベル及び編集オブジェクトではオブジェクトが接続されるチャートのコーナーを指定することが出来ます。