金融与交易
需要为某策略和标的快速生成 VectorBT…
适用于基于 OpenAlgo/VectorBT 快速回测交易策略,并生成基准对比与 OpenStatz 报告的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要为某策略和标的快速生成 Vector特定
解决思路
- 解析 `$ARGUMENTS` 为 strategy symbol exchange interval:`$0` 为策略名(如 ema-crossover、rsi、donchian、supertrend、macd、sda2、momentum),`$1` 为 symbol(如 SBIN、RELIANCE、NIFTY,默认 SBIN),`$2` 为 exchange(如 NSE、NFO,默认 NSE),`$3` 为 interval(如 D、1h、5m,默认 D)。
- 如果没有参数,询问用户想要哪个策略。
- 阅读 vectorbt-expert skill 规则作为参考模式。
- 按需创建 `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 时间戳)还是 custom(`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`。
- 脚本必须:印度 delivery 费用使用 `fees=0.00111, fixed_fees=20`。
- 脚本必须:通过 OpenAlgo 获取 NIFTY 基准(`symbol='NIFTY', exchange='NSE_INDEX'`)。
- 脚本必须:打印完整 `pf.stats()`。
- 脚本必须:打印 Strategy vs Benchmark 对比表(Total Return、Sharpe、Sortino、Max DD、Win Rate、Trades、Profit Factor)。
- 脚本必须:用通俗语言向普通交易者解释回测报告。
- 脚本必须:如果 `openstatz` 可用,通过 `ostz.dashboard(...)` 生成 OpenStatz 交互式仪表盘 tearsheet;这是自包含离线 HTML 文件,无需服务器(始终用 OpenStatz,绝不用 QuantStats;绝不用旧版 `ostz.reports.html` 静态报告)。
- 脚本必须:在调用 `dashboard()` 前设置 `strategy_returns.name`(例如 `"EMA 20/50 Crossover - SBIN"`)和 `benchmark.name`;tearsheet 显示的策略标题/列/图例用的是这个 name,而不是 `title=` 参数(见 openstatz-tearsheet 规则)。
- 脚本必须:使用 Plotly 绘制 equity curve + drawdown(`template="plotly_dark"`)。
- 脚本必须:导出 trades 到 CSV。
- 代码或 logger 输出中绝不使用图标/emoji。
- 对期货符号(NIFTY、BANKNIFTY),使用感知手数大小的 sizing:NIFTY:`min_size=65, size_granularity=65`(2025 年 12 月 31 日起生效);BANKNIFTY:`min_size=30, size_granularity=30`;F&O futures 使用 `fees=0.00018, fixed_fees=20`。
- 可用策略模板映射:EMA Crossover 关键词 `ema-crossover`,模板 `assets/ema_crossover/backtest.py`。
- 可用策略模板映射:RSI 关键词 `rsi`,模板 `assets/rsi/backtest.py`。
- 可用策略模板映射:Donchian Channel 关键词 `donchian`,模板 `assets/donchian/backtest.py`。
- 可用策略模板映射:Supertrend 关键词 `supertrend`,模板 `assets/supertrend/backtest.py`。
- 可用策略模板映射:MACD Breakout 关键词 `macd`,模板 `assets/macd/backtest.py`。
- 可用策略模板映射:SDA2 关键词 `sda2`,模板 `assets/sda2/backtest.py`。
- 可用策略模板映射:Momentum 关键词 `momentum`,模板 `assets/momentum/backtest.py`。
- 可用策略模板映射:Dual Momentum 关键词 `dual-momentum`,模板 `assets/dual_momentum/backtest.py`。
- 可用策略模板映射:Buy & Hold 关键词 `buy-hold`,模板 `assets/buy_hold/backtest.py`。
- 可用策略模板映射:RSI Accumulation 关键词 `rsi-accumulation`,模板 `assets/rsi_accumulation/backtest.py`。
- 基准规则:默认 NIFTY 50 via OpenAlgo(`symbol='NIFTY', exchange='NSE_INDEX'`)。
- 基准规则:如果用户指定不同 benchmark,则改用该 benchmark。
- 基准规则:对 yfinance,印度用 `^NSEI`,美国市场用 `^GSPC`(S&P 500)。
- 基准规则:始终比较 Total Return、Sharpe、Sortino、Max Drawdown。
- 示例用法:`/backtest ema-crossover RELIANCE NSE D`、`/backtest rsi SBIN`、`/backtest supertrend NIFTY NFO 5m`。
适用边界 · 注意事项
- 没有安装或无法访问 OpenAlgo、VectorBT、OpenStatz 等依赖时不要使用。
- 需要实盘交易执行或生产级风控时不要只靠该脚本。
- 市场/品种费用与合约乘数不匹配且未调整参数时不要直接运行。