最終更新: 2026年06月
「Claudeに頼めばEAが作れる」はもはや常識になったが、「うまくいかない」という声も多い。
なぜか。プロンプトの質が直接コードの質に影響するからだ。「RSIのEAを作って」でも何かが返ってくるが、コンパイルエラー・論理的な誤り・想定と異なる動作——これらが積み重なると、修正に時間を取られて「AIに頼んだのに結局大変だった」になる。
筆者がMQL5 EA開発でClaudeを使い続けて気づいたのは、「プロンプトのフォーマットを標準化する」だけで初回正答率が劇的に上がるということだ。本稿では、そのフォーマットと技法を体系的に整理する。
Claudeに「MQL5を理解させる」ための前置き
まず認識しておく必要がある。ClaudeはMQL5の知識を持っているが、「筆者が使っている環境の詳細」は知らない。ブローカーの固有仕様・使っているMT5のバージョン・既存のコード構成——これらをプロンプトの冒頭で明示する。
共通プレフィックス(全依頼の冒頭に貼る):
以下の環境・条件でMQL5コードを作成してください:
- プラットフォーム: MetaTrader 5
- 言語: MQL5(MT5専用)
- 必須ライブラリ: CTrade(Trade.mqh)
- コーディング規約:
- インジケータハンドルはOnInit()で作成し、OnDeiinit()でリリース
- バッファはCopyBuffer()で取得し、必ずエラーチェックを含める
- エントリー判定は前バー(インデックス[1])の確定値を使用
- ポジション管理はPositionSelectByTicketまたはMagicNumberフィルター付きでPositionsTotal()を使用
- エラーは必ずPrint()でログに記録する
このプレフィックスを毎回貼るだけで、「インジケータハンドルの管理ミス」「バッファのシリーズ設定忘れ」といった定番エラーが大幅に減る。
免責: 本記事はMQL5開発技術の情報提供が目的です。EAの動作や収益を保証するものではありません。
技法1:ゴールファースト——最終状態を冒頭に書く
悪い例(プロセス先行型):
移動平均線を使って、短期が長期を上抜けたらロング、下抜けたらショートするEAを作りたいです。
ストップロスは50pips、テイクプロフィットは100pipsにしたいです。
ロットは0.01で固定です。同時に1ポジションだけ持ちます。
良い例(ゴールファースト):
【作成物の定義】
EMAクロス戦略のMQL5 EA(MT5用、コンパイル可能な完成コード)
【戦略仕様】
- エントリー: EMA20がEMA50を上抜け→ロング、下抜け→ショート
- ストップロス: 50pips固定
- テイクプロフィット: 100pips固定
- ロット: 0.01固定
- 制約: 同時ポジション数1、MagicNumber 11111
【技術要件】(上記共通プレフィックスを参照)
「最終的に何が欲しいか」を1行目で宣言することで、Claudeが全体像を把握した上でコードを書き始める。
技法2:制約の明示——「やってはいけないこと」を書く
ClaudeはデフォルトでMQL5コードに様々な機能を追加しようとする傾向がある(エラーメッセージの美化・コメントの充実化・パラメータの充実化等)。必要のない機能は明示的に除外する。
【制約】
- ダッシュボード・グラフィックUI要素は不要
- コメントは最小限(// エントリー条件チェック 程度のみ)
- input変数は仕様に記載したものだけ。追加しない
- エラーハンドリングのみ必要十分に実装(凝らない)
技法3:Before/After提示——既存コードの修正を依頼する
新規作成より「既存コードの修正」の方がよくある作業だ。このとき、「何を変えたいか」だけでなく「変えてはいけない部分」も明示する。
【修正依頼】
以下のコードに「フィルター機能」を追加してください。
【追加内容】
- ADX14が25以上のときだけエントリーを許可する
- ADXハンドルはOnInit()で作成し、既存のEMAハンドルと同じ方法で管理する
【変更禁止】
- エントリー・決済ロジック(変更しない)
- input変数の名前や型(変更しない)
- MagicNumber(変更しない)
【現在のコード】
(コード全文)
「変更禁止」セクションは非常に重要だ。Claudeは善意でリファクタリングや「改善」を行うことがある。意図しない変更を防ぐために、変えてはいけない部分を明示する。
技法4:段階的タスク分解——複雑なEAは分割して依頼する
複雑な機能を一度に全部依頼すると、生成コードの品質が落ちる。「基本機能 → フィルター追加 → リスク管理追加」という段階的な実装が安定する。
フェーズ1(基本ロジック):
エントリー・決済ロジックのみのシンプルなEAを作成。
リスク管理・フィルターは不要。
まず「動く骨格」を作ることが目的。
フェーズ2(フィルター追加):
上記のコードに以下のフィルターを追加:
(フェーズ1のコードを貼り付け)
追加するフィルター: [具体的に記述]
フェーズ3(リスク管理の精緻化):
上記コードのロット計算を以下の方法に変更:
(フェーズ2のコードを貼り付け)
変更内容: 固定ロットから「口座残高の1%リスク相当に自動計算」に変更
このアプローチで、コンパイルエラーの「どのフェーズで入ったか」を特定しやすくなる。
技法5:検証手順の組み込み——Claudeに自己チェックを依頼する
コードを受け取る前に、Claudeに内部チェックをさせる。
コードを生成した後、以下の点を自己チェックして確認してください:
[ ] OnInit()でインジケータハンドルを作成しているか
[ ] OnDeinit()でハンドルをリリースしているか
[ ] CopyBuffer()の戻り値をチェックしているか
[ ] エントリー判定でインデックス[1](前バー)を使っているか
[ ] MagicNumberフィルターが正しく機能するか
[ ] 同時ポジション数の制限が機能するか
チェック結果を最後に一覧で示してください。
このセルフチェック要求を追加すると、Claudeが見落としていた問題を自分で発見・修正してくることが多い。
プロンプトテンプレート集:コピペで使える3パターン
テンプレートA:新規EA作成(シンプル版)
【環境】MT5 / MQL5 / CTrade使用
【作成物】[戦略名]のMQL5 EA(コンパイル可能な完成コード)
【エントリー条件】
ロング: [条件を具体的に]
ショート: [条件を具体的に]
【決済条件】
ストップロス: [数値]pips固定
テイクプロフィット: [数値]pips固定
【設定値】
ロット: [数値]固定
MagicNumber: [数値]
最大同時ポジション数: 1
【制約】
- UIパネル不要
- コメント最小限
- input変数は記載したもののみ
【技術要件】
- ハンドルはOnInit/OnDeinitで管理
- CopyBufferのエラーチェック必須
- エントリー判定は[1]インデックス(前バー確定値)
- エラーはPrint()でログ記録
最後に自己チェック結果を示してください。
テンプレートB:既存EAの機能追加
【目的】以下のMQL5 EAに機能を追加する
【追加内容】
[具体的な追加機能の説明]
【変更禁止箇所】
[変更してはいけない部分を明示]
【現在のコード】
(コード全文をここに貼る)
変更箇所に // [修正] コメントを付けてください。
テンプレートC:デバッグ依頼
以下のMQL5コードでエラーが発生しています。
【症状】
[コンパイルエラー または 実行時の誤動作を具体的に説明]
【エラーメッセージ(ある場合)】
(MetaEditorのエラータブの内容をそのまま貼る)
【コード全文】
(コードを貼る)
修正後、変更箇所に // [修正理由] コメントを付けてください。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
高度な使い方:Claude Code CLIでのEA開発
2026年現在、Claude Code(CLIツール)を使ったMQL5開発も実用段階に入った。プロジェクトディレクトリにMQL5ファイルを配置して、CLIから直接対話する方式だ。
# MQL5開発専用ディレクトリで起動
cd C:\Users\[UserName]\AppData\Roaming\MetaQuotes\Terminal\[ID]\MQL5\Experts
claude
このアプローチの利点:
- ファイルを直接読み書きしながら開発できる
- 複数ファイルにまたがる修正が1回の指示で完結する
- バックテスト結果ファイルを読み込んで改善提案をさせることができる
ただしCLI操作に慣れが必要なため、まずはWebインターフェースでの開発に慣れてから移行することを推奨する。
よくある失敗パターンとその対処
失敗1:会話が長くなってコードがおかしくなる
長い会話の中でClaudeが参照しているコードが古くなっていることが原因。対処法:「現在の最新コードはこれです(コード全文)」と明示して依頼を再スタートする。
失敗2:「前に作ったEAと同じ仕様で新しい通貨ペア用を作って」がうまくいかない
Claudeは会話のコンテキストを保持するが、前回の会話(別セッション)の記憶は持たない。仕様を再度明示的に提示する必要がある。テンプレートを保存しておいて毎回貼る運用が効率的だ。
失敗3:修正依頼のたびに別の部分が変わる
「変更禁止箇所」を指定していないのが原因。テンプレートBの「変更禁止箇所」セクションを必ず使う。
よくある質問(FAQ)
Q: Claudeに頼むとき、日本語と英語どちらが精度が高いですか?
A: MQL5のコード生成においては、英語の方が専門用語の誤解が少ない傾向がある。ただしClaude Opus 4.8は日本語でも高精度なため、まず日本語で試して問題があれば英語に切り替える方針で十分。
Q: 生成されたコードのセキュリティは大丈夫ですか?
A: Claudeが生成するコードは基本的に安全だが、「外部URLへの接続を含むコード」「APIキーをコードに埋め込むコード」は注意が必要。WebRequest機能を使う場合は、接続先URLが意図した場所かを必ず確認する。
Q: Claudeが生成したコードを商用配布してもいいですか?
A: Anthropicの利用規約上は現時点では問題ない。ただし「AIが生成したコード」であることを販売先に開示することは倫理的な観点から重要だと筆者は考えている。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
免責事項: 本記事はMQL5 EA開発の技術的情報提供を目的としています。記載のプロンプトテンプレートやコード例はいかなる投資収益も保証しません。EAの動作確認は開発者自身の責任で行い、本番口座での使用前に必ずデモ口座でのテストを実施してください。FX取引は元本損失リスクを伴い、損益はすべて投資家自身の責任に帰します。
