Vectorbt-backtesting-skills optimize

Optimize strategy parameters using VectorBT. Tests parameter combinations and generates heatmaps.

install
source · Clone the upstream repo
git clone https://github.com/marketcalls/vectorbt-backtesting-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/marketcalls/vectorbt-backtesting-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/optimize" ~/.claude/skills/marketcalls-vectorbt-backtesting-skills-optimize && rm -rf "$T"
manifest: .claude/skills/optimize/SKILL.md
source content

Create a parameter optimization script for a VectorBT strategy.

Arguments

Parse

$ARGUMENTS
as: strategy symbol exchange interval

  • $0
    = strategy name (e.g., ema-crossover, rsi, donchian). Default: ema-crossover
  • $1
    = symbol (e.g., SBIN, RELIANCE, NIFTY). Default: SBIN
  • $2
    = exchange (e.g., NSE, NFO). Default: NSE
  • $3
    = interval (e.g., D, 1h, 5m). Default: D

If no arguments, ask the user which strategy to optimize.

Instructions

  1. Read the vectorbt-expert skill rules for reference patterns
  2. Create
    backtesting/{strategy_name}/
    directory if it doesn't exist (on-demand)
  3. Create a
    .py
    file in
    backtesting/{strategy_name}/
    named
    {symbol}_{strategy}_optimize.py
  4. The script must:
    • Load
      .env
      from project root using
      find_dotenv()
      and fetch data via OpenAlgo
      client.history()
    • If user provides a DuckDB path, load data directly via
      duckdb.connect(path, read_only=True)
      . See vectorbt-expert
      rules/duckdb-data.md
      .
    • If
      openalgo.ta
      is not importable (standalone DuckDB), use inline
      exrem()
      fallback.
    • Use TA-Lib for ALL indicators (never VectorBT built-in)
    • Use OpenAlgo ta for specialty indicators (Supertrend, Donchian, etc.)
    • Use
      ta.exrem()
      to clean signals (always
      .fillna(False)
      before exrem)
    • Define sensible parameter ranges for the chosen strategy
    • Use loop-based optimization to collect multiple metrics per combo
    • Track: total_return, sharpe_ratio, max_drawdown, trade_count for each combination
    • Use
      tqdm
      for progress bars
    • Indian delivery fees:
      fees=0.00111, fixed_fees=20
      for delivery equity
    • Find best parameters by total return AND by Sharpe ratio
    • Print top 10 results for both criteria
    • Generate Plotly heatmap of total return across parameter grid (
      template="plotly_dark"
      )
    • Generate Plotly heatmap of Sharpe ratio across parameter grid
    • Fetch NIFTY benchmark and compare best parameters vs benchmark
    • Print Strategy vs Benchmark comparison table
    • Explain results in plain language for normal traders
    • Save results to CSV
  5. Never use icons/emojis in code or logger output
  6. For futures symbols, use lot-size-aware sizing:
    • NIFTY:
      min_size=65, size_granularity=65
    • BANKNIFTY:
      min_size=30, size_granularity=30

Default Parameter Ranges

StrategyParameter 1Parameter 2
ema-crossoverfast EMA: 5-50slow EMA: 10-60
rsiwindow: 5-30oversold: 20-40
donchianperiod: 5-50-
supertrendperiod: 5-30multiplier: 1.0-5.0

Example Usage

/optimize ema-crossover RELIANCE NSE D
/optimize rsi SBIN