关于 backtest
backtest 是一个按用户指定策略、标的和周期生成 VectorBT 回测脚本的 Skill,面向量化交易研究者。它使用策略模板,并要求输出基准比较、图表、交易 CSV 和通俗报告。
主要功能
- 01按策略模板生成 Python 脚本
- 02支持 OpenAlgo 与 DuckDB 数据
- 03使用 OpenAlgo ta 指标
- 04生成策略与基准比较
- 05输出图表、交易 CSV 和交互报告
适用场景
- 01回测 EMA、RSI 或动量策略
- 02使用 DuckDB 中的行情数据回测
- 03评估策略与 NIFTY 基准的表现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ marketcalls/ vectorbt-backtesting-skills --skill backtest安装后在 Claude Code 中输入/backtest确认已加载。
详细介绍
为用户创建完整的 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表,date+time)。参见 vectorbt-expertrules/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)) - 使用
vbt.Portfolio.from_signals(),并设置min_size=1, size_granularity=1 - 印度现货交割费用:交割股票使用
fees=0.00111, fixed_fees=20 - 通过 OpenAlgo 获取 NIFTY 基准数据(
symbol="NIFTY", exchange="NSE_INDEX") - 打印完整的
pf.stats() - 打印策略与基准对比表(总收益率、夏普比率、索提诺比率、最大回撤、胜率、交易次数、盈利因子)
- 用通俗易懂的语言解释回测报告,面向普通交易者
- 如果
openstatz可用,则使用ostz.dashboard(...)生成 OpenStatz 交互式仪表板盈亏分析报告——这是独立的离线 HTML 文件,无需服务器(始终使用 OpenStatz,绝不使用 QuantStats;也不要使用旧版ostz.reports.html静态报告)。调用dashboard()前设置strategy_returns.name(例如"EMA 20/50 Crossover - SBIN")和benchmark.name——盈亏分析报告中的策略标题、列名和图例显示的是该名称,而不是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 - F&O 期货使用
fees=0.00018, fixed_fees=20
- NIFTY:
可用策略
| 策略 | 关键词 | 模板 |
|---|---|---|
| EMA 交叉 | ema-crossover | assets/ema_crossover/backtest.py |
| RSI | rsi | assets/rsi/backtest.py |
| Donchian 通道 | donchian | assets/donchian/backtest.py |
| Supertrend | 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(S&P 500) - 始终比较:总回报、Sharpe、Sortino、最大回撤
使用示例
/backtest ema-crossover RELIANCE NSE D
/backtest rsi SBIN
/backtest supertrend NIFTY NFO 5m
评论
支持 Markdown