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 
・チャート自体を操作する関数が用意されました。



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