【FX自動売買開発ログ #2】Claude Codeに投げてみたら、拍子抜けするほどあっさり動いた話

前回のおさらい

前回、Instagramで見かけた「AIに任せて月50万ドル」という投稿をきっかけに、AIを判断のフィルターとして使うルールベースの自動売買システムを作ってみることにしました。①データ層 → ②判断層(複数理論) → ③統合スコア層 → ④リスク管理層、という4層構成で、まずは①のバックテスト基盤から着手する予定でした。

今回はその第一歩、STEP1(データ取得+バックテスト環境の基盤構築)を実際にClaude Codeに投げてみた記録です。

最初のつまずきは「コードを書く前」だった

STEP1のプロンプトを用意して、いざClaude Codeに貼り付け……る前に、地味なところで止まりました。

作業ディレクトリの問題です。自分は普段、研究室の試薬管理Webアプリ「LabAtlas」(Next.js/Supabase)を開発しているプロジェクトフォルダで作業することが多く、何も考えずにそこでClaude Codeを起動してしまいました。当然ながらClaude Codeの方から「これは今開いているLabAtlas(試薬管理アプリ)とは全く別プロジェクトですよね?どこに新規作成しますか?」と確認が入りました。

言われてみればその通りで、慌てて新しい独立ディレクトリ(FxAutoTrader)を切り直すことに。プロンプト側にも「まず新規ディレクトリでプロジェクトを作り」とちゃんと書いていたのに、自分がそれを守っていなかったという初歩的なミスです。AIに設計をきっちり書かせておいても、人間側の環境準備が雑だと台無しになる、という地味な教訓でした。

STEP1の中身(おさらい)

投げたプロンプトの要点は以下の通りです。

  • Python(pandas, numpy, backtesting系)がメイン、将来Node.jsのWeb UIを足せる構成
  • yfinanceなど無料ソースでUSD/JPYの日足・4時間足・1時間足を取得しCSV保存
  • SMA/EMA/RSI/MACD/ATRの基本指標をpandasベースで実装
  • 移動平均クロスの単純ルールでバックテストできる基盤(勝率・期待値・最大DD・シャープレシオを出力)
  • 発注機能はまだ作らない、戦略を差し替えやすい設計にする

実際の発注はSTEP5まで手をつけない、という線引きは今回も崩さず進めました。

Claude Codeの動き、思ったより一発で通った

ディレクトリを切り直した後は、正直拍子抜けするくらいスムーズでした。

  1. ディレクトリを新規作成し、STEP1のファイル一式(10個)を生成
  2. .gitignoreを追加し、Python仮想環境をセットアップ
  3. yfinanceでUSD/JPYのデータ取得を実行 → 成功
  4. CSVの中身を目視確認
  5. SMAクロス戦略でバックテストを実行

途中、5年分の日足データ(1301行)がまるごと取れてしまい、「直近1年だけで検証したい」という要望が後から出てきたので、日付フィルタのオプションを追加してもらう一手間はありました。ただそれ以外は大きなエラー修正のやり取りもなく、指示したディレクトリ構成(data/ strategies/ backtest/ utils/)通りに、戦略クラスを継承すれば差し替えられる設計まで含めてほぼ一発で仕上がってきました。

バックテスト結果は、予想通りボロボロ

直近1年(259本)のデータで、SMAクロス(20/50)の単純戦略を回した結果がこちらです。

  • トータルリターン: -3.96%
  • トレード数: 5、勝率: 20%
  • 最大ドローダウン: -9.55%
  • シャープレシオ: -0.54

見事に負けています。ただこれは想定通りというか、むしろ想定通りであってほしい結果でした。今回の目的は「儲かる戦略を作る」ことではなく、「基盤が正しく動くこと」の確認だったので、単純なMAクロスがボロ負けするのはむしろ健全な反応です。ここでいきなり好成績が出ていたら、逆にルックアヘッドバイアス(未来の情報を使ってしまう設計ミス)を疑うべき場面でした。

実際、その対策も最初からコードに入れてもらっています。シグナルが出たバーではなく、その翌バーでポジションを執行する設計にしているので、「終値を見てから同じ足で即エントリー」という反則技は起きない作りです。地味ですが、ここを最初にちゃんと入れてもらえたのは良かった点です。

できあがった基盤

C:\Users\ndmc3\Documents\FxAutoTrader ├── data/ usdjpy_1d.csv(5年)、usdjpy_1h.csv / usdjpy_4h.csv(730日) ├── strategies/ base.py(差し替え可能な抽象クラス)、sma_cross.py(サンプル戦略) ├── backtest/ engine.py(勝率・期待値・最大DD・シャープレシオ、グラフ出力)、run_backtest.py(CLI) ├── utils/ data_fetcher.py(yfinance取得)、indicators.py(SMA/EMA/RSI/MACD/ATR) └── requirements.txt

CLIから通貨ペアと期間を指定して、データ取得からバックテストまで一通り回せる状態になりました。STEP2以降で理論判定モジュールや戦略を追加するときも、strategies/base.pyのStrategyクラスを継承するだけで済む作りにしてもらっています。

次回予告

次回はSTEP2、複数の理論的観点(ダウ理論・プライスアクションなど)をAI(Claude API)に個別判定させる層を作っていきます。「理論ごとに独立した判定を出させる」という設計が、実際にどこまで機能するAI出力になるのか、期待半分・不安半分のまま進めます。

※本シリーズは個人の技術検証・学習を目的とした開発記録であり、特定の投資手法や金融商品を推奨するものではありません。自動売買には元本割れのリスクがあり、掲載する内容を参考にした取引の結果について一切の責任を負いかねます。投資判断はご自身の責任で行ってください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です