MQL4のEA・インジケーターをMQL5へ移行しようとすると、
同じ名前の関数が無くなっていたり、
引数の渡し方が構造体ベースに変わっていたりして、
どこから手をつければよいか分からなくなります。
この記事では、このサイトの既刊MQL5記事群を1枚のチェックリストとしてまとめ、
関数単位の対応表と、
移行時に特に事故が起きやすいポイントを整理します。
・MQL4の主要関数とMQL5版の対応表(25項目)
・発注・ポジション管理の移行で特に変わる点
・テクニカル指標がハンドル方式に変わる理由
・MQL5にしかない独自機能
なぜこの移行チェックリストが必要なのか
まず、この記事を作った理由を確認します。
MQL4とMQL5は「別の言語」に近い
既刊mql4-mql5.mdで解説した通り、
MQL4とMQL5は文法こそ似ていますが、
発注やテクニカル指標の取得方法は大きく異なります。
このサイトのMQL5記事はすでに30項目を超えている
・MQL5未記事化関数のカバレッジ調査(mql-coverage-gap.md)に沿う
・CopyBuffer・PositionSelect等を1日1本ずつ記事化してきた
・個別記事では把握しづらい全体像を、本記事で1枚の表に集約する
この記事はハブ記事として機能する
個々の関数の詳しい使い方・コード例は既刊の個別記事に任せ、
この記事では「MQL4のどの関数が、MQL5では何に変わるか」の一覧だけを示します。
主要関数の対応表(カテゴリ別)
実際の対応関係をカテゴリごとの表で確認します。
発注・ポジション管理
| MQL4 | MQL5での対応 | 既刊記事 |
|---|---|---|
| OrderSend | OrderSend(MqlTradeRequest構造体) | ordersend-mql5 |
| OrderSelect | PositionGetDouble/PositionGetInteger/PositionSelect | position-select |
| OrdersTotal | PositionsTotal(意味が異なるので混同注意) | orderstotal-mql5 |
| (簡易発注用の自作関数) | CTradeクラス(標準ライブラリ) | ctrade-mql5 |
| (勝率計算の自作集計) | HistorySelect/HistoryDealGetDouble | history-select-mql5 |
| (約定履歴の詳細取得) | HistoryOrderGetDouble系 | history-order-get-double-mql5 |
| AccountFreeMarginCheck | OrderCalcMargin/OrderCalcProfit | ordercalc-margin-profit-mql5 |
テクニカル指標・時系列データ
| MQL4 | MQL5での対応 | 既刊記事 |
|---|---|---|
| iMA/iRSI/iBands等の値取得 | ハンドル作成+CopyBuffer | copybuffer / irsi-mql5 |
| iATR/iADX/iIchimoku | ハンドル作成+CopyBuffer(考え方は同じ) | iatr-mql5 |
| iCustom | iCustom(戻り値がハンドルに変更) | icustom-mql5 |
| Close[]/High[]/Low[]等の配列 | CopyRates/CopyClose/CopyHigh等 | copyrates-mql5 |
市場情報・オブジェクト・チャート操作
| MQL4 | MQL5での対応 | 既刊記事 |
|---|---|---|
| MarketInfo | SymbolInfoDouble/Integer/String | symbolinfodouble-integer-string-mql5 |
| Bid/Ask変数 | SymbolInfoTick | symbolinfotick-mql5 |
| ObjectCreate(引数構成が一部異なる) | ObjectCreate(MQL5版) | object-create-mql5 |
| (チャートへのインジケーター追加) | ChartIndicatorAdd | chartindicatoradd-mql5 |
| (板情報、MQL4に存在しない) | MarketBookGet/OnBookEvent | marketbookget-mql5 |
配列・共通処理・環境情報
| MQL4 | MQL5での対応 | 既刊記事 |
|---|---|---|
| (配列の挿入・削除は自作が必要) | ArrayPrint/ArrayInsert/ArrayRemove | array-print-insert-remove-mql5 |
| Comment/Alert/Print | Comment/Alert/Print(ほぼ同じ、差分あり) | comment-alert-print-mql5 |
| GlobalVariableSet/Get | GlobalVariableSet系(MQL5) | globalvariable-mql5 |
| (デバッグ時の型名表示は自作) | EnumToString(MQL5拡張) | enumtostring-mql5 |
| IsTradeAllowed | MQLInfoInteger(3層チェックに変化) | mqlinfointeger-mql5 |
| (取引イベントの詳細フックは無い) | OnTradeTransaction | ontradetransaction-mql5 |
| (ハンドル生成・解放の概念自体が無い) | IndicatorCreate/IndicatorRelease | indicatorcreate-indicatorrelease-mql5 |
MQL5独自機能(MQL4に存在しない)
| 機能 | 内容 | 既刊記事 |
|---|---|---|
| DatabaseOpen系 | SQLiteデータベースが標準で使える | database-open-sqlite-mql5 |
| SocketConnect系 | 生のTCP通信(WebRequestはHTTP専用) | socketconnect-mql5 |
| CalendarValueById系 | 経済指標カレンダーの自動取得 | calendarvalue-economic-filter-mql5 |
| OnTester/OnTesterPass | 最適化結果へのフック | ontester-ontesterpass-mql5 |
| FileOpen系(MQL5版) | 構造体への直接読み書き対応 | fileopen-filewrite-mql5 |
発注・ポジション管理の移行で特に注意すること
最も事故が起きやすい領域を詳しく確認します。
OrderSendが構造体ベースに変わる
MQL4の`OrderSend()`は引数を順番に並べる方式でしたが、
MQL5の`OrderSend()`は`MqlTradeRequest`構造体に、
項目を設定して渡す方式に変わります。
OrdersTotalとPositionsTotalは意味が違う
・既刊orderstotal-mql5.mdで指摘した通り
・MQL4のOrdersTotal()とMQL5のPositionsTotal()は別物
・同じ名前のつもりで移植すると集計が狂う落とし穴になる
最初の一歩としてCTradeクラスを使う
既刊ctrade-mql5.mdで紹介した標準ライブラリの、
`CTrade`クラスを使うと、
`MqlTradeRequest`を直接組み立てるより簡潔に発注できます。
テクニカル指標の移行で特に注意すること
ハンドル方式という、MQL5最大の変化を確認します。
「値を直接返す」から「ハンドル+CopyBuffer」へ
MQL4の`iMA()`等は呼び出すたびに1つの値を返しましたが、
MQL5では`OnInit()`でハンドルを作成し、
`OnCalculate()`や`OnTick()`で、
`CopyBuffer()`を使って値を取り出します。
ハンドルの解放を忘れない
既刊indicatorcreate-indicatorrelease-mql5.md
の通り、
作成したハンドルは`IndicatorRelease()`で解放しないと、
リソースが残り続けます。
iCustomも戻り値がハンドルになる
既刊icustom-mql5.mdの通り、
MQL5の`iCustom()`はインジケーターの値ではなく、
ハンドルを返す方式に変わっている点に注意してください。
移行時によくあるつまずき
実際に移行作業を行う際に、つまずきやすい点です。
MQL4のBid/Ask変数がそのまま使えない
・MQL5にはMQL4のようなグローバル変数Bid/Askが無い
・既刊symbolinfotick-mql5.mdのSymbolInfoTick()で取得
・この置き換えを忘れてコンパイルエラーになることが多い
一度に全部移植しようとしない
このチェックリストの表を使い、
発注部分・指標取得部分・ログ出力部分のように、
機能単位で段階的に移植することを推奨します。
MQL4のEAをそのまま動かす選択肢もある
MQL5への移行は必須ではありません。
既存のMQL4のEA・インジケーターは、
MT4上でそのまま動作します。
よくある質問
MQL4→MQL5移行について、よく検索される疑問に回答します。
・まず発注部分だけCTradeクラスで移植してみる
・テクニカル指標はハンドル+CopyBufferという型を最初に覚える
・表に無い関数は個別にMQL5公式リファレンスの関連関数欄を確認する
MQL4のコードはMQL5でそのままコンパイルできますか?
できません。
関数名が同じでも引数構成が異なる場合が多く、
本記事の表で対応関係を確認しながら書き直す必要があります。
どこから移行を始めるのが良いですか?
まずテクニカル指標の取得部分(ハンドル+CopyBuffer)から始めると、
MQL5特有の考え方に早く慣れられます。
発注部分は既刊ctrade-mql5.mdのCTradeクラスから始めるのがおすすめです。
表に載っていない関数はどうすればいいですか?
本記事はこのサイトの既刊MQL5記事群が扱った25項目に絞っています。
網羅的な一覧ではないため、
気になる関数があれば個別にMQL5公式リファレンスを確認してください。
【MQL4→MQL5移行チェックリスト】主要関数の対応表と移行時に特に注意すべき点についてまとめてみた:まとめ
この記事では、このサイトの既刊MQL5記事群25項目を、
カテゴリ別の対応表としてまとめました。
発注の構造体化・テクニカル指標のハンドル方式への変化という、
2つの最大の変化点を中心に、
移行時のつまずきやすいポイントも整理しています。
コメント