MQL5とMQL4との違い

MQL4ユーザ向けに、MQL5の気になる仕様をメモしておきます。

イベント処理

MQL4では、 init(), start(), deinit() の3つで全て処理されてきましたが、MQL5からは、indicator,EA,Scriptで対応するイベント処理関数が変わります。

イベント indicator EA Script
初期化(Init) OnInit OnInit -
終了(Deinit) OnDeinit OnDeinit -
実行(Start) OnStart
価格更新(Calculate) OnCalculate
Tickæ›´æ–°(NewTick) OnTick
タイマー(Timer) OnTimer
売買成立(Trade) OnTrade
板更新(BookEvent) OnBookEvent
チャートイベント(ChartEvent) OnChartEvent

・Scriptには、OnInit, OnDeinit がありません。
・indicator は、start() の代わりにOnCalculate が呼ばれます。
・EA は、start() の代わりにOnTick が呼ばれます。
・EA には、その他のイベントもてんこ盛り。
・チャートイベントは、キーダウン、クリック、ドラッグ、オブジェクト設定終了、カスタムイベント等。
・indicator からは、オブジェクト操作関数(ObjectCreate 他)、チャート操作関数(ChartOpen 他)は呼べない。


え?・・・ええええ?????
indicator からオブジェクトが作れないってどうするの?@@という感じです。
scriptでどうにかして...ということらしい。。



定義済み変数

定義済み変数は、_(アンダーバー)から始まります。MQL4では関数だったものが変数でも得られます。

MQL4 MQL5
Digits _Digits
Point _Point
Bars Bars()
GetLastError() _LastError
Period() _Period
Symbos() _Symbol
_StopFlag
_UninitReason

・Open[ ], High[ ], Low[ ], Close[ ], Volume[ ] , Time[ ]は廃止。
・自前で配列を用意⇒CopyOpen() で配列にコピー⇒その配列をOpen[ ]の代わりに使います。
・CopyOpen() 以外には、CopyRates, CopyHigh, CopyLow, CopyClose, CopyTickVolume, CopyReadVolume, CopySpread等があります。


その他

・インジケータのバッファ数は8から無制限に増えました。
・インジケータの描画タイプは6種類から18種類に増えました。
・インジケータのバッファにはdouble型以外のデータも入れられます。
・DLL のロードは、EAのロード直後に行われます。(従来は、関数呼出し時でした。)
・計算優先順位はC++ 準拠です。
・暗黙の型キャストに注意です。
・ローカル変数は、自動的に初期化されません。(従来は、自動でゼロが入っていました)
・ローカル配列は、自動的に破棄されます。(従来は、値が残っていました。)
・ボリュームは、Tickボリュームとリアルボリュームに区別されました。
・スプレッドは、ヒストリカルデータとして記録されます。
・列挙型、構造体、クラスが使えます。
・変数の型は、大幅に増えました。
・従来1つの関数名だったものが、データの型によって3つの関数名に分かれました。
  例えばObjectSet ⇒ ObjectSetString, ObjectSetInteger, ObjectSetDouble 
・チャート自体を操作する関数が用意されました。



とりあえず、このくらいかな・・・。