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つの最大の変化点を中心に、

移行時のつまずきやすいポイントも整理しています。

関連記事