mcpField
B
backtest

backtest

github.com/marketcalls数据与数据库2153.4k 次安装15 周前更新
代码仓库

关于 backtest

backtest 是一个按用户指定策略、标的和周期生成 VectorBT 回测脚本的 Skill,面向量化交易研究者。它使用策略模板,并要求输出基准比较、图表、交易 CSV 和通俗报告。

主要功能

  1. 01按策略模板生成 Python 脚本
  2. 02支持 OpenAlgo 与 DuckDB 数据
  3. 03使用 OpenAlgo ta 指标
  4. 04生成策略与基准比较
  5. 05输出图表、交易 CSV 和交互报告

适用场景

  1. 01回测 EMA、RSI 或动量策略
  2. 02使用 DuckDB 中的行情数据回测
  3. 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

如果没有参数,询问用户想要哪种策略。

指示

  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 表,date+time)。参见 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))
    • 使用 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
  6. 代码和日志输出中不得使用图标或表情符号
  7. 对于期货标的(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

可用策略

策略关键词模板
EMA 交叉ema-crossoverassets/ema_crossover/backtest.py
RSIrsiassets/rsi/backtest.py
Donchian 通道donchianassets/donchian/backtest.py
Supertrendsupertrendassets/supertrend/backtest.py
MACD 突破macdassets/macd/backtest.py
SDA2sda2assets/sda2/backtest.py
动量momentumassets/momentum/backtest.py
双动量dual-momentumassets/dual_momentum/backtest.py
买入并持有buy-holdassets/buy_hold/backtest.py
RSI 累积rsi-accumulationassets/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