ホーム » MT5の使い方 » MT5自動売買をAIで作る|EA作成・バックテスト・デモ実行まで完全ガイド

MT5自動売買をAIで作る|EA作成・バックテスト・デモ実行まで完全ガイド


MT5 x API x AI シリーズ #3|自動売買EA編

この記事のゴール

この記事を終えると、以下のことができるようになります:

  • 自分のトレードルールをAIに伝えて、自動売買スクリプトを作成できる
  • 過去のデータでバックテストを行い、戦略の成績を検証できる
  • 検証した戦略をデモ口座で実行し、動作を確認できる

すべてClaude Codeへの日本語指示だけで進めます。前回の価格取得編の環境がセットアップ済みであることを前提とします。


 

自動売買の全体像

自動売買を始めるまでの流れは、以下の4ステップです。

Step 1
ルールを決める
Step 2
AIにコード化してもらう
Step 3
バックテストで検証
Step 4
デモ口座で実行

一番大切なのはStep 1の「ルールを決める」です。AIはコードを書いてくれますが、どんな戦略でトレードするかを決めるのは自分自身です。


 

なぜMQL5ではなくPythonを使うのか

MT5の自動売買といえば、MT5に組み込みの言語であるMQL5でEA(エキスパートアドバイザー)を作るのが一般的です。本シリーズではMQL5ではなくPythonを使ってMT5を外部から操作するアプローチを採用しています。その理由をご説明します。

MQL5でもAI連携はできる

MQL5にもWebRequest()という関数があり、HTTP通信を行うことは可能です。つまり、MQL5からAIのAPIを呼び出すこと自体は技術的にはできます。

ただし、JSONデータの解析や各AIサービスとの連携を自力で実装する必要があり、実用的なコードを書くにはかなりの手間がかかります。

Pythonを選ぶ理由

Pythonには、AI各社が提供する公式ライブラリ(SDK)が揃っています。たとえばClaude APIやOpenAI APIとの連携は、ライブラリをインストールして数行のコードを書くだけで完了します。

また、本シリーズでは今後、以下のようなツールを構築していきます:

  • GUIトレードダッシュボード
  • LINE / Telegram への通知
  • モバイルアプリとの連携
  • AIによる相場分析
  • データの可視化・レポート生成

これらはすべてPythonのエコシステム(豊富なライブラリや外部サービスとの連携機能)が前提となっており、MQL5だけで実現するのは現実的ではありません。MT5の「外」に広がるツールを作るのが本シリーズの目的であるため、Pythonが最適な選択肢となります。

Pythonを使うデメリット

一方で、Pythonを使うアプローチには以下のデメリットもあります:

注文の実行速度
PythonからMT5へはプロセス間通信を経由するため、MT5内部で直接動くMQL5のEAと比べるとわずかにレイテンシー(遅延)が発生します。ミリ秒単位の執行速度が求められるスキャルピング等の戦略には、MQL5の方が適しています。

MT5のストラテジーテスターが使えない
MQL5のEAはMT5に組み込まれた高機能なストラテジーテスター(ティックレベルのバックテスト、最適化機能など)を利用できますが、Pythonスクリプトではこの機能を直接使うことができません。Pythonでのバックテストは自前で構築する形になります。

常時起動の要件
PythonスクリプトとMT5の両方が起動している必要があります。MQL5のEAであればMT5だけで完結します。

まとめ:使い分けの考え方

MQL5が向いているケース — 超高速な注文執行が必要な戦略、MT5のストラテジーテスターをフル活用したい場合

Pythonが向いているケース — AIとの連携、外部サービスとの統合、GUIやモバイルアプリの構築、データ分析・可視化など、MT5の外に広がるツールを作りたい場合


 

Step 1:トレードルールを決める

まずは、シンプルなルールから始めましょう。この記事では、テクニカル分析の基本である移動平均線のクロス戦略を例にします。

今回のトレードルール:

  • 対象銘柄:ドル円(USDJPY)
  • タイムフレーム:1時間足
  • 買いエントリー:20期間移動平均線が50期間移動平均線を上抜けたとき(ゴールデンクロス)
  • 売りエントリー:20期間移動平均線が50期間移動平均線を下抜けたとき(デッドクロス)
  • ロット数:0.01ロット(最小単位)
  • 決済:反対のシグナルが出たら決済してドテン

移動平均線のクロスとは?

移動平均線は、一定期間の終値の平均値をつないだ線です。短い期間の移動平均線(ここでは20期間)が長い期間の移動平均線(50期間)を下から上に抜けることをゴールデンクロスと呼び、上昇トレンドの始まりとされることがあります。逆に上から下に抜けることをデッドクロスと呼びます。

このルールはあくまで学習用の例です。実際のトレードでは、ご自身の分析や検証に基づいた戦略をお使いください。


 

Step 2:AIにコード化してもらう

ルールが決まったら、そのままClaude Codeに伝えます。

Claude Code — MT5_Project
M
MT5でドル円の自動売買スクリプトを作って。1時間足で、20期間MAと50期間MAのクロス戦略。ゴールデンクロスで0.01ロット買い、デッドクロスで決済して売り。まずはバックテスト用に作って。
MA クロス戦略のバックテスト用スクリプトを作成します。
ma_cross_bot.pyPython
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
✓ MA クロス戦略のバックテスト用スクリプトを生成しました。
Reply to Claude…

生成されたコードの中身を理解する必要はある?

すべてを理解する必要はありませんが、AIが生成したコードが自分の意図したルール通りになっているかを確認することは大切です。不明な部分があれば、Claude Codeに「この部分は何をしているの?」と聞けば日本語で説明してくれます。


 

Step 3:バックテストで検証する

コードができたら、過去のデータで戦略の成績を検証します。このバックテストは、実際のお金を使う前に、この戦略が過去どのような結果を出していたのかを確認する重要なステップです。

バックテストを実行する

Claude Code — MT5_Project
M
このスクリプトでバックテストして。できるだけ長い期間で。スプレッドも考慮して。
MT5から取得可能な約16ヶ月分のH1データでバックテストを実行します。スプレッドコスト(4円/取引)も差し引きます。
python ma_cross_bot.py
スプレッド: 4ポイント (0.004円) → 1取引あたり 4.0円のコスト

=== バックテスト結果 ===
期間: 2025-03-21 ~ 2026-07-01
取引回数: 174回
勝ち: 61回 / 負け: 113回
勝率: 35.1%
総損益: -741円
プロフィットファクター: 0.99
最大ドローダウン: 16,350円
平均利益: +989円 / 平均損失: -540円
✓ バックテストが完了しました。PF 0.99でほぼトントン、わずかにマイナスです。
Reply to Claude…

結果をチャートで可視化する

Claude Code — MT5_Project
M
バックテストの結果をチャートで可視化して。売買ポイントのマークと資産推移グラフを作って。
チャートを生成します。
python generate_charts.py
Saved: chart_signals.png
Saved: chart_equity_curve.png
売買シグナルチャート — ローソク足に移動平均線とエントリー/決済ポイントの矢印を重ねた図 資産推移グラフ(エクイティカーブ) — バックテスト期間を通じた損益の推移
✓ 売買シグナルチャートと資産推移グラフを生成しました。
Reply to Claude…

数値やチャートを見ただけでは判断が難しい場合は、Claude Codeに「この結果を分析して、戦略の強みと弱みを教えて」と依頼すれば、各指標の解説と改善提案を出してくれます。

バックテストの主な指標

勝率 — 全取引のうち利益で終わった取引の割合

プロフィットファクター — 総利益 ÷ 総損失。1.0以上なら利益が出ている。一般に1.5以上が望ましいとされる

最大ドローダウン — 資産のピークからの最大下落幅。リスクの大きさの目安

平均利益/平均損失 — 勝ちトレードの平均利益と負けトレードの平均損失の比率。リスクリワード比とも呼ばれる


 

ルールを改善してみる

PF 0.99ではほぼトントンです。ここから、AIとの対話を繰り返しながら戦略を改善していきます。ルールの変更 → バックテスト → 結果確認のサイクルを回すのが基本的な流れです。

改善①:損切り・利確を追加する

まず、損切り(ストップロス)と利確(テイクプロフィット)をpips単位で指定して追加します。複数パターンを比較してもらいましょう。

Claude Code — MT5_Project
M
損切り・利確を追加してバックテストして。複数パターン比較したい。
SL/TPの組み合わせを複数パターンで比較しました。
python backtest_sltp.py
設定 取引数 勝率 PF 総損益 最大DD
─────────────────────────────────────────────────────
なし 174 35.1% 0.99 -741円 16,350円
SL30/TP60 175 33.7% 0.98 -520円 4,080円
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円
SL80/TP160(損切り80pips、利確160pips)がPF 1.35で最も好成績です。利確を損切りの2倍にするリスクリワード2:1の設定が効いています。
✓ SL80/TP160でPFが0.99→1.35に改善しました。
Reply to Claude…

改善②:MA期間を最適化する

次に、移動平均線の期間(20/50)が本当に最適なのか、他の組み合わせも試してみます。

Claude Code — MT5_Project
M
SL80/TP160は固定で、MA期間の組み合わせを総当たりで比較して。短期5〜30、長期30〜100。
30通りの組み合わせをテストしました。PF上位5つを抜粋します。
python backtest_ma_opt.py
=== 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(5/40) PF=1.45 損益=+29,120円 DD=6,147円 286回
MA(10/40) PF=1.44 損益=+25,813円 DD=7,711円 240回
MA(20/60)がPF 1.59で最高。元の20/50から長期側を少し伸ばしただけで大きく改善しました。
✓ MA(20/60)でPFが1.35→1.59に改善しました。
Reply to Claude…

改善③:RSIフィルターを追加する

最後に、RSI(相対力指数)をフィルターとして追加します。買われすぎ・売られすぎの状態でエントリーしないようにすることで、不利なタイミングでの取引を減らします。

Claude Code — MT5_Project
M
RSIフィルターも追加して。RSIが高すぎるときは買わない、低すぎるときは売らない、みたいな感じで。閾値は何パターンか試して。
MA(20/60) + SL80/TP160をベースに、RSIフィルターの閾値を比較しました。
python backtest_rsi.py
買い: RSI < X のときのみ / 売り: RSI > Y のときのみ

設定 取引数 勝率 PF 総損益 最大DD
─────────────────────────────────────────────────────
フィルターなし 146 41.1% 1.59 +23,076円 9,184円
RSI<70 / >30 79 41.8% 1.65 +14,945円 3,608円
RSI<65 / >35 61 42.6% 1.49 +9,369円 4,769円
RSI<60 / >40 47 48.9% 1.77 +11,232円 3,963円
RSI<55 / >45 28 39.3% 1.28 +3,283円 3,224円
RSI<60/>40がPF 1.77、最大DD 3,963円で最高のバランスです。取引回数は47回に減りますが、勝率が48.9%まで上がっています。
✓ RSIフィルター追加でPFが1.59→1.77に、最大DDが9,184円→3,963円に改善しました。
Reply to Claude…

改善結果のまとめ

3段階の改善で、戦略のパフォーマンスがどう変化したかを振り返ります。

ステップ 設定 PF 総損益 最大DD
初期MA(20/50)、SL/TPなし0.99-741円16,350円
+SL/TPSL80pips / TP160pips追加1.35+16,925円10,922円
+MA最適化MA(20/60)に変更1.59+23,076円9,184円
+RSIフィルターRSI<60で買い、RSI>40で売り1.77+11,232円3,963円

PFは0.99から1.77へ、最大ドローダウンは16,350円から3,963円へと改善しました。日本語で改善の方向性を伝えるだけで、AIがコードの修正とバックテストを繰り返してくれるのがこのアプローチの強みです。

長期データで検証する

ただし、短い期間のデータだけで最適化すると、その期間にたまたまフィットしただけの「過剰最適化(オーバーフィッティング)」になるリスクがあります。MT5のAPIでは最大約8年分のH1データを取得できるので、期間を伸ばして検証してみます。

ステップ PF(16ヶ月) PF(8年) 総損益(8年)
初期0.991.09+29,441円
+SL/TP1.351.17+46,417円
+MA最適化1.591.16+40,688円
+RSIフィルター1.771.21+18,475円

期間を伸ばすとPFの数値は控えめになりますが、すべてのステップで1.0を超えており、改善の方向性自体は有効であることが確認できました。16ヶ月で1.77だった値が8年では1.21になるのは、過剰最適化の影響が含まれていることを示しています。こうした長期検証を行うことで、より現実に近い評価ができます。

バックテストの限界について

バックテストは過去のデータに基づく検証であり、将来も同じ結果が出ることを保証するものではありません。過去のデータに過度に最適化すると(オーバーフィッティング)、実際の相場では通用しない戦略になることもあります。バックテスト結果はあくまで参考として、十分なデモ取引での検証を行ってから実運用に移すことをお勧めします。

ティックデータでより精密に検証する

ここまでのバックテストでは1時間足のローソク足データを使用しました。1時間足では、その1時間の中で「高値と安値のどちらに先に到達したか」が分かりません。つまり、SL/TP両方に触れうる場面で、どちらが先に約定したかの判定が不正確になる可能性があります。

この問題を解決するのがティックデータ(すべての価格変動の記録)です。MT5のAPIにはティックデータを取得する機能があり、Claude Codeに「ティックデータを使ってバックテストして」と指示するだけで利用できます。

実際にティックデータ(約1,520万本)と1時間足でバックテスト結果を比較したところ、今回のSL80pips/TP160pipsの設定では結果は完全に一致しました。値幅が大きいSL/TP設定では、同じ足の中で両方に触れるケースがほぼ発生しないためです。一方、SL/TPを10〜20pips程度に狭くする場合は、ティックデータでの検証が重要になります。

なお、MT5で取得できるティックデータの期間はサーバーによって限られる場合があります(今回は約5ヶ月分)。OANDAでは過去のティックデータをダウンロードしてMT5にインポートすることもできます。詳しくは以下の記事をご参照ください:
OANDA Lab — MT5のティックデータの取得方法


 

Step 4:デモ口座で実行する

バックテストで一定の結果が確認できたら、デモ口座で実際に動かしてみます。

MT5の「アルゴリズム取引」をONにする

PythonからMT5に注文を送るには、MT5側でアルゴリズム取引を許可しておく必要があります。MT5のツールバーにある「アルゴリズム取引」ボタンをクリックして、有効(緑色の再生アイコン)にしてください。

MT5のツールバーにある「アルゴリズム取引」ボタン。赤枠で示されている

この設定がOFFのままだと、Pythonから注文リクエストを送ってもMT5側で拒否されます。

重要:まずはデモ口座で

自動売買スクリプトをいきなりライブ口座(実際の資金)で動かすことは避けてください。コードのバグ、ネットワーク障害、想定外の相場変動など、予期せぬ事態でリスクが発生する可能性があります。必ずデモ口座で十分に動作確認を行ってください。

バックテスト用のスクリプトを実行用に変換するには、「実際にMT5で注文を出せる実行用スクリプトに変換して。1時間足が確定するたびにチェック、ログ出力あり、Ctrl+Cで停止可能にして」と指示します。変換が完了したら、そのまま実行できます。

デモ口座で動かす

Claude Code — MT5_Project
M
このスクリプトを実行して。
スクリプトを起動します。
python ma_cross_bot.py
[21:00:01] Bot started – USDJPY MA Cross Strategy
[21:00:01] 次のチェック: 22:00
[22:00:03] MA20: 162.645 / MA50: 162.510 — シグナルなし
[22:00:03] 次のチェック: 23:00
[23:00:02] MA20: 162.680 / MA50: 162.520 — シグナルなし
✓ 自動売買スクリプトを起動しました。1時間足が確定するたびにシグナルをチェックしています。
Reply to Claude…

スクリプトが起動すると、1時間足が確定するたびに最新のデータをチェックし、シグナルが発生した場合には自動的に注文を出します。注文が約定すると、MT5の「取引」タブにポジションが表示されるので、そちらでも確認できます。

一晩動かした結果

実際にこの戦略をデモ口座で一晩(約14時間)稼働させてみたところ、トレードは1回も発生しませんでした。1時間足のゴールデンクロス/デッドクロスは数日〜数週間に1回程度のイベントであるため、「自動売買が実際に注文を出す」体験をすぐに得るのは難しい状況です。

そこで、もっと短い時間軸で頻繁にトレードが発生する戦略も試してみることにしました。


 

短期戦略を試す — RSI逆張りスキャルピング

今度はRSI逆張りを15分足(M15)で試します。RSIが30を下回ったら「売られすぎ」と判断して買い、70を超えたら「買われすぎ」と判断して売る、というシンプルなルールです。15分足であれば1日に数回のシグナルが期待できます。

RSI逆張りスキャルピングのルール:

  • 対象銘柄:ドル円(USDJPY)
  • タイムフレーム:15分足(M15)
  • 買いエントリー:RSI(14) が 30 を下回ったとき
  • 売りエントリー:RSI(14) が 70 を超えたとき
  • 決済:反対のシグナルが出たらドテン

MAクロス戦略と同じ手順(SL/TP追加 → フィルター → 長期検証)で改善していきます。

バックテストと改善

Claude Code — MT5_Project
M
RSI逆張りをM15でバックテストして。SL/TP比較とMAフィルターも同じようにやって。
約10ヶ月分のM15データでバックテストを実行します。
python backtest_rsi_step.py
=== Step 1: ベース RSI(14) <30/>70(SL/TPなし) ===
取引回数: 481回 (1.6回/日)
勝率: 68.2% PF: 1.27 損益: +18,160円

=== Step 2: SL/TP追加 比較 ===
設定 取引数 勝率 PF 総損益
─────────────────────────────────────────
SL/TPなし 481 68.2% 1.27 +18,160円
SL10/TP10 2,031 51.0% 0.92 -8,286円
SL15/TP15 1,425 51.1% 0.96 -3,900円
SL20/TP20 1,075 52.7% 1.05 +4,950円
SL20/TP40 768 32.7% 0.93 -7,608円
SL30/TP30 696 50.6% 0.98 -1,776円

=== Step 3: MAトレンドフィルター追加 ===
RSI(14) <30/>70 + SL20/TP20 に対してフィルター比較
設定 取引数 勝率 PF 総損益 最大DD
─────────────────────────────────────────────────────
フィルターなし 1,075 52.7% 1.05 +4,950円 7,406円
+MA(50) 106 58.5% 1.33 +2,964円 1,248円
+MA(100) 219 55.3% 1.16 +3,286円 2,178円
+MA(200) 330 57.3% 1.26 +7,620円 1,752円
SL20/TP20とMA(200)フィルターの組み合わせが、PF 1.26・最大DD 1,752円で最良です。MAフィルターは「上昇トレンド中のみ買い、下降トレンド中のみ売り」という条件を加えることで、逆張りの精度を上げています。
✓ ベースPF 1.27 → SL/TP追加で1.05 → MAフィルターで1.26に改善しました。
Reply to Claude…

改善結果のまとめ

ステップ 設定 PF 取引回数 総損益 最大DD
ベースRSI(14)<30/>70、SL/TPなし1.27481回+18,160円6,601円
+SL/TPSL20pips / TP20pips追加1.051,075回+4,950円7,406円
+MAフィルターMA(200)トレンドフィルター追加1.26330回+7,620円1,752円

SL/TPの追加でPFが一時的に下がっていますが、これはリスク管理として1取引あたりの損失を限定する意味があります。MAフィルターを追加するとPFはさらに改善しますが、取引回数が1,075回から219〜330回に大きく減少します。今回はデモ口座で実際にトレードが発生する様子を確認したいので、あえて取引頻度の高いフィルターなし(SL20/TP20のみ)の設定を採用します。

長期データで検証する

MAクロスのときと同様に、長期データで過剰最適化のチェックを行います。

Claude Code — MT5_Project
M
長期データでも検証して。期間を伸ばして。
約2年分(50,000本)のM15データで各ステップを検証します。
python backtest_rsi_long.py
=== 長期検証(約2年分) ===
設定 取引数 回/日 勝率 PF 総損益
─────────────────────────────────────────────────────
フィルターなし 3,608 4.9 50.0% 0.95 -18,040円
+MA(50) 308 0.4 55.5% 1.19 +5,260円
+MA(100) 680 0.9 53.4% 1.09 +5,800円
+MA(200) 1,010 1.4 51.1% 0.99 -650円
興味深い結果が出ました。10ヶ月データでベストだったMA(200)は、2年に伸ばすとPF 0.99に低下し、ほぼ無効化しています。一方、MA(100)はPF 1.09を維持しており、より堅牢な設定と言えます。
✓ MA(200)は過剰最適化の兆候あり。MA(100)がより安定しています。
Reply to Claude…
設定 PF(10ヶ月) PF(2年) 総損益(2年)
フィルターなし1.050.95-18,040円
+MA(50)1.331.19+5,260円
+MA(100)1.161.09+5,800円
+MA(200)1.260.99-650円

MAクロス戦略のときと同じく、短期間で最良だった設定が長期では劣化するパターンが確認できました。フィルターなしの設定は長期PF 0.95とやや厳しい結果ですが、1日約4.9回のトレード頻度があり、デモでの動作確認には最適です。実運用に向けてはMA(100)フィルター(長期PF 1.09)など、さらなる検証を重ねるのがよいでしょう。

デモ口座で実行する

RSI(14)<30/>70 + SL20/TP20をデモ口座で実際に動かしてみました。

Claude Code — MT5_Project
M
デモ口座で動かして。
RSIスキャルピングのフォワードテストを起動します。
python rsi_scalp_bot.py
[10:24:36] RSIスキャルピング フォワードテスト開始
[10:24:36] 口座: OANDA-Japan MT5 Demo
[10:24:36] 設定: RSI(14) 買い<30 売り>70 / SL20 TP20 / M15
[10:24:36] RSI=56.1 Bid=162.565 — 条件なし

[17:48:20] RSI=3.8 — ★ 買いシグナル(RSI < 30)
[17:48:20] >>> 新規Buy: price=161.033 SL=160.833 TP=161.233
[18:05:21] RSI=3.4 Bid=161.172 ポジション=[Buy P&L=+139円]
[18:06:21] RSI=3.4 Bid=161.240 ポジション=[なし] ★ TP到達

[21:30:26] RSI=72.9 — ★ 売りシグナル(RSI > 70)
[21:30:26] >>> 新規Sell: price=161.059 SL=161.259 TP=160.859
✓ フォワードテストを起動しました。15分足ごとにシグナルをチェックしています。
Reply to Claude…

4日間デモ口座で稼働させた結果がこちらです。

# 日時 方向 価格 結果 損益
17/2 09:21Buy162.548TP+16円
27/2 13:00Buy162.461SL-165円
37/2 15:02Buy162.263SL-137円
47/2 15:47Buy162.058TP+23円
57/2 16:00Buy161.863SL-82円
67/2 16:15Buy161.642SL-137円
77/2 16:44Buy161.442SL-194円
87/2 17:06Buy161.234SL-54円
97/2 17:48Buy161.033TP+139円
107/2 18:07Buy161.224TP+172円
117/2 19:23Buy161.426TP+182円
127/2 21:30Sell161.059TP+171円
137/3 04:15Sell161.080SL-177円
147/3 08:45Sell161.343TP+164円
157/3 12:45Buy161.190SL-176円
167/3 14:30Buy161.060SL-52円
177/3 15:45Buy160.741TP+192円
187/3 16:38Buy160.977SL-161円
197/3 19:45Sell161.131SL-189円
207/4 00:05Sell161.336SL-183円

フォワードテスト結果(4日間):

  • 取引回数:20回(1日あたり約5回)
  • 勝敗:8勝12敗(勝率 40%)
  • 総損益:-648円

バックテスト(PF 1.05)とほぼ整合する結果で、やや負け越しとなりました。MAクロス戦略では一晩ゼロだったトレードが、15分足のRSI逆張りでは4日間で20回発生しており、自動売買スクリプトが実際にMT5を通じて注文を出し、SL/TPで自動決済される一連の動作を確認できました。

もちろん、4日間・20回の結果だけで戦略の良し悪しは判断できません。バックテストの長期検証でも確認した通り、フィルターなしの設定は長期的にはやや厳しい結果でした。実運用に向けてはMAフィルターの追加や、さらに別の戦略の検討など、継続的な検証が必要です。


 

もっと試してみたい方へ

移動平均線のクロス以外にも、さまざまな戦略をAIに実装してもらうことができます。以下は指示の例です。

戦略 Claude Codeへの指示例
ブレイクアウト「直近20本の高値を上抜けたら買い、安値を下抜けたら売り」
RSI逆張り「RSIが30以下になったら買い、70以上になったら売り。損切り30pips」
ボリンジャーバンド「ボリンジャーバンドの-2σにタッチしたら買い、+2σにタッチしたら売り」
時間帯フィルター「東京時間(9時〜15時)だけトレードするように制限して」
複数銘柄「ドル円だけでなくユーロドルとゴールドも同じ戦略で同時に動かして」

自分のトレードアイデアを日本語で表現できれば、それがそのまま自動売買の戦略になります。


 

まとめ

この記事では、以下のことを行いました:

  1. シンプルなトレードルール(移動平均線クロス戦略)を定義した
  2. Claude Codeに指示してルールをコード化してもらった
  3. スプレッドコストを考慮したバックテストを実行し、結果をチャートで可視化した
  4. SL/TPの追加、MA期間の最適化、RSIフィルターの追加で、PFを0.99→1.77に改善した
  5. 8年分のデータで長期検証を行い、過剰最適化のリスクを確認した
  6. ティックデータと1時間足の精度差を比較検証した
  7. 検証した戦略をデモ口座で実行した — MAクロス(H1)は売買頻度が低いため、RSI逆張りスキャルピング(M15)も追加で検証し、実際にデモ口座でのトレード実行を確認した

コードは一行も書いていません。トレードルールを日本語で伝え、「こう改善して」と指示するだけで、バックテスト・最適化・検証・実行までを完了しました。


 

シリーズ記事一覧

#0 概要編
MT5 × API × AI — シリーズ概要

シリーズの全体像と、AIコーディングツールでMT5を操作するアプローチの紹介

#1 環境構築編
MT5 × AI環境を30分で構築する

Python・Claude Codeのインストールから、MT5との接続確認まで

#2 価格取得編
AIに話すだけで価格データを取得・可視化する

リアルタイム価格の取得、チャート自動生成、CSV出力まで

 
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。

この記事をシェアする