backtest

backtest

热门

快速回测某个策略在某个标的上的表现。生成完整的 .py 脚本,包含数据获取、信号生成、回测、统计和图表。

179Star
45Fork
更新于 2026/7/12
SKILL.md
readonly只读
name
backtest
description

快速回测某个策略在某个标的上的表现。生成完整的 .py 脚本,包含数据获取、信号生成、回测、统计和图表。

为用户创建一个完整的 VectorBT 回测脚本。

参数

解析 $ARGUMENTS 为:策略 标的 交易所 周期

  • $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}/ 目录下创建 .py 文件,命名为 {symbol}_{strategy}_backtest.py
  4. 使用 rules/assets/{strategy}/backtest.py 中的匹配模板作为起点
  5. 脚本必须:
    • 使用 find_dotenv() 从项目根目录加载 .env(自动从脚本目录向上查找)
    • 通过 OpenAlgo 的 client.history() 获取数据
    • 如果用户提供了 DuckDB 路径,则直接通过 duckdb.connect(path, read_only=True) 加载数据,而不是使用 OpenAlgo API。自动检测格式:Historify(market_data 表,epoch 时间戳)或自定义(ohlcv 表,日期+时间)。参见 vectorbt-expert 的 rules/duckdb-data.md
    • 如果无法导入 openalgo.ta(独立 DuckDB),则使用内联的 exrem() 回退。
    • 默认使用 OpenAlgo ta 计算所有指标(EMA, SMA, RSI, MACD, BBands, ATR, ADX, STDDEV, MOM 等 90 多个)—— from openalgo import ta
    • 仅当用户明确要求 "talib"/"TA-Lib" 时才使用 TA-Lib;特殊指标(Supertrend, Donchian, Ichimoku, HMA, KAMA, ALMA, ZLEMA, VWMA)始终来自 OpenAlgo ta,因为 TA-Lib 没有对应实现
    • 使用 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()
    • 打印策略与基准对比表(总收益率、夏普比率、索提诺比率、最大回撤、胜率、交易次数、盈亏比)
    • 用通俗语言解释回测报告,适合普通交易者理解
    • 如果 openstatz 可用,通过 ostz.dashboard(...) 生成 OpenStatz 交互式仪表盘 tearsheet——一个自包含的离线 HTML 文件,无需服务器(始终使用 OpenStatz,不要使用 QuantStats;也不要使用旧的 ostz.reports.html 静态报告)。在调用 dashboard() 之前设置 strategy_returns.name(例如 "EMA 20/50 Crossover - SBIN")和 benchmark.name——tearsheet 显示的策略标题/列/图例使用的是这个名称,而不是 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
    • 期货使用 fees=0.00018, fixed_fees=20

可用策略

策略 关键词 模板
EMA 交叉 ema-crossover assets/ema_crossover/backtest.py
RSI rsi assets/rsi/backtest.py
唐奇安通道 donchian assets/donchian/backtest.py
超级趋势 supertrend assets/supertrend/backtest.py
MACD 突破 macd assets/macd/backtest.py
SDA2 sda2 assets/sda2/backtest.py
动量 momentum assets/momentum/backtest.py
双动量 dual-momentum assets/dual_momentum/backtest.py
买入并持有 buy-hold assets/buy_hold/backtest.py
RSI 积累 rsi-accumulation assets/rsi_accumulation/backtest.py

基准规则

  • 默认:通过 OpenAlgo 获取 NIFTY 50(symbol="NIFTY", exchange="NSE_INDEX"
  • 如果用户指定了其他基准,则使用该基准
  • 对于 yfinance:印度市场使用 ^NSEI,美国市场使用 ^GSPC(标普500)
  • 始终比较:总收益率、夏普比率、索提诺比率、最大回撤

使用示例

/backtest ema-crossover RELIANCE NSE D
/backtest rsi SBIN
/backtest supertrend NIFTY NFO 5m