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
如果没有参数,询问用户想要哪个策略。
操作说明
- 阅读 vectorbt-expert 技能规则以获取参考模式
- 如果
backtesting/{strategy_name}/目录不存在则创建(按需) - 在
backtesting/{strategy_name}/目录下创建.py文件,命名为{symbol}_{strategy}_backtest.py - 使用
rules/assets/{strategy}/backtest.py中的匹配模板作为起点 - 脚本必须:
- 使用
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
- 使用
- 代码或日志输出中不要使用图标/表情符号
- 对于期货标的(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
- NIFTY:
可用策略
| 策略 | 关键词 | 模板 |
|---|---|---|
| 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






