MQL4→MQL5 総合まとめ何が変わるのかを、テーマ別に1枚で見渡す
個別の関数ページにはそれぞれ「MQL4→MQL5の違い」を載せているが、数が多く探しにくい。ここではテーマ別に束ねて、まず全体像をつかめるようにした。実際に変換作業で手が止まった具体例は差分ノートに別途まとめている。
1四本値・履歴データの読み方
MQL4はiOpen・iHigh・iClose等で1本ずつ値を読む。MQL5はCopyOpen・CopyHigh・CopyRates等で、指定した本数を配列にまとめてコピーしてから使う設計になる。
2組み込み指標の呼び出し方
MQL4のiMA・iRSI等は呼ぶたびに値を直接返す。MQL5では先にハンドルを取得し(iMAはMQL5でも存在するが戻り値がハンドルになる)、CopyBufferで実際の値を配列として読み出す、2段階の設計になる。自作インジケーターを呼ぶiCustomも同じ考え方。
3発注・決済・ポジション管理
MQL4はOrderSendに引数を並べて渡し、保有中・決済済みを問わずOrderSelect1本で注文情報を読む。MQL5は発注がMqlTradeRequest構造体に一新され、さらに「保有中のポジション(PositionGetTicket等)」と「過去の約定履歴(HistoryDealGetTicket等)」が別の仕組みに分かれる。
4口座・端末・銘柄の情報の読み方
MQL4は項目ごとに別の関数(AccountBalance・TerminalCompany・MarketInfo)を呼ぶ。MQL5はどれも「型ごとに1関数+項目定数」という共通の形に統一される(AccountInfoDouble・TerminalInfoString・SymbolInfoDouble等)。
5時間足・注文種別などの型
MQL4は時間足(PERIOD_H1等)も注文種別(OP_BUY等)もただのint定数。MQL5ではそれぞれ専用の列挙型(ENUM_TIMEFRAMES・ENUM_ORDER_TYPE)になり、int変数への代入等に型変換が必要になる。
6定義済み変数
MQL4のBid・Ask・Digits・Point・Symbol()・Period()は、MQL5ではSymbolInfoDouble系の関数呼び出しや_Digits・_Point・_Symbol・_Periodという定義済み変数に置き換わる。
7イベントハンドラの違い
呼ばれるタイミング自体はMQL4・MQL5でほぼ共通だが、OnCalculateの戻り値の意味(計算済み本数)や、配列の並び順(添字0が最古)など、細部の挙動に違いがある。
8エラーの受け取り方
実行時エラー(4000番台等)の番号体系はMQL4・MQL5でほぼ共通。ただし実際の取引結果(発注が通ったか等)だけは全く別の番号体系になり、MQL4のGetLastError()が返す130番台の代わりに、MQL5ではMqlTradeResult.retcodeがTRADE_RETCODE_*(10004等)を返す。
9チャート上のインジケーター表示
MQL4はiCustomで自作インジケーターを呼ぶと自動的にチャートへ表示される。MQL5では表示するかどうかをChartIndicatorAdd・ChartIndicatorDeleteで明示的に制御する(MQL4には無い機能)。
今日はどこを見ればいいか。
ドル円とユーロドルの主要ライン・予想高値安値を、平日の朝に図1枚にまとめています。
朝刊を見る→