日期: 2026-07-13 | 交付: ① 代码深度评审(本文) ② 优化版 backtest_pro.py ③ 独立网页 https://metazero-terminal.pages.dev/crypto-backtest/ | 服务对象: 主席的 Python 多周期评分回测系统
骨架是对的,细节在漏钱:多周期确认闸、评分制、买卖独立开关这三个设计决定都专业且实现无前视;但"同bar收盘成交 + 零费率 + 错误的夏普年化 + 微调出来的非标参数(MACD 25/53/19)"四个问题叠加,会让回测结果系统性偏乐观且不可比。本次给出 9 项修正 + 把"防过拟合"从口号变成机制(参数套餐/方向体检/滚动前推选套餐),并实测验证:你的原始配置在 BTC/ETH 2024-2026 上全期约 +5%/-7%,同期最好的文献套餐(稳健低频/海龟)在 ETH 上 OOS 夏普 1.1+——差距主要不是指标选得不好,是"方法论层"的差距。
| 设计 | 评价 |
|---|---|
| 多周期确认(长周期 MACD 柱作闸,短周期出信号) | 专业标准做法;且 adjust_long_term_timestamps 把长周期bar时间戳右移到收盘+merge_asof backward——无前视,实现正确,这是很多人会做错的地方 |
| 评分制(多指标加权 vs 单指标触发) | 正确方向,天然支持组合与消融 |
| 每个指标 buy_use/sell_use 独立 + 权重 | 灵活且清晰,本次网页完整继承了这个设计 |
| 数据缓存 / 步骤日志 / 多标的循环 | 工程习惯好 |
| summary 里有 B&H 与 alpha 对比 | 有基准意识 |
1. 同 bar 收盘成交:execute_trades 在信号 bar 用 row['close'] 成交。信号由这根 bar 的收盘价算出,又假设能以同一价格成交——对均值回归类信号(RSI超卖/破布林下轨)系统性偏乐观(你总能"接住"恰好触发信号的那个价格)。修正:下一根 bar 开盘价成交(backtest_pro.py 与网页均已改)。
2. fee_rate = 0:15m 级信号年换手极高,币安现货 taker 10bps + 滑点。零费率下"看起来赚钱"的高频信号,加上 15bps 全成本后大多归零或转负。修正:费率+滑点默认 10+5bps 计入。
3. 夏普年化系数错误:sharpe = mean/std × √365,但 returns 是 15 分钟 bar 级收益(merge 后逐行 pct_change)。正确系数是 √(每年bar数)=√(365×96)≈187,不是 √365≈19——你现在的夏普被低估约 10 倍,跨周期/跨策略完全不可比。修正:√(bars_per_year),按 timeframe 自动取。
4. 参数微调 = 过拟合指纹:MACD(25,53,19)、BBAND(10期,1.5σ,双buffer) 这类非标参数只可能来自对历史的反复试调。你自己在需求里说到了点子上——解法不是"调得更好",而是"根本不调":固定几套文献/实务成型的整套参数(见第四节),用擂台+滚动前推去"选套餐",不给微调留缝。
MACD_Histogram_Slope_ROC 用 pct_change:斜率过零时该值爆炸/变号,数学上无意义 → 弃用,直接用平滑斜率;你现有的 RSI/MACD/BBand/MFI/OBV 全保留,但补上在加密资产上有文献/实务验证的缺口:
| 新增 | 是什么 | 为什么值得加 |
|---|---|---|
| TSMOM 时序动量 | 过去 N 根总涨跌的符号 | Moskowitz-Ooi-Pedersen (2012);多篇后续研究确认在 BTC/主流币上依旧显著,是加密最被验证的单因子 |
| 唐奇安通道突破 | 创 N 期新高买/破 M 期新低卖 | 海龟法则原型;参数天然"粗"(20/55),难被微调 |
| EMA 快慢排列 | 50>200 之类 | 最朴素、最难过拟合的趋势定义 |
| ADX 趋势强度 | 有没有"像样的趋势" | 区分趋势/震荡市,是趋势信号的标准过滤器 |
| ATR | 波幅单位 | 不产生信号,专职止损/仓位刻度 |
本质:你原来的指标偏"震荡指标家族"(RSI/BB/MFI 同源性高,都是超买超卖),缺趋势家族和风控刻度。补齐后两族对冲:趋势市靠 TSMOM/唐奇安/EMA 赚,震荡市靠 RSI/BB 赚,ADX/闸决定谁上场。
(再往上一层的"加密特有信息"——永续资金费率、期现基差、恐惧贪婪指数、链上活跃地址——属于情绪/持仓面,比纯价格指标信息增量更大,但需要额外数据源,列为下一步选项。)
每套=完整配置(指标组合+方向+权重+闸+阈值+风控),参数全部来自文献/实务惯例,零微调:
1. 📚 经典文献套 RSI14(30/70)+MACD(12,26,9)+BB(20,2σ)+TSMOM90+EMA50/200,双闸
2. 🐢 海龟趋势套 唐奇安20/10+EMA+ADX>20,2.5×ATR 移动止损
3. 🔄 牛市回调套 RSI(2)极端超卖(Connors)+BB,只在 200 日均线上方抄
4. 🛡️ 稳健低频套 TSMOM180+EMA100/300+MACD柱,40%波动率目标仓
5. ⚡ 激进动量套 唐奇安55+MACD+OBV,高阈值+2×ATR止损
6. 🧪 主席原始套 复刻你的配置(RSI35只买+BB(10,1.5σ)+双闸),跟别人同台比
配套三件裁判工具:B·套餐擂台(全期+后半段双窗)、C·方向体检(每个指标顺/逆各真跑一遍+信号后1/5/20根事件研究——你问的"正向还是逆向"由数据回答)、D·滚动前推(每段只用过去数据选套餐,绝不调参——"只会选套餐的人"能拿到的真实成绩)。
BTC/USDT(B&H 同窗 +49.0%)
| 套餐 | 全期回报 | 全期夏普 | 回撤 | 后半回报 | 后半夏普 | 交易数 |
|---|---|---|---|---|---|---|
| 经典文献 | +12.2% | 0.31 | -27.0% | +1.7% | 0.16 | 9 |
| 海龟趋势 | +0.7% | 0.10 | -27.0% | -14.8% | -0.80 | 69 |
| 牛市回调 | -31.4% | -0.67 | -34.4% | -10.9% | -0.58 | 86 |
| 稳健低频 | +12.6% | 0.32 | -25.6% | -1.1% | 0.05 | 5 |
| 激进动量 | -15.5% | -0.46 | -24.4% | -15.8% | -1.22 | 57 |
| 🧪主席原始 | -6.8% | -0.11 | -21.4% | -6.2% | -0.57 | 16 |
ETH/USDT(B&H 同窗 -21.5%)
| 套餐 | 全期回报 | 全期夏普 | 回撤 | 后半回报 | 后半夏普 | 交易数 |
|---|---|---|---|---|---|---|
| 经典文献 | +5.2% | 0.21 | -37.5% | +5.1% | 0.28 | 6 |
| 海龟趋势 | +6.5% | 0.22 | -25.8% | +33.9% | 1.11 | 40 |
| 牛市回调 | -51.6% | -0.93 | -56.4% | -24.5% | -0.98 | 53 |
| 稳健低频 | +28.7% | 0.60 | -31.5% | +33.6% | 1.12 | 2 |
| 激进动量 | +2.8% | 0.15 | -26.1% | +19.6% | 0.82 | 57 |
| 🧪主席原始 | +4.8% | 0.22 | -14.2% | -2.0% | -0.11 | 7 |
三条硬结论:
1. BTC 单边牛市里没有任何一套跑赢买入持有——择时策略的代价是牛市里的机会成本,这是常识但很少有人拿数字直视它;
2. ETH 这种跌了 21% 的市场里,趋势套+止损(海龟/稳健低频)大幅跑赢(+28~34% vs -21%)——技术面策略的真实价值是跌市保命/危机alpha,不是牛市加速;
3. 你的原始配置两个币都在 ±7% 徘徊且后半段转负——不是指标烂,是"只买超卖+等上轨"结构上在震荡市吃亏、加上原回测口径把它的历史表现高估了。
1. "套餐也是六选一,选择本身不也是过拟合?" —— 对,自由度从"连续参数空间"降到"6 选 1",量级不同但没归零。所以 D·滚动前推只允许"用过去选套餐",且多币横评要求方法在半数以上币种成立;最终裁判永远是未来。
2. "OKX 现货价 ≠ 币安价" —— 有基差但主流币价差极小(bp级),对 4H/1D 级结论无实质影响;你本机跑 backtest_pro.py 可直接切 EXCHANGE='binance'。
3. "4H 自 2024 只有 2.5 年,含单边行情" —— 是,样本外推谨慎;1D 档回溯到 2019(含 2021 牛/2022 崩),长样本结论以 1D 档为准。
4. 可证伪锚:若在 1D 长样本+多币横评下"趋势套在下跌年份跑赢 B&H"不再成立,则第五节结论 2 作废。