Create a strategy comparison script.
Arguments
Parse $ARGUMENTS as: symbol followed by strategy names
-
$0 = symbol (e.g., SBIN, RELIANCE, NIFTY)
-
Remaining args = strategies to compare (e.g., ema-crossover rsi donchian)
If only a symbol is given with no strategies, compare: ema-crossover, rsi, donchian, supertrend. If "long-vs-short" is one of the strategies, compare longonly vs shortonly vs both for the first real strategy.
Instructions
-
Read the vectorbt-expert skill rules for reference patterns
-
Create backtesting/strategy_comparison/ directory if it doesn't exist (on-demand)
-
Create a .py file in backtesting/strategy_comparison/ named {symbol}_strategy_comparison.py
-
The script must:
-
Fetch data once via OpenAlgo
-
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.)
-
Clean signals with ta.exrem() (always .fillna(False) before exrem)
-
Run each strategy on the same data
-
Indian delivery fees: fees=0.00111, fixed_fees=20 for delivery equity
-
Collect key metrics from each into a side-by-side DataFrame
-
Include NIFTY benchmark in the comparison table (via OpenAlgo NSE_INDEX )
-
Print Strategy vs Benchmark comparison table: Total Return, Sharpe, Sortino, Max DD, Win Rate, Trades, Profit Factor
-
Explain results in plain language - which strategy performed best and why
-
Plot overlaid equity curves for all strategies using Plotly (template="plotly_dark" )
-
Save comparison to CSV
-
Never use icons/emojis in code or logger output
Example Usage
/strategy-compare RELIANCE ema-crossover rsi donchian
/strategy-compare SBIN long-vs-short ema-crossover