ChatGPTにMQL4のEAコードを書いてもらったのに、
貼り付けてコンパイルしたらエラーが出た、
あるいはエラーは出ないのに、意図した通りに発注してくれない。
そんな経験はないでしょうか。
ChatGPTはMQL4だけでなく、
MQL5や他のプログラミング言語の知識も合わせて学習しているため、
言語ごとの細かい違いが混ざったコードを出力することがあります。
この記事では、
ChatGPTが生成したMQL4コードでよく起きる
10個のつまずきポイントを、
悪い例・良い例のコード付きで確認します。
・ChatGPTのコードが混ざりやすい理由
・コンパイルエラーになる典型的な3パターン
・コンパイルは通るのに動かない典型的な3パターン
・ChatGPTに聞き直すときの効率的なコツ
なぜChatGPTのMQL4コードはそのまま動かないことが多いのか
まず、つまずきが起きる背景を確認します。
MQL4・MQL5・他言語の知識が混ざって出力される
ChatGPTは、MQL4の情報だけでなく、文法が似ているMQL5やC++、
Pythonなど他言語の情報も合わせて学習しています。
そのため、MQL5では正しいがMQL4では使えない書き方や、
他言語の慣習(例: 真偽値の大文字表記)が混ざることがあります。
「コンパイルエラー」と「動くが意図通りでない」の2種類がある
つまずきには、MetaEditorが赤字で指摘してくれる「コンパイルエラー」
と、コンパイルは通るのに結果が想定と違う「動くが意図通りでない」
の2種類があります。
後者は気づきにくく、より注意が必要です。
この記事の使い方
ChatGPTにEAやインジケーターを書いてもらったら、貼り付ける前に、
まずこの10項目を順番に確認してください。
該当する箇所があれば、修正してからコンパイルすることで、
エラーの原因探しにかかる時間を短縮できます。
コンパイルエラーになりやすい3つの確認項目
MetaEditorが止まってしまう典型パターンを確認します。
1. 真偽値がTrue/False(大文字)になっていないか
// 悪い例(コンパイルエラー) bool isReady = True; // 良い例 bool isReady = true;
MQL4の真偽値リテラルは`true`/`false`の小文字のみです。
Pythonに引っ張られて`True`/`False`と大文字で出力されることがあります。
2. 波括弧・セミコロンの閉じ忘れ
長いコードをチャット欄に貼り付ける際、
一部だけコピーして波括弧の対応が崩れることがあります。
MetaEditorのエラー行番号は、実際の原因より下の行を指すことが多いため、
エラー行だけでなく、その関数全体の波括弧の数を数えて確認してください。
3. 新旧イベントハンドラを両方書いてしまう
// 悪い例(コンパイルエラーまたは意図せぬ重複実行)
int start() { ... }
void OnTick() { ... }
MQL4には`start()`(旧形式)と
`OnTick()`(新形式)という2種類のメインイベントハンドラがあります。
ChatGPTへの質問を繰り返すうちに、新旧どちらの説明も混ざって出力され、
両方が同じファイルに入ってしまうことがあるため、どちらか1つに統一してください。
コンパイルは通るが意図通り動かない確認項目
エラーは出ないのに結果がおかしい、というパターンを確認します。
4. Close[0]とClose[1]を混同していない
// 形成中の足(値が変わり続ける) double price0 = Close[0]; // 直近の確定足 double price1 = Close[1];
MT4の時系列配列は0番目が最新ですが、0番目は「まだ確定していない、形成中の足」です。
確定した足を基準に判定したい場合は、0番目ではなく1番目を使う必要があります。
5. OrderSendの戻り値(-1)を確認していない
// 悪い例(発注失敗に気づけない)
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0);
// 良い例
int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0);
if(ticket < 0)
Print("発注失敗: ", GetLastError());
`OrderSend()`は発注に失敗すると-1を返しますが、
ChatGPTが生成する最小限のサンプルコードでは、
この戻り値チェックが省略されていることがよくあります。
発注できていないのに「動いているはず」と誤解する原因になるため、必ず確認してください。
6. Point変数とブローカーの桁数(5桁/3桁)の誤解
5桁(または3桁)表示のブローカーでは、`Point`の値が通常の10分の1になっており、
「10pips」のつもりで`10 * Point`と書くと、
実際には1pipsにしかならないことがあります。
既刊記事で解説した`_Digits`や`MarketInfo`を使った
桁数判定とあわせて確認してください。
実行時に発注できない・反応しない確認項目
コンパイルも通り一見正しそうなのに発注されない場合を確認します。
7. ロット数が刻み値(0.01単位等)に合っていない
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP); double lots = MathRound(rawLots / lotStep) * lotStep;
ChatGPTが計算したロット数が小数点以下の端数を含んでいると、
「無効なロット数」エラーで発注が拒否されることがあります。
`MODE_LOTSTEP`で刻み値を取得し、丸めてから使ってください。
8. 自動売買ボタン・許可時間帯の確認漏れ
コードに問題がなくても、MT4右上の「自動売買」ボタンがオフになっている、
あるいは市場が閉まっている時間帯であれば、EAは一切発注しません。
コードを疑う前に、まず実行環境側の設定を確認してください。
9. extern/inputの型とデフォルト値のミスマッチ
// 悪い例(型の不一致でコンパイルエラーになりやすい) extern int LotSize = 0.1; // 良い例 extern double LotSize = 0.1;
ロット数のような小数値を`int`型で宣言してしまう誤りもよく見られます。
ChatGPTに生成させたパラメーター定義は、型と初期値の組み合わせが正しいか、
1つずつ確認してください。
ChatGPTに聞き直すときのコツ
修正を依頼する際に、やり取りの回数を減らす工夫を確認します。
10. エラーメッセージとMQLのバージョンを一緒に伝える
「動きません」とだけ伝えるのではなく、
MetaEditorに表示されたエラーメッセージの全文と行番号、
「MQL4です」というバージョン情報をセットで伝えると、的外れな修正が減ります。
一度に全部直させず、1つのエラーずつ確認する
複数のエラーをまとめて修正依頼すると、
1つを直す過程で別の箇所が新たに壊れることがあります。
エラーメッセージの一番上から1つずつ直してコンパイルし直す方が、結果的に早く完成します。
MetaEditorでのチェック手順
実際にチェックリストを使う流れを確認します。
- ChatGPTから受け取ったコードをMetaEditorに貼り付ける
- コンパイルし、エラーが出た場合は本記事の2節・5節を順に確認する
- エラーが出なくても、3節・4節の項目を上から目視で確認する
- デモ口座で実際にEAを動かし、発注ログ(Print文の出力)を確認する
よくある質問
ChatGPTで書いたMQL4コードについて、よく検索される疑問に回答します。
ChatGPTにMQL4のEAを書かせること自体はおすすめできますか?
最初のたたき台を作る用途としては有効です。
ただし、このサイトの編集方針でも開示している通り、
AIが生成したコードはそのまま鵜呑みにせず、
このチェックリストのような人の目での確認を挟むことをおすすめします。
MQL5用のコードが混ざっていないか、どう見分ければよいですか?
`PositionGetDouble`や`CTrade`クラスなど、
MQL5特有のクラス・関数名が含まれていれば、MQL5の知識が混ざっているサインです。
MQL4用に書き換えるか、ChatGPTに「MQL4で」と明示して依頼し直してください。
このチェックリストを通せば必ず動きますか?
断定はできません。
ここに挙げたのはよく見られる典型例であり、個別のロジックの誤りまでは保証できません。
最終的には実際にデモ口座で動作を確認することをおすすめします。
【MQL4】ChatGPTに書いてもらったEAのコードがコンパイルできない・動かない時に確認する10項目:まとめ
ChatGPTが生成したMQL4コードには、
MQL5や他言語の知識が混ざっていることがあります。
コンパイルエラー・動作の不一致・発注できない、
それぞれのパターンに典型的な原因があるため、
このチェックリストを使えば、原因探しにかかる時間を大きく減らせます。
コメント