其他
在同一标的上并排比较多个交易策略(含基准与费用)时…
当需要在同一标的上对比多个策略或方向(做多/做空/双向)并输出并排统计表时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
在同一标的上并排比较多个交易策略(含基准特定
解决思路
- 解析 $ARGUMENTS:第一个参数为标的(如 SBIN、RELIANCE、NIFTY),其余参数为要对比的策略名(如 ema-crossover rsi donchian)。
- 若只给了标的、没有策略,则默认对比 ema-crossover、rsi、donchian、supertrend。
- 若策略中包含 "long-vs-short",则对第一个真实策略对比 longonly、shortonly、both 三种方向。
- 阅读 vectorbt-expert 技能的规则作为参考模式。
- 按需创建 backtesting/strategy_comparison/ 目录(不存在时才创建)。
- 在 backtesting/strategy_comparison/ 下创建名为 {symbol}_strategy_comparison.py 的 .py 文件。
- 脚本通过 OpenAlgo 只获取一次数据。
- 若用户提供 DuckDB 路径,则用 duckdb.connect(path, read_only=True) 直接加载数据,参考 vectorbt-expert 的 rules/duckdb-data.md。
- 若 openalgo.ta 无法导入(独立 DuckDB 场景),使用内联的 exrem() 兜底实现。
- 默认对所有指标使用 OpenAlgo ta(绝不用 VectorBT 内置指标);仅当用户明确说 "talib"/"TA-Lib" 时才切换到 TA-Lib。
- 对特殊指标(Supertrend、Donchian 等)始终使用 OpenAlgo ta,因为 TA-Lib 没有对应实现。
- 用 ta.exrem() 清洗信号(在 exrem 之前始终先 .fillna(False))。
- 在同一份数据上运行每个策略。
- 印度交割费用:股票交割使用 fees=0.00111, fixed_fees=20。
- 将每个策略的关键指标收集到一个并排的 DataFrame 中。
- 在对比表中加入 NIFTY 基准(通过 OpenAlgo 的 NSE_INDEX)。
- 打印 Strategy vs Benchmark 对比表:Total Return、Sharpe、Sortino、Max DD、Win Rate、Trades、Profit Factor。
- 用通俗语言解释结果——哪个策略表现最好以及原因。
- 用 Plotly(template="plotly_dark")绘制所有策略叠加的权益曲线。
- 将对比结果保存为 CSV。
- 代码和日志输出中绝不使用图标/emoji。
适用边界 · 注意事项
- 需要对比的标的无法通过 OpenAlgo 获取数据、且未提供 DuckDB 路径时。
- 用户要求使用 VectorBT 内置指标或 TA-Lib 特殊指标(如 Supertrend、Donchian)时,本流程默认的 OpenAlgo ta 方案不适用。
- 非印度股票交割场景下不应直接套用 fees=0.00111, fixed_fees=20 的费用参数。