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