Claude CodeでFX自動売買をゼロから作る方法【AI支援EA開発入門】
最終更新: 2026年6月
Claude Codeを使えば、MQL4/MQL5の文法を完全に習得していないトレーダーでも、自分のトレードロジックをEA(Expert Advisor)として実装できる時代になった。筆者が実際に試してみて感じたのは、「AIがコードを書く」というよりも「AIとペアプログラミングをしている感覚」に近いという点だ。詰まった箇所をそのまま自然言語で伝えると、文脈を踏まえた修正案が返ってくる。
ただし、AIが出力するコードをそのまま本番で動かすのは危険だ。バックテストと段階的なフォワードテストは省略できない。本記事では環境構築からバックテスト・リスク管理の設計まで、AI支援EA開発の実際のフローを詳しく説明する。
Claude Codeとは何か——FX開発での活用イメージ
Claude Codeは、Anthropicが提供するターミナルベースのAIコーディングアシスタントだ。コードの生成・デバッグ・リファクタリングをチャット形式で依頼できる。GitHub Copilotのようなインライン補完とは異なり、ファイル単位での読み書き・コマンド実行まで自律的に行える点が特徴だ。
FX開発での活用イメージは以下のとおり。
- ロジックの言語化支援: 「EMA20がEMA50を上抜けた次の足の始値でエントリー」という日本語のトレードルールをMQL4コードに変換する
- デバッグの加速: コンパイルエラーのメッセージをそのまま貼り付けると、原因と修正箇所を特定してくれる
- リスク計算ロジックの実装: ATRベースのストップロスや口座残高に対するロット計算など、数式の実装をサポートする
- コードのレビュー: 実装したロジックに論理的な矛盾がないか確認する
MT4/MT5のMeta Editorで作業しながら、ターミナルでClaude Codeに並行して質問する使い方が現実的だ。
開発環境の準備(MT4/MT5 + Claude Code)
必要なもの
| ツール | 用途 | |---|---| | MT4またはMT5 | EAの実行環境・バックテスト環境 | | MetaEditor | MQL4/MQL5のコードエディタ(MT4/MT5に付属) | | Claude Code(CLI) | AIコーディングアシスタント | | Node.js 18以上 | Claude Code CLIの実行環境 |
インストール手順
Claude CodeはnpmまたはNode.js環境があればインストールできる。
npm install -g @anthropic-ai/claude-code
認証はAnthropicのAPIキーをセットする形式だ。APIキーはAnthropic Console(console.anthropic.com)で発行できる。
export ANTHROPIC_API_KEY="sk-ant-xxxxxx"
claude
MT4/MT5はブローカーのサイトから入手する。国内ブローカーではGMO外貨・Axioryなどが対応している。インストール後、MetaEditorはMT4メニューの「ツール」→「MetaQuotes言語エディタ」から起動できる。
開発ディレクトリの構成例は以下の通り。EAファイルの保存先は自動的にMT4のデータフォルダ内になるが、Gitで管理するためプロジェクトフォルダを別途作成しておくと履歴管理が楽になる。
project/
├── src/
│ └── MyEA.mq4 # ソースコード
├── docs/
│ └── logic.md # トレードロジックの仕様書
└── backtest/
└── results/ # バックテスト結果のCSV
プロンプトでEAのロジックを設計する
Claude Codeへの指示は、「何を・どんな条件で・どう管理するか」の3点を明示するとコードの品質が上がる。
良いプロンプトの例
MT4用のMQL4コードを書いてください。
ロジック:
- 使用通貨ペア: USDJPY(M15チャート)
- エントリー条件(ロング): EMA20 > EMA50 かつ RSI(14) が40を下から上抜け
- エントリー条件(ショート): EMA20 < EMA50 かつ RSI(14) が60を上から下抜け
- ストップロス: エントリー時のATR(14) × 1.5
- テイクプロフィット: ストップロスの2倍
- ポジション管理: 同時保有は1ポジションのみ
- ロット: 固定0.1ロット(後でリスクベースに変更したい)
まずEMAとRSIの計算部分だけ実装してください。
この例のように「まず〇〇だけ」と段階的に依頼することが重要だ。一度に全機能を実装させると、デバッグ時にどこで問題が発生しているか特定しにくくなる。
よくある落とし穴
筆者が最初に詰まったのは、Claude Codeが出力したコードをそのままMetaEditorに貼り付けたときのことだ。MQL4ではArraySetAsSeries()の呼び出しタイミングに注意が必要で、インジケーターバッファの設定順を間違えると計算結果がずれる。このエラーメッセージをClaude Codeに投げると、次のような説明が返ってきた。
「
iCustom()やiMA()等の関数は最新バーが[0]インデックスになるため、ArraySetAsSeries(array, true)を呼んでからコピーする必要があります」
こういった「MQL4固有のトラップ」に対して、Claude Codeは文脈を維持したまま説明してくれる点が有益だ。
MQL4/MQL5コード生成とデバッグの流れ
実際に生成されるコードの断片を見てみよう。EMA2本のクロスを検出する部分のサンプルだ。
// EMA計算
double ema20Current = iMA(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double ema20Previous = iMA(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
double ema50Current = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_CLOSE, 0);
double ema50Previous = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_CLOSE, 1);
// ゴールデンクロス検出
bool goldenCross = (ema20Previous <= ema50Previous) && (ema20Current > ema50Current);
// デッドクロス検出
bool deadCross = (ema20Previous >= ema50Previous) && (ema20Current < ema50Current);
RSIを組み合わせたフィルター部分は以下のようになる。
// RSI計算
double rsiCurrent = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);
double rsiPrevious = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
// RSIの上抜け確認(40ライン)
bool rsiCrossUp = (rsiPrevious <= 40.0) && (rsiCurrent > 40.0);
// ロングエントリー条件(両条件の重合)
bool longCondition = goldenCross && rsiCrossUp;
デバッグ手順としては、MetaEditorのコンパイル(F7キー)でエラーを確認し、エラーメッセージをClaude Codeのセッションにコピーペーストするのが最速だ。「コンパイルエラー: error 33, wrong parameters count」のような出力をそのまま渡すと、修正候補を提示してくれる。
Photo by Igor Omilaev on Unsplash
バックテストで戦略を検証する
コードが完成したら、まずMT4/MT5のストラテジーテスターでバックテストを実行する。
ストラテジーテスターの基本設定
| 設定項目 | 推奨設定 | |---|---| | モデル | 全ティック(精度優先)またはコントロールポイント | | 期間 | 最低2〜3年(相場の異なるフェーズを含む) | | スプレッド | ブローカー実績に近い値(例:USDJPYなら10〜15) | | 初期残高 | 実際の運用予定額 |
バックテスト結果の読み方で重要な指標を以下に示す。
- プロフィットファクター(PF): 総利益÷総損失。1.3以上が目安とされるが、サンプル数が少ない場合は過信禁物
- 最大ドローダウン(MDD): 口座残高の最大の落ち込み幅。これが許容できる範囲かを先に決めておく
- シャープレシオ: リスク調整後のリターン。1.0以上あれば安定性は評価できるが、FXの場合はドローダウン期間の長さも確認する
- トレード数: 統計的な意味を持たせるには最低200トレード以上が望ましい
筆者が過去に試したEMAクロス系のストラテジーでは、ランダムな期間を選んでバックテストすると結果が大きく変わることが多かった。特定の年だけPFが高く見えるケースは「その年の相場環境に過適合している」可能性が高い。バックテスト結果は傾向として捉えることが基本だ。
アウトオブサンプルテスト
バックテスト期間の最後の20〜30%をテスト用(アウトオブサンプル)として使うことで、過適合の評価ができる。ストラテジーテスターでは期間を分割して確認できる。インサンプル期間で良いPFが出ても、アウトオブサンプル期間で崩れる場合は、パラメーターの最適化をやり直す必要がある。
リスク管理とフォワードテスト
ロットサイズの計算ロジック
固定ロットから「口座残高に対するリスク率で計算する」方式に変更するコード例を示す。
// リスクベースのロット計算
double CalculateLotSize(double stopLossPips) {
double accountBalance = AccountBalance();
double riskPercent = 1.0; // 1トレードあたりのリスク1%
double riskAmount = accountBalance * (riskPercent / 100.0);
// 1pipsあたりの損益(USDJPY 0.1ロット = 約100円)
double pipValue = MarketInfo(Symbol(), MODE_TICKVALUE) * 10;
double lotSize = riskAmount / (stopLossPips * pipValue);
// ブローカーのロット制限に合わせて丸める
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
lotSize = MathFloor(lotSize / lotStep) * lotStep;
lotSize = MathMax(minLot, MathMin(maxLot, lotSize));
return lotSize;
}
このロジックをClaude Codeに依頼する際、「ATR(14)×1.5をストップロスとした場合のpips数を引数に渡す想定で」と付け加えると、ATR計算との連携部分も含めて実装してくれる。
フォワードテストの進め方
バックテストで問題がなければ、次はデモ口座でのフォワードテストに移行する。
- デモ口座で最低1〜3ヶ月間稼働させる: バックテスト期間に含まれない現在の相場環境での動作確認
- 週次でログを確認する: MT4のジャーナルタブにEAのログが出力される
- バックテスト結果との乖離を確認する: トレード頻度・勝率・PFがバックテストから大きく外れていないか
フォワードテストで問題がなければ、リアル口座での運用を小ロットから始める。最初から大きなロットで稼働させることは避けるべきだ。
よくある質問(FAQ)
Q: Claude Codeを使うにはプログラミングの知識が必要ですか? A: 完全なゼロからでも始められるが、MQL4/MQL5の基礎的な構文(変数・関数・条件分岐)を理解しているほうがデバッグの効率が大幅に上がる。最低限「MQL4 入門」程度の知識があると、AIの出力を検証しながら進めやすい。
Q: Claude Codeで生成したEAは商用利用(他者への販売)できますか? A: Anthropicの利用規約上、生成コードの著作権は利用者に帰属する解釈が一般的だが、規約は変更されることがあるため、商用利用を検討する場合は最新の利用規約を確認してほしい。また、EAの販売には別途金融規制上の問題が生じる場合がある。
Q: バックテストで良い結果が出ても、実運用でうまくいかない理由は何ですか? A: 主な原因として「過最適化(カーブフィッティング)」「スプレッドや約定コストの過小評価」「相場環境の変化」が挙げられる。バックテストはあくまで過去データへの適合度を示すものであり、将来の利益を保証するものではない。
免責事項
本記事に記載されたコード例・手法・バックテスト結果等はすべて情報提供を目的としたものであり、特定の金融商品・取引手法への投資を勧誘・推奨するものではありません。FX取引にはリスクが伴い、投資した元本を下回る損失が生じる可能性があります。実際の取引判断はご自身の責任において行ってください。バックテストの結果は過去データに基づくものであり、将来の運用成果を保証するものではありません。
本記事の情報は執筆時点(2026年6月)のものです。Claude Code・MT4/MT5の仕様は変更される可能性があります。
