「FXの自動売買を、コードを一行も書かずにAIに丸投げしたら、どこまでできるのか?」
この記事では、AIコーディングツール Claude Code に日本語で指示を出すだけで、MT5(MetaTrader 5)× Python API を使った FX/CFD の自動売買環境を作ります。
流れは 環境構築 → 価格データ取得 → バックテスト → デモ口座での実行 まで一気通貫。
環境は、MT5 と Python API に対応した当社 OANDA証券 の口座で進めます。
- 対象読者: 「AIコーディングでFXの自動化を試したい」開発者・トレーダー
- 手を動かして書くコード: ほぼゼロ(すべてClaude Codeに日本語で依頼)
- 使うもの: OANDAのMT5口座 / Claude Code / Python(=AIが自動導入)
少し長い記事ですが、環境構築 → 価格取得 → 自動売買 の3部構成です。目次から気になるところへどうぞ。
全体構成
やり取りの流れはとてもシンプルです。
あなたは日本語で指示するだけ。 Claude CodeがPythonコードを生成・実行し、Python の MetaTrader5 ライブラリ経由でMT5を操作します。
あなた ──(日本語で指示)──▶ Claude Code ──(Pythonコード)──▶ Python ──(API)──▶ MT5
操作するのは左端だけ。コード生成からMT5操作まですべてAIが仲介
| レイヤー | 役割 | 導入 |
|---|---|---|
| あなた | 日本語で指示するだけ | — |
| Claude Code | AIがコードを生成・実行 | 手動でインストール |
| Python + MetaTrader5 | APIを呼び出す | AIが自動導入 |
| MT5(OANDA) | 価格取得・注文・ポジション管理 | 手動でインストール |
手動で用意するのは MT5とClaude Codeの2つだけ。
Python環境やライブラリの導入、コードの記述は、すべてAIに任せます。
第1部:環境構築
Step 1:MT5のインストールと口座接続(手動)
当社(OANDA証券)のMT5口座で進めます。
口座をお持ちでない場合は、先に開設してください(デモ口座でOK。まずはデモを推奨します)。
- OANDAのマイページにログインし、「MT5サブアカウントの作成」 をクリック
- MT5専用の口座名とパスワードを設定(MT5ログインで使うので控える)。ログインIDはマイページの「口座情報」で確認
- サブアカウント作成後、MT5インストーラーをダウンロードして実行 → 画面の指示に従ってインストール
- MT5起動時にデモ口座申請画面が出たら 「キャンセル」(この画面からOANDAデモ口座は作れません)
- 「ファイル」→「取引口座にログイン」で以下を入力
- ログインID: マイページの口座情報のID
- パスワード: 手順2で設定したMT5専用パスワード
-
サーバー: 本番
OANDA-Japan MT5 Live/ デモOANDA-Japan MT5 Practice
- 画面右下の接続ステータスにデータ通信量が表示されれば接続OK
詳しい手順は OANDA Lab にまとまっています。
→ MT5(メタトレーダー5)の始め方・使い方|OANDA Lab
Step 2:Claude Codeのインストール(手動)
Claude Code は Anthropic が提供するAIコーディングアシスタントです。日本語で指示するだけで、コードの生成・編集・実行を行ってくれます。
利用には、Anthropic アカウント(無料作成可)+有料サブスクが必要です(料金プラン)。
| プラン | 月額 | 目安 |
|---|---|---|
| Claude Pro | $20 | まずはここから |
| Claude Max | $100 / $200 | 利用量が多い場合 |
インストールは公式ガイドが確実です。
アプリを起動して対話画面が出れば、Step 2 は完了です。
📖 Claude Codeの導入でつまずいたら、非エンジニア向けに画面つきで解説した姉妹記事も参考になります。
→ 【非エンジニア向け】環境を整える① Claude Codeを設定しよう(Qiita)
Step 3:Python環境はAIに作ってもらう(AI)
ここからが本題です。
PythonのインストールもMT5連携も、Claude Codeに指示するだけで完了します。
🧑 指示:
このPCにPythonがインストールされているか確認して。なければインストールして。
✳️ Claude Code:(python --version で確認 → 無ければ winget install Python.Python.3.12 で導入)
> python --version
Python was not found
> winget install Python.Python.3.12
Successfully installed ✓ Python 3.12
続けて、MT5連携ライブラリを入れてもらいます。
🧑 指示:
PythonにMetaTrader5ライブラリをインストールして、MT5と接続できるようにして。
✳️ Claude Code:
> pip install MetaTrader5
Successfully installed MetaTrader5-5.0.4200
> python -c "import MetaTrader5 as mt5; print(mt5.initialize())"
True ✓ MT5との接続に成功
PythonからMT5を操作するには、同じPC上でMT5が起動し、口座にログインした状態である必要があります。MT5とClaude Codeを両方開いた状態で進めてください。
動作確認として、最初のデータを取ってみます。
🧑 指示:
MT5に接続して、ドル円(USDJPY)の現在のBid価格とAsk価格を取得して表示して。
✳️ Claude Code:
import MetaTrader5 as mt5
mt5.initialize()
tick = mt5.symbol_info_tick("USDJPY")
print(f"Bid: {tick.bid}")
print(f"Ask: {tick.ask}")
mt5.shutdown()
Bid: 162.629
Ask: 162.633
価格が返ってくれば、環境構築は完了です。
読者がコマンドを手入力することは、一度もありませんでした。
💡 うまくいかないときは
エラーメッセージをそのままClaude Codeに貼って「解決して」と頼めば、原因の特定と修正までやってくれます。よくあるのは次の2つです。
- MT5が未起動 / 未ログイン
- シンボル名がブローカーで異なる(
USDJPY/USDJPY./USDJPY#など。MT5の気配値表示で確認)
第2部:価格データを取得する
環境が整ったので、いろいろなデータを取ってみます。
ポイントは、指示の日本語を変えるだけで取得内容が自在に切り替わることです。
複数銘柄の価格を一覧で取る
🧑 指示:
ドル円、ユーロドル、ポンドドル、ユーロ円、ゴールド(XAUUSD)の現在価格をまとめて取得して、一覧表で表示して。スプレッドも計算して。
銘柄 Bid Ask Spread
USDJPY 162.703 162.707 0.4銭
EURUSD 1.13933 1.13938 0.5pips
GBPUSD 1.32313 1.32322 0.9pips
EURJPY 185.377 185.384 0.7銭
XAUUSD 3968.84 3969.42 $0.58
FXだけでなく、ゴールドや株価指数・原油などのCFD銘柄も、MT5で提供されていれば同じ方法で取得できます。
過去のローソク足データを取る
テクニカル分析やバックテストに使うローソク足(OHLCV)も取得できます。
🧑 指示:
ドル円の直近10本の1時間足データを取得して表示して。
✳️ Claude Code:
import MetaTrader5 as mt5
from datetime import datetime
mt5.initialize()
rates = mt5.copy_rates_from_pos("USDJPY", mt5.TIMEFRAME_H1, 0, 10)
for r in rates:
t = datetime.fromtimestamp(r[0]).strftime("%m/%d %H:%M")
print(f"{t} O:{r[1]:.3f} H:{r[2]:.3f} L:{r[3]:.3f} C:{r[4]:.3f}")
mt5.shutdown()
07/01 10:00 O:162.556 H:162.618 L:162.548 C:162.607
07/01 11:00 O:162.607 H:162.643 L:162.526 C:162.629
07/01 12:00 O:162.631 H:162.774 L:162.628 C:162.686
...
タイムフレームは、指示の言葉で切り替わります。
| 指示 | TF | 指示 | TF |
|---|---|---|---|
| 「1分足」 | M1 | 「1時間足」 | H1 |
| 「5分足」 | M5 | 「4時間足」 | H4 |
| 「15分足」 | M15 | 「日足」 | D1 |
| 「30分足」 | M30 | 「週足 / 月足」 | W1 / MN1 |
「2025年1月1日から6月30日までの日足」のように、期間を指定して取得することもできます。
チャート化・CSV保存も一言で
🧑 指示:
ドル円の直近60本の日足でローソク足チャートを描画して。20日移動平均線(青)と50日移動平均線(赤)を追加して、下に出来高も表示して。画像として保存して。
(mplfinance などの必要ライブラリも、AIが自動でインストールします)
🧑 指示:
ドル円の直近1年分の日足データを取得して、CSVファイルとして保存して。
Saved: usdjpy_daily_2025-2026.csv
260 rows × 6 columns (time, open, high, low, close, volume)
「移動平均線を青と赤で」「変化率(%)で複数銘柄を比較して」「CSVで保存して」——
データ分析の前処理まで、すべて日本語で完結します。コードは一行も書いていません。
第3部:自動売買を作る(バックテスト → デモ運用)
いよいよ本命です。
トレードルールをAIに伝えて、バックテスト → 最適化 → デモ口座で実行まで進めます。
なぜMQL5ではなくPythonなのか
MT5の自動売買といえば、通常はMT5組み込みの MQL5 でEAを書きます。
本記事があえて Python + MetaTrader5 を使うのには、理由があります。
Pythonのメリット
- AI連携が容易: Claude / OpenAI 等の公式SDKが揃い、数行で外部AIと連携できる
- エコシステム: 通知(LINE / Telegram)、GUIダッシュボード、可視化、レポート生成など「MT5の外」に広げやすい
一方でデメリットも
- 執行速度: プロセス間通信を挟むぶん、MQL5のEAよりわずかに遅延。ミリ秒を争うスキャルピングはMQL5向き
- ストラテジーテスター非対応: MT5組み込みのティックレベルテスターは使えず、バックテストは自前で組む
- 常時起動: PythonとMT5の両方を起動しておく必要がある
Step 1:トレードルールを決める(ここだけは人間の仕事)
AIはコードを書いてくれますが、どんな戦略で戦うかを決めるのは自分です。
まずは基本の 移動平均線クロス を例にします。
- 銘柄: USDJPY / タイムフレーム: 1時間足
- 買い: 20期間MAが50期間MAを上抜け(ゴールデンクロス)
- 売り: 20期間MAが50期間MAを下抜け(デッドクロス)
- ロット: 0.01 / 決済: 反対シグナルでドテン
このルールは、あくまで学習用のサンプルです。
本記事で示す戦略・パラメータ・バックテスト結果は、「AIを使うとこう作れる」という 手順の説明を目的としたもの であり、利益を保証するものでも、特定の売買を推奨・勧誘するものでもありません。
実運用は、必ずご自身の分析・検証にもとづいた戦略で、自己責任のもと行ってください。
Step 2:AIにコード化してもらう
🧑 指示:
MT5でドル円の自動売買スクリプトを作って。1時間足で、20期間MAと50期間MAのクロス戦略。ゴールデンクロスで0.01ロット買い、デッドクロスで決済して売り。まずはバックテスト用に作って。
✳️ Claude Code:
import MetaTrader5 as mt5
import pandas as pd
mt5.initialize()
rates = mt5.copy_rates_from_pos("USDJPY", mt5.TIMEFRAME_H1, 0, 4400)
df = pd.DataFrame(rates)
df["MA20"] = df["close"].rolling(20).mean()
df["MA50"] = df["close"].rolling(50).mean()
# ゴールデンクロス・デッドクロス判定
df["signal"] = 0
df.loc[(df["MA20"] > df["MA50"]) &
(df["MA20"].shift(1) <= df["MA50"].shift(1)), "signal"] = 1
df.loc[(df["MA20"] < df["MA50"]) &
(df["MA20"].shift(1) >= df["MA50"].shift(1)), "signal"] = -1
生成コードの中身を完全に理解する必要はありません。
ただし、自分の意図したルール通りになっているかは確認しましょう。不明点は「この部分は何をしているの?」と聞けば、日本語で説明してくれます。
Step 3:バックテストで検証する
🧑 指示:
このスクリプトでバックテストして。できるだけ長い期間で。スプレッドも考慮して。
✳️ Claude Code:(約16ヶ月分のH1データ、スプレッド4円/取引を差し引き)
=== バックテスト結果 ===
期間: 2025-03-21 ~ 2026-07-01
取引回数: 174回
勝ち: 61回 / 負け: 113回
勝率: 35.1%
総損益: -741円
プロフィットファクター: 0.99
最大ドローダウン: 16,350円
PF 0.99 で、ほぼトントンです。
ここから、「改善 → バックテスト → 確認」のループをAIと回していきます。
改善①:損切り・利確を追加
🧑 指示: 損切り・利確を追加してバックテストして。複数パターン比較したい。
設定 取引数 勝率 PF 総損益 最大DD
なし 174 35.1% 0.99 -741円 16,350円
SL50/TP100 175 34.3% 1.08 +3,502円 5,598円
SL50/TP150 174 32.2% 1.19 +8,751円 10,741円
SL80/TP160 174 37.4% 1.35 +16,925円 10,922円 ★
SL100/TP100 175 41.7% 1.21 +10,255円 7,695円
リスクリワード2:1の SL80/TP160 が、PF 1.35 で最良でした。
改善②:MA期間を最適化
🧑 指示: SL80/TP160は固定で、MA期間の組み合わせを総当たりで比較して。短期5〜30、長期30〜100。
=== PF上位5 ===
MA(20/60) PF=1.59 損益=+23,076円 DD=9,184円 146回 ★
MA(5/60) PF=1.53 損益=+27,444円 DD=6,354円 227回
MA(10/75) PF=1.50 損益=+21,699円 DD=9,300円 161回
MA(20/60) で PF 1.59。長期側を少し伸ばすだけで改善しました。
改善③:RSIフィルターを追加
🧑 指示: RSIフィルターも追加して。買われすぎ/売られすぎでエントリーしないように。閾値は何パターンか試して。
設定 取引数 勝率 PF 総損益 最大DD
フィルターなし 146 41.1% 1.59 +23,076円 9,184円
RSI<70 / >30 79 41.8% 1.65 +14,945円 3,608円
RSI<60 / >40 47 48.9% 1.77 +11,232円 3,963円 ★
改善結果まとめ
| ステップ | 設定 | PF | 総損益 | 最大DD |
|---|---|---|---|---|
| 初期 | MA(20/50)、SL/TPなし | 0.99 | -741円 | 16,350円 |
| +SL/TP | SL80 / TP160 | 1.35 | +16,925円 | 10,922円 |
| +MA最適化 | MA(20/60) | 1.59 | +23,076円 | 9,184円 |
| +RSIフィルター | RSI<60買い / >40売り | 1.77 | +11,232円 | 3,963円 |
日本語で改善の方針を伝えるだけで、AIがコード修正とバックテストを繰り返してくれる——これがこのアプローチの強みです。
長期データで過剰最適化をチェック
短期間で最適化した設定は、その期間にたまたまフィットしただけ(オーバーフィッティング)かもしれません。
MT5 APIでは最大約8年分のH1データが取れるので、期間を伸ばして検証します。
| ステップ | PF(16ヶ月) | PF(8年) | 総損益(8年) |
|---|---|---|---|
| 初期 | 0.99 | 1.09 | +29,441円 |
| +SL/TP | 1.35 | 1.17 | +46,417円 |
| +MA最適化 | 1.59 | 1.16 | +40,688円 |
| +RSIフィルター | 1.77 | 1.21 | +18,475円 |
16ヶ月で1.77だった値が、8年では1.21に下がりました。
すべて1.0超は維持しているので改善の方向性自体は有効ですが、短期の数字には過剰最適化が含まれていることがわかります。
バックテストの限界
過去の検証結果は、将来を保証しません。過度な最適化は、本番で通用しない戦略を生みます。必ずデモで十分に検証してから実運用へ進んでください。
Step 4:デモ口座で実行する
重要:まずは必ずデモ口座で
自動売買を、いきなりライブ口座(実資金)で動かすのは避けてください。バグ・通信障害・想定外の相場変動でリスクが発生します。まずはデモ口座で十分に確認しましょう。
PythonからMT5に注文を送るには、MT5側で 「アルゴリズム取引」をON(ツールバーのボタンを緑に)しておく必要があります。OFFのままだと、注文が拒否されます。
🧑 指示: 実際にMT5で注文を出せる実行用スクリプトに変換して。1時間足が確定するたびにチェック、ログ出力あり、Ctrl+Cで停止可能にして。
[21:00:01] Bot started - USDJPY MA Cross Strategy
[22:00:03] MA20: 162.645 / MA50: 162.510 — シグナルなし
[23:00:02] MA20: 162.680 / MA50: 162.520 — シグナルなし
…ところが、MAクロス(H1)を一晩(約14時間)動かしても、トレードは1回も発生しませんでした。
1時間足のクロスは、数日〜数週間に1回のイベントだからです。
そこで、もっと短い足で頻繁にシグナルが出る戦略も試します。
追加検証:RSI逆張りスキャルピング(M15)
15分足で「RSI(14)が30割れで買い / 70超えで売り」という、シンプルな逆張りです。1日数回のシグナルが期待できます。
MAクロスと同じ手順(SL/TP → フィルター → 長期検証)で回した結果がこちらです。
| ステップ | 設定 | PF | 取引回数 | 総損益 | 最大DD |
|---|---|---|---|---|---|
| ベース | RSI<30/>70、SL/TPなし | 1.27 | 481回 | +18,160円 | 6,601円 |
| +SL/TP | SL20 / TP20 | 1.05 | 1,075回 | +4,950円 | 7,406円 |
| +MAフィルター | MA(200)トレンド | 1.26 | 330回 | +7,620円 | 1,752円 |
長期(約2年)で見ると、10ヶ月でベストだった MA(200) は PF 0.99 に劣化し、MA(100)(PF 1.09)の方が堅牢でした。ここでも短期最適化の罠が確認できます。
今回は「デモで実際にトレードが出る様子を見たい」ので、あえて取引頻度の高い フィルターなし(SL20/TP20) でデモ運用しました。
デモ4日間の結果
[17:48:20] RSI=3.8 — ★ 買いシグナル(RSI < 30)
>>> 新規Buy: price=161.033 SL=160.833 TP=161.233
[18:06:21] ★ TP到達 +139円
[21:30:26] RSI=72.9 — ★ 売りシグナル(RSI > 70)
>>> 新規Sell: price=161.059 SL=161.259 TP=160.859
| 項目 | 結果 |
|---|---|
| 取引回数 | 20回(約5回/日) |
| 勝敗 | 8勝12敗(勝率40%) |
| 総損益 | -648円 |
バックテスト(PF 1.05)とほぼ整合し、やや負け越しの結果でした。
ですが重要なのは数字よりも、自動売買スクリプトが実際にMT5経由で注文を出し、SL/TPで自動決済される一連の動作を、デモで確認できたことです。

デモ口座の取引履歴。これらの発注・決済は、すべてAIが自動で行ったものです。
24時間動かすには
このスクリプトはターミナル上で動くため、PCを切ると止まります。
24時間の稼働には、VPSやタスクスケジューラでの自動起動が必要です。これらの構築も、Claude Codeに指示できます。
他にもいろいろ試せる
トレードアイデアを日本語で言えれば、それがそのまま戦略になります。
| 戦略 | 指示例 |
|---|---|
| ブレイクアウト | 「直近20本の高値を上抜けたら買い、安値を下抜けたら売り」 |
| ボリンジャーバンド | 「-2σタッチで買い、+2σタッチで売り」 |
| 時間帯フィルター | 「東京時間(9〜15時)だけトレード」 |
| 複数銘柄 | 「ドル円・ユーロドル・ゴールドを同じ戦略で同時に」 |
まとめ
コードを一行も書かずに、Claude Codeへの日本語指示だけで、次を実現しました。
- 環境構築 — Python導入・MT5連携をAIに丸投げ
- 価格取得 — リアルタイム / ローソク足 / チャート / CSV
- 自動売買 — ルール定義 → バックテスト → 最適化(PF 0.99→1.77)→ 長期検証(過剰最適化チェック)→ デモ運用
API × AI × FX/CFD。
MT5とPython APIを提供するOANDAの環境なら、AIコーディングツールと組み合わせるだけで、これだけのことができます。
エンジニアはもちろん、これまでコードを書いてこなかった人でも——アイデアを日本語で伝えるだけで、FX/CFDの自動化に手が届く時代になりました。
免責事項
OANDA証券株式会社
第一種金融商品取引業 関東財務局長(金商)第2137号/商品先物取引業者
加入協会:一般社団法人 金融先物取引業協会/日本証券業協会/日本商品先物取引協会
- 店頭外国為替証拠金取引(FX)、株価指数CFD取引及び商品CFD取引は、元本及び利益が保証されている金融商品ではありません。預託した証拠金の額に比べ大きい金額の取引ができるため、外国為替、株式、株価指数、商品、金利市場等の市場変動により、その損失額が預託された証拠金額を上回る可能性があります。
- 各取引に必要な証拠金は次の通りです。店頭外国為替証拠金取引に関しては、個人口座は取引金額の4%以上、法人口座は、金融先物取引業協会が算出した通貨ペアごとの為替リスク想定比率を取引の額に乗じて得た額と、当社が算出したリスク想定比率を用いた額のどちらか高い額以上(為替リスク想定比率とは、金融商品取引業等に関する内閣府令第117条第27項第1号に規定される定量的計算モデルを用い算出します)、株価指数CFD取引に関しては、個人口座・法人口座いずれも取引金額の10%以上、商品CFD取引に関しては、個人口座・法人口座いずれも取引金額の5%以上の証拠金が必要です。
- 口座管理費及び取引手数料は原則無料です。但し一部取引コースに関しては、取引にあたり手数料が発生することがあります。手数料の詳細については、該当するコースの取引説明書をご覧ください。
- 売付価格と買付価格には差(スプレッド)があり、相場急変動等によりスプレッド幅が拡大し、意図したお取引ができない可能性があります。
- お取引を始めるにあたっては取引説明書及び取引約款を熟読し、取引内容や仕組み、リスク等を十分にご理解いただいた上で、ご自身の判断にてお取引くださるようお願い致します。
- 弊社企業情報は、弊社ホームページに開示しています。
- お客様相談窓口:0120-923-213/日本商品先物取引協会相談センター:03-3664-6243




