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
・チャート自体を操作する関数が用意されました。
とりあえず、このくらいかな・・・。