MQL4エラーをAIで直すデバッグプロンプト集【コピペ用テンプレ付き】
AIにEAを作ってもらったけど、MetaEditorに貼ったらコンパイルエラーが出た。もう一度「直して」と言っても同じエラーが返ってくる……。
この「堂々巡り」、AIでEAを作っている人なら必ず経験します。エラーの伝え方を変えるだけで、ほとんどの場合は一発で解決できます。
この記事では、よくあるMQL4エラーをパターン別に分類し、AIに修正させるためのプロンプトテンプレートをまとめます。このページをブックマークして、困ったときに参照してください。
大前提:エラーの正しい伝え方
プロンプトのテンプレートを紹介する前に、AIにエラーを伝える際の基本ルールを確認します。
ルール1:エラーメッセージをそのままコピペする
「コンパイルエラーが出ました」と日本語で説明するだけでは情報が足りません。MetaEditorのエラーログ(下部の「エラー」タブ)に表示されているメッセージをそのままコピペしてください。
[画像:MetaEditorのエラータブにエラーメッセージが表示されているスクリーンショット]
ルール2:コード全体を一緒に渡す
エラーが出た行だけを抜き出して渡しても、AIは前後の文脈がわからず的外れな修正をすることがあります。コード全体を貼り付けるのが基本です。
ルール3:「直して」だけでなく「なぜ起きたか説明して」と聞く
このエラーを直してください。
よりも、
このエラーが発生した原因を説明した上で、修正したコードを出力してください。
と聞いた方が、AIが原因を正確に把握してから修正するため、再発防止につながります。
パターン1:コンパイルエラー
エラー①:'OrderSend' - wrong parameters count
原因:OrderSend関数の引数の数が間違っている。MT4 Build 600以降のOrderSendは9つの引数が必要です。
よくある間違い:AIがMQL5の書き方でコードを生成してしまう。
デバッグプロンプト:
以下のMQL4コードで下記のコンパイルエラーが発生しています。
【エラーメッセージ】
(MetaEditorのエラーログをここにコピペ)
【コード全文】
(コード全体をここに貼付)
【修正の条件】
- MT4 Build 600以降のOrderSend関数の正しい9つの引数を使ってください
- 引数の順番: OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color)
- 修正後のコード全文を出力してください
エラー②:'変数名' - variable already defined
原因:同じ名前の変数を2回宣言している。グローバル変数とローカル変数で同名を使っている場合も起きます。
デバッグプロンプト:
以下のMQL4コードで「variable already defined」のコンパイルエラーが出ています。
【エラーメッセージ】
(エラーログをコピペ)
【コード全文】
(コード全体を貼付)
変数の重複宣言を解消してください。
グローバル変数とローカル変数の命名が衝突していないか確認した上で修正し、
修正後のコード全文を出力してください。
エラー③:'関数名' - function is not defined
原因:関数名のタイポ、またはMQL5の関数をMQL4で使おうとしている。
よくある間違い:iRSI → iRsi(大文字小文字)、MQL5の CopyBuffer をMQL4で使う。
デバッグプロンプト:
以下のMQL4コードで「function is not defined」のコンパイルエラーが出ています。
【エラーメッセージ】
(エラーログをコピペ)
【コード全文】
(コード全体を貼付)
以下を確認して修正してください:
1. 関数名のタイポがないか
2. MQL5の関数(CopyBuffer等)を使っていないか。MQL4対応の関数に置き換える
3. MQL4のiRSI()は正しい引数 iRSI(symbol, timeframe, period, applied_price, shift) を使う
修正後のコード全文を出力してください。
エラー④:型の不一致エラー(cannot convert / illegal use of type)
原因:整数型(int)と浮動小数点型(double)の混在、またはdatetime型の扱いの間違い。
デバッグプロンプト:
以下のMQL4コードで型の不一致エラーが出ています。
【エラーメッセージ】
(エラーログをコピペ)
【コード全文】
(コード全体を貼付)
MQL4の型システムに従って修正してください。
- 価格や指標の値はdouble型
- ポジション数・ループカウンタはint型
- 時間はdatetime型
型キャストが必要な箇所には (int)、(double) 等を追加し、
修正後のコード全文を出力してください。
パターン2:コンパイルは通るが動かない
コンパイルが成功してEAをチャートに設置しても、一度も取引しない場合があります。
[画像:MT4でEAをチャートに設置した後、エキスパートタブに何もログが出ていないスクリーンショット]
ケース①:EAが全く取引しない
まず以下のチェックリストを確認してください。
✅ TIP EAが動かない時の確認リスト
- MT4上部ツールバーの「自動売買」ボタンが有効(緑色)になっているか
- EAのプロパティ画面で「自動売買を許可する」にチェックが入っているか
- 口座の証拠金が最小ロット分の証拠金を満たしているか
- デモ口座の場合、接続が切れていないか
チェックリストをクリアしても動かない場合は、AIにデバッグ用のPrint文を追加してもらいます。
デバッグプロンプト:
以下のEAをUSD/JPYの1時間足に設置しましたが、一度も取引しません。
MT4の「エキスパート」タブのログには何も出ていません。
【コード全文】
(コード全体を貼付)
以下を実行してください:
1. 取引しない原因として考えられる点を列挙してください
2. OnTick()関数の冒頭に「ティックが来ているか確認するPrint文」を追加してください
3. シグナル判定の条件ごとにPrint文を追加し、どこで条件が止まっているか
MT4のエキスパートログで確認できるようにしてください
4. 修正後のコード全文を出力してください
このコードを実装してEAを再起動すると、エキスパートタブに条件の評価結果が流れるようになります。どこで条件が満たされていないかが一目でわかります。
ケース②:エントリーはするが決済しない
デバッグプロンプト:
以下のEAはエントリーはしますが、一度もポジションを決済しません。
【コード全文】
(コード全体を貼付)
以下を確認して修正してください:
1. 決済ロジックが正しく実装されているか
2. OrderClose()関数の引数が正しいか(ticket, lots, price, slippage)
3. 決済条件の判定にClose[0](未確定バー)を使っていないか。Close[1]に変更する
4. 既存のオープンポジションを正しく検索できているか(OrderSelect, OrderType確認)
修正後のコード全文を出力してください。
ケース③:ランタイムエラー(OrderSend error番号)
EAがエントリーしようとしてエラーになる場合、MT4のエキスパートタブに OrderSend error 130 などが表示されます。
[画像:MT4エキスパートタブに「OrderSend error 130」が表示されているスクリーンショット]
よくあるエラー番号と原因:
| エラー番号 | 原因 | 対処 |
|---|---|---|
| 130 | 無効なストップレベル(SL/TPが近すぎる) | SL/TPをブローカーの最小距離以上に設定 |
| 131 | 無効なロット数(最小ロット未満等) | 最小ロット(0.01)以上で設定 |
| 132 | 市場が閉まっている | 週末・祝日のチェックを追加 |
| 134 | 証拠金不足 | ロット数を下げる or 入金 |
| 138 | 価格が古い(Requote) | RefreshRates()を追加 |
デバッグプロンプト:
以下のEAでOrderSend error 130が発生しています。
【エラーメッセージ(エキスパートタブ)】
(エラーログをコピペ)
【コード全文】
(コード全体を貼付)
error 130は「無効なストップレベル」です。
以下を修正してください:
1. SL/TPの設定方法を確認し、ブローカーの最小ストップレベルに対応させる
2. MarketInfo(Symbol(), MODE_STOPLEVEL)でブローカーの最小距離を取得し、
それ以上の距離でSL/TPを設定するように修正する
3. SL/TPが0の場合(設定なし)はそのまま発注できるようにする
修正後のコード全文を出力してください。
パターン3:ロジックが意図と違う
コンパイルも通り、取引もするが「なんか違う動きをしている」ケースです。
買いと売りが逆になっている
デバッグプロンプト:
以下のEAの売買ロジックを日本語で1ステップずつ説明してください。
【私が実現したいロジック】
(やりたいことを日本語で書く)
【コード全文】
(コード全体を貼付)
説明した後、私の意図と異なる箇所を特定し、
修正したコード全文を出力してください。
常にエントリーする / 全くエントリーしない
デバッグプロンプト:
以下のEAについて、シグナル判定の条件を確認してください。
【コード全文】
(コード全体を貼付)
問題:EAが(常にエントリーする / 全くエントリーしない)状態です。
以下を確認して修正してください:
1. 条件の論理演算子(&&, ||)が正しいか
2. Close[0](未確定バー)を判定に使っていないか。Close[1]に変更する
3. 同じバーで複数回シグナルが発生する「バー内の重複エントリー」が起きていないか
4. 既にポジションを持っている時にエントリーしないチェックが入っているか
修正後のコード全文を出力してください。
パターン4:AIが堂々巡りする時の脱出法
「修正して」を何度繰り返しても同じエラーが返ってくる状態は、AIが現在のアプローチに固執していることが多いです。
脱出法①:「別のアプローチで書き直して」
同じ修正を繰り返していて解決しません。
これまでのアプローチを捨てて、別の方法でこの機能を実装してください。
【実現したいこと】
(やりたいことをシンプルに書く)
【避けたい実装方法】
(今まで試してうまくいかなかった方法)
脱出法②:コードが複雑になりすぎた時
このコードが複雑になりすぎています。
以下の機能だけを持つ最小限のEAをゼロから書き直してください。
【必須機能】
1. (機能1)
2. (機能2)
3. (機能3)
余分な機能は省いて、できるだけシンプルなコードにしてください。
脱出法③:AIを切り替える
ChatGPTで解決しないならClaude、Claudeで解決しないならChatGPTに同じ質問をしてみてください。同じ問題でも異なるアプローチで回答することが多く、どちらかで突破できます。
脱出法④:MQL4公式リファレンスを渡す
以下のMQL4公式ドキュメントのURLを参照した上で、
OrderSend関数の正しい使い方でコードを修正してください。
https://docs.mql4.com/trading/ordersend
【コード全文】
(コード全体を貼付)
💡 INFO AIの学習データには古いMQL4情報が混在していることがあります。公式ドキュメントのURLを直接渡すと、最新の仕様に基づいた回答になりやすいです。
コピペで使える万能デバッグプロンプトテンプレート
① コンパイルエラー用
以下のMQL4コードでコンパイルエラーが発生しています。
【エラーメッセージ(MetaEditorのエラータブより)】
(ここにエラーログをコピペ)
【コード全文】
(ここにコード全体を貼付)
エラーの原因を説明した上で、修正したコード全文を出力してください。
コードは省略せず全文を出力してください。
② 動作不良用
以下のMQL4コードはコンパイルは通りますが、意図した動作をしていません。
【症状】
(例:エントリーしない / 決済しない / エラー番号がログに出る等)
【MT4のエキスパートタブのログ】
(ログの内容をコピペ)
【コード全文】
(コード全体を貼付)
原因を特定してデバッグ用のPrint文を追加し、
修正したコード全文を出力してください。
③ ロジック確認用
以下のMQL4コードの売買ロジックを、日本語で1ステップずつ説明してください。
【私が実現したいロジック】
(やりたいことを日本語で書く)
【コード全文】
(コード全体を貼付)
説明後、私の意図と異なる箇所を特定し、修正したコード全文を出力してください。
まとめ:エラーは「AIへの伝え方」で解決する
- AIが出したコードにエラーが出るのは当然のこと。恥ずかしくない
- エラーメッセージをそのままコピペしてコード全体と一緒に渡す
- 「直して」ではなく「原因を説明してから修正して」と指示する
- 堂々巡りになったらアプローチを変えるか、別のAIに切り替える
このページをブックマークして、困ったときにテンプレートをコピペして使ってください。ほとんどのエラーはこれで解決できます。
関連記事
- AIでEAを作る第一歩 — プログラミング不要でMQL4を生成する方法
- AIへのプロンプト、日本語と英語どっちがいい?
- EAの基本構造 — MQL4のコードを読み解く入門ガイド
- AIが作ったEA、バックテストでは勝つのにリアルで負ける理由
本記事で紹介するEA・手法は教育目的で作成されたものです。実際の取引で利益を保証するものではありません。EAの運用は必ずデモ口座で十分にテストした上で、自己責任で行ってください。FX取引にはリスクが伴います。
次のステップ
まずデモで動作確認 → OKなら本番運用、が安全です。
デモ口座でEAを回す手順関連記事
if (signal && riskOk) { executeEA(); }
for (const tf of [M5, M15, H1]) {
score += checkTrend(tf);
}
return score >= threshold;
【完全初心者向け】TradingViewの使い方入門 ― まずは裁量トレードを体験しよう
トレード未経験者向けにTradingViewの基本操作を画像付きで解説。チャートの見方、移動平均線の設定、ペーパートレードのやり方まで、ゼロから始める手順をまとめました。
if (signal && riskOk) { executeEA(); }
for (const tf of [M5, M15, H1]) {
score += checkTrend(tf);
}
return score >= threshold;
AIへのプロンプト、日本語と英語どっちがいい?実際に比べてみた
MQL4生成AIのプロンプトは日本語と英語どちらが精度が高いか?ChatGPTとClaudeで同じロジックを比較検証した結果を公開します。
if (signal && riskOk) { executeEA(); }
for (const tf of [M5, M15, H1]) {
score += checkTrend(tf);
}
return score >= threshold;
裁量手法をAIに伝えるための「言語化シート」— 穴埋めでプロンプト完成
裁量トレードの経験をAIが理解できる条件文に変換するための穴埋めシートを提供。シートを埋めるだけでMT4のEAを作るプロンプトが完成します。
if (signal && riskOk) { executeEA(); }
for (const tf of [M5, M15, H1]) {
score += checkTrend(tf);
}
return score >= threshold;
EA開発のAIツール選び — チャット型とCLI型、何が違うのか
ChatGPT・Codex・Claude CodeをEA開発の観点で整理。チャット型はどれも大差なし、本格開発にはCLI型が有利な理由を解説。
