株のファクター仮説を検証したいとき、データ取得、バックテスト、可視化って結構面倒だよね。でも、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も混乱することがあるんだ。 「まずシンプルな移動平均クロスでやってみて」「次に買いシグナルのロジックを追加して」みたいに、段階的に機能を追加させる方が、品質の高いコードを生成してくれることが多いよ。