mcpField
B
backtest

backtest

github.com/marketcallsデータ・データベース2153.4k 回インストール15 週間前に更新
リポジトリ

backtest について

backtestは、指定された戦略、銘柄、時間足に基づきVectorBTのバックテストスクリプトを作成するスキルです。クオンツ取引の調査向けに、テンプレート、ベンチマーク比較、チャート、取引データ出力、平易なレポートを定めています。

主な機能

  1. 01戦略テンプレートからPythonスクリプトを生成
  2. 02OpenAlgoまたはDuckDBのデータを利用
  3. 03OpenAlgo taのインジケーターを利用
  4. 04戦略とベンチマークの成績を比較
  5. 05チャート、取引CSV、対話型レポートを出力

活用シーン

  1. 01EMA、RSI、モメンタム戦略のバックテスト
  2. 02DuckDB内の市場データを使った検証
  3. 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

引数がない場合は、希望する戦略をユーザーに尋ねます。

手順

  1. 参考パターンとして vectorbt-expert のスキルルールを読む
  2. backtesting/{strategy_name}/ ディレクトリが存在しない場合は作成する(必要に応じて作成)
  3. backtesting/{strategy_name}/ に {symbol}_{strategy}_backtest.py という名前の .py ファイルを作成する
  4. rules/assets/{strategy}/backtest.py にある対応するテンプレートをベースとして使用する
  5. スクリプトでは次の処理を行う必要があります。
    • 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 にエクスポートする
  6. コードやロガー出力にアイコンや絵文字を使わない
  7. 先物銘柄(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 を使う

利用可能な戦略

戦略キーワードテンプレート
EMA クロスオーバーema-crossoverassets/ema_crossover/backtest.py
RSIrsiassets/rsi/backtest.py
Donchian チャネルdonchianassets/donchian/backtest.py
Supertrendsupertrendassets/supertrend/backtest.py
MACD ブレイクアウトmacdassets/macd/backtest.py
SDA2sda2assets/sda2/backtest.py
モメンタムmomentumassets/momentum/backtest.py
デュアルモメンタムdual-momentumassets/dual_momentum/backtest.py
バイ・アンド・ホールドbuy-holdassets/buy_hold/backtest.py
RSI 積立rsi-accumulationassets/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

コメント