「ChatGPTで作ったEAが動かない」…よくある3つのつまずき
ChatGPTにEAコードを生成してもらったのに、MT4やMT5に貼り付けたらコンパイルエラーが出たり、バックテストで注文が実行されなかったり…。こうしたトラブルはChatGPT活用者の間で非常によく聞かれる悩みです。
本記事では、「ChatGPTでEAを作ったのに動かない理由」に焦点を当て、どこでエラーが起きやすいのか、どのように修正すれば良いのかを前後編に分けて丁寧に解説します。前編では主にコンパイルエラーや構文上のミス、チャートへの反映で起こるトラブルについて取り上げ、後編ではロジック不具合や注文発注時のミス、テスター上でのトラブルに対応します。
まず前提として、ChatGPTが生成するコードは「正しいことも多いが、100%ではない」という点を押さえておく必要があります。生成AIは、あくまで文法に基づいたコードの“推測”を行っており、環境やバージョンの違いまで完璧に理解して出力しているわけではないのです。
コンパイルエラーの原因と対策|MQLの基礎文法の落とし穴
コンパイルエラーとは、MetaEditorにコードを貼り付けた時点で発生する、文法ミスや定義漏れによるエラーです。ChatGPTで作ったEAでは以下のような初歩的なミスが原因になることがあります。
代表的なエラー例とその原因
-
‘OrderSend’ – function not defined
-
→
#include <TradeTrade.mqh>
が必要なのに抜けている。
-
→
-
‘CloseOrder’ – undeclared identifier
- → 定義していない関数や変数を呼び出している。
-
unexpected token
-
→
if
やelse
文のブロック{}
が閉じていない/セミコロンの位置が不適切。
-
→
これらはMQLの基本構文に関するものが多いため、ChatGPTで作ったコードでもちょっとしたミスで起きがちです。コードをそのまま使うのではなく、MetaEditor上でエラーを見ながら一つずつ対処するのが最短の解決策です。
チャートに表示されない?EAのセットアップ時の注意点
ChatGPTが作ったコードをコンパイルしてエラーが出なかったとしても、「チャートにドラッグしてもEAが反応しない」というケースもよくあります。これはEAの“セットアップ条件”に関する設定ミスが原因のことが多いです。
よくある原因
-
チャートへの適用ができない
-
→ EAファイルを正しく
Experts
フォルダに保存していない(Scripts
に入れてしまっている)。
-
→ EAファイルを正しく
-
スマイルマーク(自動売買)が表示されない
- → メニューの「自動売買」ボタンが無効になっている。
-
チャートに何も表示されない
-
→
OnInit()
やOnTick()
にチャート描画のロジックがない。
-
→
こうした問題は、「EAが動いているかどうかが目に見えない」ことに起因します。簡単な Print("EA Started")
を OnInit()
に入れておくなど、ログで動作確認できるようにする工夫が重要です。
以降ではEAがチャート上では動いているように見えても「注文が出ない」「ロジックが効いていない」というトラブルへの対応を中心に深掘りしていきます。
ロジックは正しいのに注文が通らない?非アクティブなEAの盲点
前編では、コードが動作しない一般的な理由として構文エラーやセットアップミスを解説しました。ここからは「コンパイルできるし動いているように見えるのに、取引が発生しない」という状態に焦点を当てます。
この症状は、内部ロジックや実行条件に問題があるケースが多く、以下のような原因が考えられます:
-
if (condition)
が常に false になっている(=条件未達) - エントリー済みと認識され、再注文が抑制されている(変数の状態ミス)
-
OrderSend()
の結果が -1 になっている(注文拒否)
特に OrderSend()
関数は、実行されたかのように見えても、実際には失敗している場合があります。この場合、戻り値が -1 になり、ログに「Invalid trade parameters」などのメッセージが出ることがあります。
解決のためのデバッグ例
mql4int ticket = OrderSend(...); if(ticket < 0) { Print("注文エラー:", GetLastError()); }
このようにログ出力を活用し、エラーコードを特定することが重要です。よくあるエラーには以下のようなものがあります:
- 130:Invalid stops(指値・逆指値の距離が近すぎる)
- 131:Invalid trade volume(ロット数が規定外)
- 133:Trading is disabled(取引禁止状態)
テスト環境が原因?バックテスト中の挙動とその対策
MetaTraderのストラテジーテスターでテストしているのに注文が出ない場合、バックテスト用の条件が実運用と異なるために発生することがあります。
よくあるテスト上の盲点
- デフォルトの初期証拠金ではロット数が通らない
- スプレッドが広すぎてエントリー条件が成立しない
-
OnTick()
のロジックが1分足以下のテストで正確に再現されていない - テストモードが「Open prices only」になっている(細かい条件が無視される)
対策としては、以下のような設定見直しが有効です:
- スプレッドを「現在の値」に変更
- テスト期間を直近の流動性の高い期間に絞る
- テスト通貨ペアをEAに合ったものにする(ボラティリティがマッチするもの)
また、チャートにPrint出力を組み込み、どの時点でロジックが反応しているかを追跡するのも有効です。
まとめ|「EAが動かない」は想定内。AIコードの運用には“確認力”が鍵
ChatGPTは優れたコード生成能力を持っていますが、そのまま実戦投入できるレベルではないことがほとんどです。「EAが動かない」という状態も、経験を積んだ開発者にとっては日常茶飯事であり、原因を一つ一つ検証するのが基本的な姿勢です。
特にAIが出力したコードの場合、「見た目に正しく見えても、意図通りには動かない」というケースが頻発します。そのため、実運用前には次の確認を必ず行いましょう:
- MetaEditorでのコンパイルとエラー確認
- チャート上でのEA有効状態の確認
- ロジック条件が適切かどうかのPrintデバッグ
- ストラテジーテスターでの挙動チェックとログの解析
AIによるEA開発は、可能性と同時に慎重さも必要です。エラーは成長のチャンスとして捉え、トレーダー自身の理解を深めながら使いこなしていきましょう。
コメント