backtest について
backtestは、指定された戦略、銘柄、時間足に基づきVectorBTのバックテストスクリプトを作成するスキルです。クオンツ取引の調査向けに、テンプレート、ベンチマーク比較、チャート、取引データ出力、平易なレポートを定めています。
主な機能
- 01戦略テンプレートからPythonスクリプトを生成
- 02OpenAlgoまたはDuckDBのデータを利用
- 03OpenAlgo taのインジケーターを利用
- 04戦略とベンチマークの成績を比較
- 05チャート、取引CSV、対話型レポートを出力
活用シーン
- 01EMA、RSI、モメンタム戦略のバックテスト
- 02DuckDB内の市場データを使った検証
- 03NIFTYベンチマークとの戦略評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ marketcalls/ vectorbt-backtesting-skills --skill backtestインストール後、Claude Code で/backtestを入力して読み込まれたか確認します。
詳細
ユーザー向けに、VectorBT の完全なバックテストスクリプトを作成します。
引数
$ARGUMENTS を次のように解析します:strategy symbol exchange interval
$0= 戦略名(例:ema-crossover、rsi、donchian、supertrend、macd、sda2、momentum)$1= 銘柄(例:SBIN、RELIANCE、NIFTY)。デフォルト:SBIN$2= 取引所(例:NSE、NFO)。デフォルト:NSE$3= 時間足(例:D、1h、5m)。デフォルト:D
引数がない場合は、希望する戦略をユーザーに尋ねます。
手順
- 参考パターンとして vectorbt-expert のスキルルールを読む
backtesting/{strategy_name}/ディレクトリが存在しない場合は作成する(必要に応じて作成)backtesting/{strategy_name}/に{symbol}_{strategy}_backtest.pyという名前の.pyファイルを作成するrules/assets/{strategy}/backtest.pyにある対応するテンプレートをベースとして使用する- スクリプトでは次の処理を行う必要があります。
find_dotenv()を使ってプロジェクトルートの.envを読み込む(スクリプトのディレクトリから自動的に上位階層をたどります)- OpenAlgo の
client.history()でデータを取得する - ユーザーが DuckDB のパスを指定した場合は、OpenAlgo API の代わりに
duckdb.connect(path, read_only=True)でデータを直接読み込む。形式を自動判別する:Historify(market_dataテーブル、エポックタイムスタンプ)またはカスタム形式(ohlcvテーブル、日付+時刻)。vectorbt-expert のrules/duckdb-data.mdを参照する openalgo.taをインポートできない場合(DuckDB 単独で使用する場合)は、インラインのexrem()フォールバックを使う- デフォルトでは、すべてのインジケーター(EMA、SMA、RSI、MACD、BBands、ATR、ADX、STDDEV、MOM など、ほか90種類以上)に OpenAlgo ta を使う —
from openalgo import ta - ユーザーのリクエストに「talib」または「TA-Lib」が明示されている場合に限り、TA-Lib を使う。 特殊なインジケーター(Supertrend、Donchian、Ichimoku、HMA、KAMA、ALMA、ZLEMA、VWMA)は、TA-Lib に相当する機能がないため、常に OpenAlgo ta を使う
- 重複シグナルを除去するには
ta.exrem()を使う(常にexremの前に.fillna(False)を実行する) min_size=1, size_granularity=1を指定してvbt.Portfolio.from_signals()を実行する- インドの現物株の手数料:現物株の場合は
fees=0.00111, fixed_fees=20 - OpenAlgo から NIFTY のベンチマークを取得する(
symbol="NIFTY", exchange="NSE_INDEX") pf.stats()の全内容を出力する- 戦略とベンチマークの比較表を出力する(Total Return、Sharpe、Sortino、Max DD、Win Rate、Trades、Profit Factor)
- 一般のトレーダーにもわかる平易な言葉でバックテストレポートを説明する
openstatzが利用可能な場合は、OpenStatz のインタラクティブなダッシュボード形式のティアシートをostz.dashboard(...)で生成する。これはサーバー不要で動作する、単体のオフライン HTML ファイルです(必ず OpenStatz を使い、QuantStats は使わない。従来のostz.reports.html静的レポートも使わない)。dashboard()の呼び出し前にstrategy_returns.name(例:"EMA 20/50 Crossover - SBIN")とbenchmark.nameを設定する。ティアシートの戦略ヘッダー/列/凡例に表示されるのはtitle=引数ではなく、この名前です(openstatz-tearsheet のルールを参照)- Plotly でエクイティカーブとドローダウンをプロットする(
template="plotly_dark") - 取引履歴を CSV にエクスポートする
- コードやロガー出力にアイコンや絵文字を使わない
- 先物銘柄(NIFTY、BANKNIFTY)には、ロットサイズを考慮したサイズ設定を使う。
- NIFTY:
min_size=65, size_granularity=65(2025年12月31日適用) - BANKNIFTY:
min_size=30, size_granularity=30 - F&O 先物には
fees=0.00018, fixed_fees=20を使う
- NIFTY:
利用可能な戦略
| 戦略 | キーワード | テンプレート |
|---|---|---|
| EMA クロスオーバー | ema-crossover | assets/ema_crossover/backtest.py |
| RSI | rsi | assets/rsi/backtest.py |
| Donchian チャネル | donchian | assets/donchian/backtest.py |
| Supertrend | supertrend | assets/supertrend/backtest.py |
| MACD ブレイクアウト | macd | assets/macd/backtest.py |
| SDA2 | sda2 | assets/sda2/backtest.py |
| モメンタム | momentum | assets/momentum/backtest.py |
| デュアルモメンタム | dual-momentum | assets/dual_momentum/backtest.py |
| バイ・アンド・ホールド | buy-hold | assets/buy_hold/backtest.py |
| RSI 積立 | rsi-accumulation | assets/rsi_accumulation/backtest.py |
ベンチマークのルール
- デフォルト:OpenAlgo 経由の NIFTY 50(
symbol="NIFTY", exchange="NSE_INDEX") - ユーザーが別のベンチマークを指定した場合は、そちらを使用します
- yfinance の場合:インド市場では
^NSEI、米国市場では^GSPC(S&P 500)を使用します - 常に比較する指標:トータルリターン、シャープレシオ、ソルティノレシオ、最大ドローダウン
使用例
/backtest ema-crossover RELIANCE NSE D
/backtest rsi SBIN
/backtest supertrend NIFTY NFO 5m
コメント
Markdown 対応