IVYXON
記事一覧に戻る
ワークフロー上級📖 Reference

株のバックテストパイプライン、Claude Codeに丸投げでどこまでいける?

株価APIと財務データを使ったファクターバックテストパイプラインの構築、Claude Codeに分担させるのがコツだよ。

2026年6月1日8分で読めます

株のファクター仮説を検証したいとき、データ取得、バックテスト、可視化って結構面倒だよね。でも、Claude Codeにタスクを分けて投げれば、あっという間にパイプラインが組めるんだ。

一番雑な投げ方

まずはコレ。深く考えずに、やって欲しいことをそのまま投げてみて。

Pythonで株価データと財務データ使ったファクターバックテストパイプライン作って。データ取得、ファクター仮説の検証、結果の可視化まで一通りできるようにして。

これだけでも、まあなんとなく動くような骨格は作ってくれる。でも、もっと具体的な結果が欲しいなら、タスクを分けて投げた方が断然いいよ。

もうちょい具体的に投げるパターン

Claude Codeに任せるタスクを細分化して、個別に投げると精度がグッと上がるんだ。

データ取得に特化して投げる

まず、データがなきゃ始まらないから、データ取得の部分だけを頼んでみよう。

# python_script.py
"""
株価と財務データを取得するPythonスクリプト。
Yahoo Finance API (yfinance) と、財務データAPI (例: FMP API) を想定。
取得したデータはpandas DataFrameで整形してCSVファイルとして保存してね。
APIキーは環境変数から読み込むようにして、ベタ書きはしない。
"""
import yfinance as yf
import pandas as pd
import os

# FMP_API_KEY = os.getenv("FMP_API_KEY") # 仮のAPIキー設定
# FMP_BASE_URL = "https://financialmodelingprep.com/api/v3/" # 仮のAPIエンドポイント

def fetch_stock_data(tickers, start_date, end_date):
    """
    指定されたティッカーの株価データを取得する。
    """
    # ... yfinanceを使った実装 ...

def fetch_financial_data(ticker):
    """
    指定されたティッカーの財務データを取得する。
    """
    # ... FMP APIなどを使った実装 ...

# メイン処理 (例としてダミー)
if __name__ == "__main__":
    # ここに具体的なデータ取得ロジックを実装してね
    print("データ取得スクリプトのひな形を作ったよ!")
    print("yfinanceとFMP APIを使って株価と財務データを取ってくるイメージだね。")
    print("APIキーは環境変数に入れて使ってね。")

fetch_stock_data関数とfetch_financial_data関数を実装して。yfinanceと、FMPみたいな財務APIを使う想定だよ。結果はCSVに保存してね」みたいに指示すると、APIの選定からコードの骨格まで一通り作ってくれるんだ。APIキーの扱いとかもちゃんと配慮してくれるよ。

ファクター検証のロジックを投げる

データが手元にあるなら、次はファクター検証のコアロジックを頼もう。

# backtest_script.py
"""
取得した株価と財務データを使って、特定のファクター(例:低PBR)でバックテストを行うPythonスクリプト。
入力はCSVファイル形式の株価データと財務データ。
出力はパフォーマンス指標(シャープレシオ、最大ドローダウンなど)と、日次リターンのCSVファイル。
ポートフォリオのリバランスは月次で、翌月の初めに実施する想定で組んでね。
"""
import pandas as pd
import numpy as np
# ... バックテストロジックの記述 ...

def run_backtest(stock_data_path, financial_data_path):
    # ... CSVの読み込み ...
    # ... データの前処理 ...
    # ... ファクター計算 (例: PBR) ...
    # ... ポートフォリオ構築 (例: PBR下位X%をロング) ...
    # ... リバランス、リターン計算 ...
    # ... パフォーマンス指標の計算 ...
    # ... 結果の保存 ...

if __name__ == "__main__":
    # ここにバックテストの実行ロジックを実装してね
    print("バックテストスクリプトのひな形を作ったよ!")
    print("CSVからデータを読み込んで、低PBRファクターで月次リバランスのバックテストを実行する想定だね。")

「このCSVファイル使って、低PBRファクターでバックテストするPythonコードを書いて。リバランスは月次で、シャープレシオとか最大ドローダウンも出してね」って投げると、データ読み込みからパフォーマンス計算まで、一連のロジックを組んでくれる。

結果の可視化を投げる

バックテスト結果は、グラフで見ないと分かりにくいよね。

# visualize_script.py
"""
バックテスト結果のCSVファイル(日次リターンなど)を読み込み、
パフォーマンス曲線、最大ドローダウン曲線、月次リターン分布をmatplotlibで描画するPythonスクリプト。
生成したグラフはPNGファイルとして保存してね。
"""
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def visualize_results(results_csv_path, output_dir="plots"):
    # ... CSVの読み込み ...
    # ... パフォーマンス曲線描画 ...
    # ... ドローダウン曲線描画 ...
    # ... 月次リターン分布描画 ...
    # ... グラフの保存 ...

if __name__ == "__main__":
    # ここに可視化の実行ロジックを実装してね
    print("可視化スクリプトのひな形を作ったよ!")
    print("バックテスト結果CSVからパフォーマンス曲線、ドローダウン、月次リターン分布を生成してPNGで保存する想定だね。")

「バックテスト結果のCSVファイルあるから、それを読み込んで、パフォーマンス曲線とドローダウン曲線をmatplotlibで描画して。PNGで保存しといてね」みたいに指示すれば、グラフ生成スクリプトをサクッと作ってくれるよ。

実践例 / 実録

俺たちのチームでは、実際に「JPα検証ラボ」って呼んでるバックテストプラットフォームで、まさにこのやり方でClaude Codeを使い倒してるんだ。

まず、基盤となるデータ取得モジュールは、Claude Codeに「yfinanceとかFMP APIみたいなの使って、日本の主要銘柄の株価と財務データを毎日取得して。CSVで保存してくれ」って投げたのが始まりだったね。最初はAPIキーの扱いやエラーハンドリングがちょっと甘かったけど、「環境変数使って」「エラーログもちゃんと出して」って修正指示したら、かなり堅牢なスクリプトを組んでくれた。make fetch-dataみたいなコマンドで簡単に実行できるようにしてくれて、マジ助かった。

次に、ファクター検証フェーズ。「今度は低PBRファクターのバックテストをやってくれ」ってデータ取得モジュールが吐き出したCSVを食わせて指示したんだ。すると、pandasを駆使してデータ整形、PBR計算、ポートフォリオ構築、月次リバランス、そしてシャープレシオや最大ドローダウンといった評価指標の算出まで、一連のロジックを書き上げてくれたよ。これらをbacktest_pbr.pyみたいなスクリプトに切り出して、個別に実行できるようにしたんだ。

そして可視化。バックテスト結果のCSVを渡して、「パフォーマンス曲線、ドローダウン曲線、月次リターン分布の3つのグラフを作ってPNGで保存してくれ」って頼んだら、ちゃんとmatplotlibとseabornを使った綺麗なグラフを生成してくれた。

こうやって、データ取得担当、バックテスト担当、可視化担当みたいに、Claude Codeをタスクごとに専門家として扱ってる感じだね。ひとつの統合エージェントに各タスクを結線するイメージで、全体のフローはシンプルにしつつ、個別のタスクはClaude Codeに任せるっていうのが俺たちのやり方だよ。

つまずきポイント

APIキーの管理が雑になりがち

Claude Codeはコードを生成してくれるけど、APIキーをコードにベタ書きしちゃうことがある。これはセキュリティ的にNGだから、必ず.envファイルや環境変数を使うように指示してあげて。

APIキーはコードに直接書かずに、Pythonの`os.getenv()`を使って環境変数から読み込むようにしてね。

こんな感じで一言添えるだけで、ちゃんと対応してくれるよ。

データフォーマットの齟齬

ステップごとにClaude Codeに頼むと、前のステップで出力されたデータのフォーマットと、次のステップで期待するフォーマットが微妙にズレることがある。 「出力はCSVで、カラムはDate, Ticker, Close, PBRにしてね」みたいに、事前に具体的なデータスキーマを指示しとくとスムーズだよ。

バックテストロジックは一気に頼まない

バックテストのロジックは、条件分岐や時系列処理が複雑になりやすい。一度に全部「複雑なストラテジーでバックテストして」と頼むと、Claude Codeも混乱することがあるんだ。 「まずシンプルな移動平均クロスでやってみて」「次に買いシグナルのロジックを追加して」みたいに、段階的に機能を追加させる方が、品質の高いコードを生成してくれることが多いよ。