MQL4→MQL5変換は可能?ChatGPTでEAを移植して検証した結果と注意点

ChatGPTでMQL4からMQL5へEAを変換し実際に検証したアイキャッチ画像
EA・MT4ノウハウ集

「MQL4のEAをChatGPTに投げたら、MQL4→MQL5変換は可能なのか?」
実際に自分のEAコードを使って検証し、具体的な手順・エラー対処までまとめました。

結論は、想像以上にそのまま動く部分と、必ず手修正が必要な部分がはっきり分かれるというもの。 ChatGPTの変換精度は確実に上がっている一方で、MQL4とMQL5の構造差による“ハマりポイント”も存在しました。

本記事では、MQL4の既存EAをChatGPTでMQL5へ変換 → コンパイル → バックテスト比較まで実施したリアルな結果を公開します。
机上の解説ではなく、実際に動かして分かった移植のリアルをそのまままとめています。


結論:シンプルなEAならかなりいける(ただし条件あり)

先に結論を書きます。

今回の実験結果
・ロジック部分:ほぼそのまま移植可能
・コンパイル:軽微な修正で通過
・バックテスト:MT4と近い結果を再現
・取引処理:人力修正は必要

つまり、 シンプルな1ポジ運用EAなら、ChatGPT変換は実務レベルに近づいている というのが今回の結論です。


今回変換したEA(実験条件)

検証に使ったのは、パラボリックSARを使った比較的シンプルなEAです。

  • エントリー:SAR連続判定
  • 決済:逆条件成立
  • 固定TP / SL
  • 1ポジ運用(ナンピンなし)

複雑な資金管理や多段管理は入っていないため、ChatGPT変換の実力を見るにはちょうど良いサンプルでした。

👉 MT4でパラボリックSAR EAを作成|無料MQL4サンプルコード解説


なぜMQL4→MQL5移植は難しいと言われるのか

文法の違いよりも大きいのは、取引モデルの違いです。

  • MQL4:Order中心(注文=ポジション感覚)
  • MQL5:Order / Deal / Position が分離

この構造差があるため、単純なコード置換では動かないケースが多くなります。
つまり、「文法」ではなく「考え方」が変わっているのが最大の理由です。

もしここで「MT5ってそもそも何が違うの?」と感じた方は、
まずは実際にハマりやすいポイントをまとめたこちらを先に読むと理解が一気に進みます。

👉 MT5初心者が最初にハマる罠5選(実体験まとめ)

そして、取引モデルやコード構造の違いを技術的に理解したい場合は、以下の記事で具体的に比較しています。

👉 【超シンプル】MQL4とMQL5の違いをコード比較で解説|MT4→MT5移行時の注意点


ChatGPTに投げたプロンプト(実際に使用)

あなたはMQL4/MQL5に精通した実務エンジニアです。
以下のMQL4 EAコードをMQL5へ移植してください。

【要件】
- ロジックは変更しない
- MT5推奨の取引処理を使う
- まずはコンパイルが通る状態を目標にする
- 互換性がない部分はコメントで説明する

ポイントは「完璧に動かす」ではなく、 まずコンパイルを通すと明示することです。

精度を上げるための追加プロンプト(実務用)

上記の基本プロンプトでも変換は可能ですが、 実際の移植作業では追加指示を入れることで精度が大きく向上しました。

特に以下の内容を明示すると、修正量をかなり減らせます。


【追加指示(精度向上用)】

- 関数引数の配列は必ず dynamic array に変換すること
- MT4のObjectDelete→ObjectCreate型の描画は使用しないこと
- ObjectFindで存在確認し、存在しない場合のみ作成すること
- 既存オブジェクトはObjectMoveやObjectSetで更新すること
- MT4のOrder系処理はPosition系へ変換すること

これらを追加することで、 コンパイル後の修正量が大幅に減り、実務レベルに近いコードが生成されやすくなります。

※ChatGPTは指示の粒度で出力品質が大きく変わるため、 「何をしないか(禁止事項)」まで明示するのがポイントです。


ChatGPTでMQL4→MQL5変換は実際どこまで通る?

今回の変換作業で、特に実感したのは以下の内容です。

✔ 自動でかなり通った部分

  • インジケーター計算(iSARなど)
  • if条件・ロジック判定
  • inputパラメータ
  • ログ出力

❌ 人力修正が必要だった部分

  • ポジション取得系
  • OrderSelect系処理
  • 新規注文/決済処理
実務メモ:変換後に「コンパイルは通る・バックテスト結果は出るのにビジュアルモードが動かない」代表例
今回、MQL5版がコンパイルしてもビジュアルモードでテスト開始直後に停止するケースがありました。
原因は、OnInit内でCopyBuffer()を呼ぶと、まだ指標データが準備できておらず失敗するためです(例:CopyBuffer failed / err=4806)。

対策は、OnInitではハンドル作成だけにして、BarsCalculated()で必要本数が揃ってからCopyBufferする形に修正します。
※この「初期化で止まる問題」は、MT4→MT5移行で特にハマりやすい罠です。(※これはChatGPT変換時に出やすい生成パターンです)

PositionSelectByIndexが使えない?MQL4→MQL5移植時のエラー例

最終的に、今回ChatGPTに投げたプロンプトだと以下の問題のみでした。

MQL4から移植した際に、 「PositionSelectByIndexが使えない」エラーが出るケースがあります。

ChatGPTでMQL4→MQL5へ変換した際のエラー
undeclared identifier ‘PositionSelectByIndex’
→ MT5環境によって使えない場合があり、ポジション取得方法を修正。

この修正(2箇所)だけでコンパイルは通過しました。
※このエラー内容をChatGPTに共有し、修正案適用でOK


バックテスト比較(MT4 vs MT5)

できる限り条件を揃えてテストした結果:

MQL5とMQL4のバックテスト比較データ
MQL5とMQL4のバックテスト比較グラフ
  • トレード回数:ほぼ一致
  • PF:近い値
  • ロジック崩壊:なし

完全一致はしませんでしたが、 移植失敗ではなく、プラットフォーム仕様差によるズレです。

今回の結果を見る限り、 シンプルなEAであれば、ChatGPT変換は実務で十分スタート地点になる と感じました。


MT5で混乱したポイント(実務メモ)

MT5テスターには、MT4のような固定スプレッド入力欄がありません。

銘柄情報に表示されるスプレッドは「設定値」ではなく、 テスター側で固定指定できるものではありません。

この仕様差により、MT4と完全一致しないケースがあります。


なぜ最近ChatGPTの変換精度が上がっているのか(簡潔)

  • MQL5のサンプルコード学習量が増えている
  • CTradeベース実装のパターンが安定してきた
  • 「まずコンパイルを通す」戦略が有効

以前は「動かないコード」が多かった印象ですが、現在は骨格生成ツールとしてかなり実用的になっています。


結論:ChatGPT変換はどこまで使える?

  • 向いている: シンプルEA・1ポジ運用
  • 難しい: ナンピン・複雑決済・多段管理

今回の検証では、 「ChatGPTで骨格を作り、人間が仕上げる」 という使い方が最も現実的でした。

※ MT5は「仕様を覚える」よりも、実際にバックテストを1回動かして確認する方が理解が早いです。


追記:実際にEAをMT5へ完全移植して分かった注意点

この記事公開後、実際にナンピンEAを含む複数のEAを MQL4 → MQL5へ移植する作業を行いました。

その過程で見えてきたのは、ChatGPTの変換だけでは吸収しきれない MT4とMT5の構造差です。

ここでは、実際にハマりやすかったポイントを 実務メモとして簡潔にまとめます。


① 関数引数の固定配列はMT5で使用できない

MQL4では関数引数として固定配列を渡すことができます。


int funcOrder_Select(int mode,int ticket,int magic,int &o_Ticket[100])

しかしMT5ではこの書き方はコンパイルエラーになります。


'o_Ticket' - parameter can be a dynamic array only

MT5では以下のようにdynamic arrayへ変更する必要があります。


int funcOrder_Select(int mode,int ticket,int magic,int &o_Ticket[])

このエラーはMT4→MT5移植で非常に頻出するため、 最初に押さえておきたいポイントです。


② オブジェクト描画は「削除→再生成」ではなく更新方式へ変更

MT4では以下のような描画処理がよく使われます。


ObjectDelete(name);
ObjectCreate(name, ...);

しかしMT5で同じ処理を行うと、 Tickごとにオブジェクトが再生成され、ちらつきや微動の原因になります。

MT5では次のような更新ベースの処理に変更する必要があります。

  • ObjectFindで存在確認
  • 存在しない場合のみObjectCreate
  • 存在する場合はObjectMove / ObjectSetで更新

この方法にすることで、 ラインやラベルがTickごとに動く・消える問題を防ぐことができます。


③ MT4のOrder系処理はMT5ではPosition系へ変更

MT4では注文とポジションが一体のため、 以下のようなOrder系関数が中心になります。


OrderSelect
OrderTicket
OrderType

一方MT5では、 Order / Deal / Position が分離された構造になっています。

そのためポジション管理は基本的に Position系関数へ書き換える必要があります。


PositionSelect
PositionGetInteger
PositionGetDouble

この部分は単純な置換では対応できず、 ロジック単位での修正が必要になるケースが多いのが特徴です。


まとめ

ChatGPTの変換精度は高くなっていますが、 構造レベルの違いは自動変換ではカバーできません。

特に以下の3点は、実務でほぼ必ず修正が必要になります。

  • 配列引数はdynamic arrayへ変更
  • オブジェクト描画は更新方式へ変更
  • Order処理はPositionベースへ変更

これらを押さえておけば、 MQL4の既存EAでもMT5移植は十分現実的です。


補足:ChatGPTにコードを入力する際の注意点(機密性)

MQL4→MQL5変換をChatGPTで行う場合、 ソースコードをそのまま入力することに不安を感じる方も多いと思います。

特に、販売予定のEAや独自ロジックを含むコードの場合は、 そのまま入力することに抵抗があるのも自然です。

以下のような対策を取ることでリスクを抑えることができます。

  • ロジックの一部のみを切り出して変換する
  • 固有の変数名・ロジック名を抽象化する
  • 検証用の簡易コードで置き換える

実際の移植作業でも、 「全コードを一括で投げる」よりも「部分ごとに変換→統合」の方が精度・安全性ともに高いと感じました。


📝 本記事の内容をそのまま再現した 実際に動作するMT5版EAコードはnoteにて公開しています。
MT5対応ナンピンEA(MQL5版|ソースコード公開)

自力で難しい場合は

MQL4→MQL5移植はシンプルなEAであれば対応可能ですが、 ナンピン・複雑ロジック・資金管理が絡む場合は、 想定以上に修正が必要になるケースが多いです。

「自分で直したいが詰まっている」場合はオンライン相談、
「時間をかけずに完成させたい」場合はEA作成代行もご利用いただけます。

👉 MT4・EAオンライン相談はこちら
👉 EA作成代行はこちら

コメント

タイトルとURLをコピーしました