日内趋势跟踪与条件均值回归
Yanyi Huang
摘要
本文考察透明的日内趋势跟踪与条件均值回归规则,能否在 Invesco QQQ Trust(QQQ)上产生统计稳健的净收益,以及这些规则能否落地为一套可承受经纪商约束的交易流程。趋势侧考虑两条策略:第一条结合指数移动平均方向、MACD 确认、ADX 趋势强度与波动扩张过滤;第二条比较短期成交量加权均价与更长窗口的价格均线。第三条策略仅在滚动 Hurst 估计或方差比统计量显示回归相容状态时,才开仓 Bollinger %B 均值回归交易。
复权后的常规交易时段 OHLCV 被聚合为 15 分钟、30 分钟、小时与日线。主实验采用 30 分钟 K 线,按时间顺序划分为训练集(2015–2020)、验证集(2021–2022)与完全未触碰的测试集(2023–2025)。参数只在训练集上选择,信号下一根 K 线才执行,收益在显式佣金、价差与滑点假设之后报告。信息系数、均值 t 检验、紧缩夏普比率(Deflated Sharpe Ratio)、参数敏感性、过滤器消融与成本压力测试,用于把统计证据与数据挖掘式表现区分开。
三条 30 分钟策略均未产生正的样本外净表现。测试期夏普比率为:EMA–MACD–ADX 策略 $-1.573$,成交量加权比率策略 $-0.633$,条件布林均值回归 $-0.911$。紧缩夏普概率相应接近于零。成本在经济上很重要,但疲弱或为负的毛收益同样导致失败。小时线与日线的比率诊断更有利,但这些全样本比较不被当作样本外证据。
研究系统进一步扩展为 Interactive Brokers 模拟盘架构,包含确定性订单标识、显式订单状态机、ClickHouse 事件与成交存储、持仓对账、风险限额、健康检查与失败即关闭(fail-closed)行为。一次确定性的 20 个交易日回放完成了 259 个信号周期与 10 笔模拟成交。回测拒绝了全部三条主盈利假设。执行层工作则表明:同一套信号可以经由经纪商侧流程路由,并在加仓前检测陈旧数据、重复事件与持仓不一致。
关键词: 算法交易;趋势跟踪;均值回归;交易成本;IBKR;执行风险;紧缩夏普比率
1. 引言
本项目检验三条透明的日内规则,能否在计入交易成本后通过 QQQ 的样本外评估。短周期策略暴露于换手、价差、滑点、陈旧数据、部分成交、重复下单,以及经纪商状态消息与真实持仓之间的差异。因此研究同时评估历史信号,以及运行该信号所需的经纪商侧控制 [1]。
本文研究问题如下:
透明的日内趋势跟踪与条件均值回归规则,能否在 QQQ 上产生统计稳健的净收益,并且能否在现实经纪商与运营约束下可靠执行?
选择 QQQ,是因为它是一只成交活跃、科技权重高、交易历史长的交易所交易基金 [2]。本文把它当作趋势持续性与短周期回归的试验标的。SPY 作为系统性基准。主 K 线周期为 30 分钟,15 分钟、小时与日线用于周期诊断。
在查看未触碰测试期之前,预先设定四条假设:
- H1: EMA 与 MACD 方向一致,并在 ADX 强度与布林带宽扩张条件下,能够产生正的样本外净收益。
- H2: 成交量加权的短/长价格比率具有正的样本外预测价值与经济价值。
- H3: Hurst 与方差比门控能够改善 Bollinger %B 均值回归。
- H4: 交易成本会显著削弱短周期策略表现。
实现上结合了自定义下一根 K 线回测器、显式交易成本归因、IC 与紧缩夏普诊断,以及仅训练集拟合的 PCA。同一代码库还包含 IBKR Paper 执行路径:对成交、订单、持仓与账户数据做对账,而不是依赖单一经纪商状态回调。
2. 文献综述
趋势跟踪假定价格变化可以在经济上有用的期限内持续。时间序列动量证据已在流动期货与多资产类别中被记录 [3];系统性实现则强调波动率缩放、预测标准化、分散化与成本控制 [4]。EMA 交叉与 MACD 是同一大类思路的实用变换:较新信息的权重大于较旧信息。ADX 提供方向中性的趋势强度度量,使交易规则能够把方向性运动与震荡噪声区分开 [5,6]。
均值回归则假定对局部均衡的偏离是暂时的。布林带围绕中心估计定义滚动波动率包络 [7]。相应的 %B 统计量把价格在包络内的位置标准化。机械 %B 规则在持续趋势把价格推到带外时仍然脆弱,因此本文用 Hurst 与方差比诊断来约束新开仓。方差比框架检验多期收益方差是否与随机游走一致 [8,9]。这些诊断本身嘈杂且滞后,因此被当作状态过滤器,而不是独立预测。
回测选择会引入另一类问题。尝试许多相关规则,会提高“样本内最佳夏普只是抽样伪迹”的概率。紧缩夏普比率针对非正态性与试验次数调整观测夏普 [10],并与时间顺序持出以及训练集末尾禁运观测互补。因此不能仅仅因为技术指标名字耳熟就假定它们有效。必须证明其方向、稳定性、换手,以及扣费后的样本外行为 [11]。
执行文献也把期望组合与实现组合区分开。订单类型、有效期、路由、队列位置、价差、延迟、部分成交与消息顺序都会影响实施缺口 [1]。本项目的执行组件因此使用独立于经纪商的订单模型,并在 IBKR Paper 外围加一层对账,而不是把单一状态回调当作真相。
3. 数据与探索性设计
3.1 标的与抽样
主标的为 QQQ,基准为 SPY。源文件是通过淘宝市场向第三方卖方购买的商业历史行情。文件包含拆股与分红复权后的分钟级 OHLCV,但卖方未提供可独立核验的交易所级数据谱系,因此不把它们表述为官方交易所记录。卖方身份、购买记录与交易凭证私下保留。为便于审查复现,提交包中包含 data/market/processed/ 与 data/market/raw/ 下的 QQQ 与 SPY 文件;本地归档中的其他代码则省略。观测在美国常规交易时段内聚合。K 线以完成时刻标记。主样本包含 2015 年 1 月 2 日至 2025 年 12 月 30 日共 35,881 根有效 30 分钟 QQQ 观测。自动审计未发现重复时间戳、缺失 OHLCV 或无效 OHLC 关系。识别出 6 处同日缺口,作为显式源数据限制保留,而不是静默插补。
时间顺序划分如下:
- 训练集:2015–2020,最后 13 根重叠观测禁运;
- 验证集:2021–2022;
- 未触碰测试集:2023–2025。
对应计数为训练 19,583、验证 6,536、测试 9,749。13 根禁运观测仍留在全数据集中,但被排除在三个划分的度量掩码之外,因此划分计数之和为 35,868 而非 35,881。测试期不用于选择指标或参数。
3.2 时点控制
全部指标使用后视滚动或指数加权计算。在 K 线 $t$ 收盘形成的信号,只在 $t+1$ 根才成为可执行目标。没有任何同期收盘价既用于生成信号又用于执行。数据加载例程校验顺序、重复、OHLC 一致性、完整性与 K 线数量。实盘 K 线校验还会拒绝陈旧、未来日期、代码不匹配或非有限观测。
可用源是聚合行情,而不是重建的订单簿。因此本研究无法从真实交易所逐笔估计队列位置或瞬时冲击。作为与课题要求对齐的诊断,把一分钟复权 OHLCV 当作最细抽样网格,并按 2019 日历年聚合成 tick 代理(固定事件数)、成交量与金额 K 线;阈值与 30 分钟活动的中位数对齐。这些基于事件的抽样构造遵循课题说明与标准金融机器学习术语 [12,13]。结果报告在 outputs/part1/event_bars/ 下,并不替代主 30 分钟时间 K 线实验或其参数选择。Trend-B 中的成交量加权,仍是主时钟上实用的非纯价格扩展。
4. 方法论
4.1 趋势策略 A:EMA–MACD–ADX
对收盘价 $P_t$,跨度为 $n$ 的指数加权均值记为 $\operatorname{EMA}_n(P_t)$。方向分量为
$$ D_t^{\mathrm{EMA}}=\operatorname{sign}\left( \operatorname{EMA}{n_f}(P_t)-\operatorname{EMA}{n_s}(P_t) \right). $$
MACD 确认在全文固定为标准 $(12,26,9)$ 构造 [5];当 EMA 方向对变化时不重新参数化。实现把 DIF 与 DEA 除以当前收盘价以获得尺度不变性;确认只使用柱状图符号:
$$ D_t^{\mathrm{MACD}}=\operatorname{sign}(\mathrm{MACD}_t-\mathrm{Signal}_t). $$
仅当两个方向一致、ADX 超过阈值、且 20 期布林带宽超过其 130 根滚动分位数时,才允许交易。训练网格搜索 EMA 方向对 $(5,20)$、$(8,32)$ 与 $(12,26)$,对照固定 MACD 确认周期,以及 ADX 阈值 20 与 25、带宽分位数 0.5 与 0.6。选中配置为 $(12,26)$、ADX 20、带宽分位数 0.6,因此报告规则使用共享的 EMA/MACD 周期。ADX 遵循 Wilder 的方向中性趋势强度构造 [6],BandWidth 遵循 Bollinger 的波动包络框架 [7]。
4.2 趋势策略 B:成交量加权比率
该短/长比率设计落实对应的课题要求 [12]。短期估计为成交量加权移动平均:
$$ \mathrm{VWMA}t(n_f)= \frac{\sum{i=0}^{n_f-1}P_{t-i}V_{t-i}} {\sum_{i=0}^{n_f-1}V_{t-i}}. $$
它与更长的简单均线比较:
$$ R_t=\frac{\mathrm{VWMA}_t(n_f)}{\mathrm{SMA}_t(n_s)}. $$
当 $R_t>1+\varepsilon$ 做多,当 $R_t<1-\varepsilon$ 做空,中性区内空仓。训练网格使用长窗口 20、40、65 与 130;$\varepsilon$ 取值 0.001、0.002 与 0.005;短期估计同时考虑成交量加权与纯价格。选中的 30 分钟规则使用 5 期 VWMA、130 期长均线,以及 $\varepsilon=0.005$。
4.3 条件布林均值回归
对滚动中心 $\mu_t$、标准差 $\sigma_t$ 与宽度 $k$ [7],
$$ U_t=\mu_t+k\sigma_t,\qquad L_t=\mu_t-k\sigma_t, $$
$$ B_t=\frac{P_t-L_t}{U_t-L_t}. $$
低于零开多,高于一开空。仓位有状态:多头在价格到达或超过中轨时平仓,空头在价格到达或跌破中轨时平仓。这与每根 K 线重新计算有符号 Z 分数仓位有实质差别。
新开仓仅在以下任一条件成立时允许 [8,9]
$$ H_t < 0.5-\delta $$
或
$$ \mathrm{VR}_t(q)<1-\varepsilon, \qquad \mathrm{VR}(q)=\frac{\operatorname{Var}(r_t^{(q)})} {q\operatorname{Var}(r_t^{(1)})}. $$
门控刻意采用包容性 OR 而非联合 AND:当另一诊断不明确时,任一诊断都可以授权开仓。在选中的主规则下,带外候选仍接纳大多数观测(训练集约 83%,测试期约 85%),因此该过滤器是软状态筛选,而不是紧选择器。主实验仅在训练集上联合评估 $q\in{2,5,10}$ 与布林窗口、宽度及中心估计器。选中模型使用 20 期指数加权中心、$k=2$、130 期 Hurst 窗口、$\delta=0.03$、$q=5$,以及方差比容差 0.05。
4.3.1 事后增强设计
完成主实验后,作为课题说明的事后扩展 [12],构造了增强布林规格。它保留 EWMA 中心与波动率,并显式计算标准化偏离与相对带宽:
$$ Z_t=\frac{P_t-\mu_t}{\sigma_t}, \qquad W_t=\frac{U_t-L_t}{\mu_t}=\frac{2k\sigma_t}{\mu_t}. $$
增强只修改开仓许可;方向与平仓规则不变。价格必须首先位于带外。若 $|Z_t|>3.5$,该观测被视为极端冲击或强趋势,不放置反向尾部开仓。$W_t$ 在此前 130 根上的因果分位数必须落在 20% 与 80% 之间:低于 20% 归为挤压,高于 80% 归为高波动/趋势状态。带宽连续三根上升且连续三根收盘位于同一侧带外,也被归为骑带行为 [7]。最终许可为
$$ \mathcal{G}_t= \mathcal{G}^{H/VR}_t \cap\mathcal{G}^{BW}_t \cap|Z_t|\leq3.5. $$
其中 $\mathcal{G}^{H/VR}_t$ 仍为 Hurst/VR 门控。全部门控只影响新开仓;已有仓位保留中轨退出,避免在异常价格上被强制成交。增强模型只在训练数据上比较 $(n,k)\in{20,40}\times{1.5,2.0}$,并预先固定其余阈值。因为该设计发生在观察到主测试结果之后,它被单独报告为事后稳健性实验,并不替代预先指定的主结果。
4.4 辅助特征与 PCA
紧凑特征面板覆盖动量、波动率缩放动量、EWMAC、MACD、ADX、ATR、已实现与下行波动率、回撤、Bollinger %B 与带宽、VWMA 距离、成交量异常、RSI、Hurst、方差比、QQQ–SPY 相对动量,以及滚动 beta。面板刻意保持有限,而不是扩展到数百个高度相关的参数化。
训练集上 13 根秩 IC 绝对值最大者幅度有限:65 期下行波动率(0.070)、65 期已实现波动率(0.069)、波动率缩放的 130 期动量($-0.069$)以及 ATR(0.063)。这些量级表明存在弱但非零的条件关系,而不是立即可交易的预测。图 1 概括了 Rank-IC 分布的两端:波动率与 ATR 主导正侧,若干动量构造位于负侧。该模式警告:不能把“动量”当作在 30 分钟周期上均匀可预测。

PCA 在仅训练集中位数插补与标准化之后拟合 [14]。PC1 解释 42.0% 的特征方差,在 EWMAC、MACD、动量、RSI 与回撤上为正载荷,在波动率度量上为负载荷。因此可近似解释为趋势/风险偏好轴。PC2 解释 16.3%,在已实现波动率、ATR 与布林带宽上有更大的正权重。需要 8 个主成分才能解释 85.5% 的方差。

图 3 中的选中载荷把冗余说得很清楚:许多熟悉的趋势指标载荷在同一主导轴上。PCA 得分不用于交易或选择策略参数。

特征对前瞻收益的信息系数,以及仅训练集参数选择,衡量每条透明信号在时间顺序划分下是否预测后续收益。仅训练集 PCA 概括指标间的共线性;它不是交易模型。没有使用更灵活的黑箱模型,因为可用样本与狭窄的单标的问题,不足以承担额外的泄漏与模型选择风险。第 10 节单独测试 QQQ–SPY 线性组合。
4.5 自定义回测与成本模型
自定义引擎把每个信号映射为波动率目标仓位,遵循系统性交易中波动率缩放的标准理由 [4]:
$$ w_t=\operatorname{clip}\left( s_t\frac{\sigma^\star}{\widehat{\sigma}t}, -w{\max},w_{\max} \right), $$
其中 $\sigma^\star=10%$ 年化波动,$w_{\max}=1$,$\widehat{\sigma}t$ 是跨度 64 的指数加权收益波动率估计。期望仓位 $w_t$ 在收益归因前平移一根 K 线:在 $t$ 收盘形成的信号,作用于从 $t$ 到 $t+1$ 的收盘到收盘收益。交易日志中的仓位变化事件为了运营可读性标记在 Open$(t+1)$,但盈亏归因仍是收盘到收盘,而不是开盘到开盘。换手为 $|w_t-w{t-1}|$。基准单向成本为 5 个基点:1 个基点佣金、2 个基点价差、2 个基点滑点。成本压力把所有分量乘以 2 与 3。
研究报告毛收益与净收益、CAGR、年化波动、Sharpe、Sortino、最大回撤、Calmar、换手与交易次数;Sharpe 采用其标准定义 [15]。Pyfolio-reloaded 从导出的收益、持仓、成交与 SPY 基准收益独立生成日频风险分析表 [16]。
4.6 统计验证
信号 IC 与秩 IC 分别对 1 根与 13 根前瞻收益,在训练、验证与测试观测上度量,以符合课题要求 [12]。测试期平均净收益用双侧 t 检验评估。紧缩夏普比率计入三条主策略全部预先指定的仅训练试验,而不仅仅是获胜策略的网格,并计入收益偏度/峰度。增强布林网格单独列为事后 [10,11]。各策略的毛收益、佣金、价差、滑点与净收益拖累导出为成本归因表。过滤器通过把选中策略与去掉过滤器的匹配版本比较来评估。解释保持保守:验证集改善并不授权随后在测试期重新设计。
4.7 所用数值技术
表 1 概括代码中实现的数值方法。该列表是有意的:每一行对应主实验、诊断或执行证据中实际使用的模块,而不是对可能估计器的穷尽综述。
| 技术 | 在本研究中的角色 | 主要精度 / 方差说明 |
|---|---|---|
| SMA / EWMA 滚动均值与波动率 | 布林规则的中心与宽度;波动目标输入 | 更长跨度降低方差但增加滞后(偏向旧机制) |
| MACD $(12,26,9)$ 柱状图符号 | Trend-A 的固定确认 | 周期不随 EMA 网格再优化;减少自由参数 |
| Wilder ADX | 趋势强度过滤 | 方向中性;短周期 K 线上嘈杂 |
| Bollinger %B / BandWidth | 均值回归位置;Trend-A 扩张过滤 | %B 超出 $[0,1]$ 触发均值回归候选;BandWidth 分位数需要长预热 |
| 滚动 Hurst(对数方差对滞后) | 软均值回归状态筛选 | 简化估计器;高方差、适应慢 |
| 滚动方差比 $\mathrm{VR}(q)$ | 软均值回归状态筛选(与 Hurst 取 OR) | 包容性 OR 接纳大多数带外 K 线;诊断而非正式检验 |
| 仅训练集 OLS 对冲 $\hat\beta$ | QQQ–SPY 对数价差构造 | 训练后冻结以避免泄漏;若联动变化则存在设定偏误 |
| 价差上的滚动 OU / 布林 | 相对价值入场阈值 | 与单名布林相同的窗口长度权衡 |
| 下一根 K 线回测 + 换手成本 | 经济评估 | 收盘到收盘盈亏;Open$(t+1)$ 只标记交易;固定基点省略冲击 |
| 波动率目标 | 仓位缩放到 10% 年化波动 | 限制杠杆;不创造 alpha |
| 成本归因 + $1\times$–$3\times$ 压力 | H4 / 成本通道 | 比例压力;不是微观结构校准 |
| 过滤器消融 | 门控的因果贡献 | 匹配的测试比较;不能挽救负夏普 |
| 跨周期回放 | 抽样稳健性 | 在 30 分钟参数下的全样本——仅用于提出假设 |
| IC / Rank IC、$t$ 检验、紧缩夏普 | 统计验证 | DSR 针对试验次数与非正态性调整;IC 路径显示时间方差 |
| 仅训练集 PCA | 共线性诊断 | 不用于交易;8 个成分达到 85% 方差 |
| Tick / 成交量 / 金额 K 线代理 | 与课题对齐的抽样诊断 | 由 1 分钟 OHLCV 构建,不是交易所逐笔 |
| 事件排序器(Rust / Python) | 经纪商消息顺序与去重 | 实盘提交时对冲突 ID 失败即关闭 |
表 1. 已编码并用于报告实验的数值技术。
5. 实证结果
第 5 节先比较三条主规则的样本外表现,再压力测试经济与过滤假设:比例成本乘数、匹配过滤器消融、跨周期诊断,以及标注为事后的增强布林练习。在表格之前,5.0 小节说明估计器的偏误、方差与精度如何限制图能声称什么。
5.0 统计与计算性质
实证图应被读作关于估计器噪声与设计偏误的陈述,而不仅仅是业绩图。
偏误。 固定 5 个基点的单向成本忽略时变价差与冲击,因此毛到净缺口可能因真实流动性机制而偏乐观或偏悲观。收盘到收盘收益归因与软 Hurst/VR OR 门控都会倾斜设计:前者是会计约定而非开盘到开盘盯市,后者接纳大多数带外候选(第 4.3 节),因此“过滤后的”均值回归只被弱筛选。仅训练集参数选择与 13 根禁运降低前瞻偏误;它们并不能消除模型误设。
方差。 短周期信号与滚动 Hurst/VR 估计是高方差对象。图 8 显示年度 IC 与 Rank IC 反复变号,这是不稳定方向预测的统计对应物。Trend-A 与 Trend-B 的高换手放大权益与回撤中的路径噪声(图 4–5)。图 1 的 Rank-IC 极值在绝对水平上有限,与弱信噪比一致,而不是尖锐的预测优势。
精度与收敛。 拉长估计窗口提高稳定性但增加滞后:PCA 需要 8 个成分才能达到特征方差的 85%(图 2–3),说明的是冗余而不是低维交易因子。图 6 的划分夏普表明,即便 Trend-B——唯一在训练与验证上都有正夏普的主规则——也无法把该成功带到正的测试夏普;Trend-A 与 MR-BB 在训练中已经偏弱,样本外进一步恶化。成本压力(图 9)显示,把单向成本乘数从 $1\times$ 提高到 $3\times$ 会加深净亏损,而 $1\times$ 基准本身也从未给这些规则带来稳健为正的净夏普——MR-BB 甚至在毛收益上仍为负。跨周期夏普(图 11)在小时/日线全样本意义上改善,但该模式不是在重新选择参数下的独立样本外收敛结果。
5.1 样本外表现
| 策略 | 测试收益 | 测试夏普 | 测试最大回撤 | 测试换手 |
|---|---|---|---|---|
| EMA–MACD–ADX | −21.92% | −1.573 | −25.23% | 382.28 |
| VWMA 比率 | −17.43% | −0.633 | −21.85% | 328.09 |
| 条件布林 | −11.20% | −0.911 | −14.23% | 126.04 |
关于 30 分钟样本外正净收益的主假设均未得到支持。基准买入持有策略在全样本上收益 545.7%,夏普 0.925,尽管这不是风险或暴露匹配的比较。
图 4 把三条净权益路径对照买入持有。买入持有增长超过 6 倍,而三条策略在基准成本后均收于 1 以下。Trend-B 是三条主动规则中破坏最小的,但在 2022 年之后仍衰减。Trend-A 与条件布林在样本上持续走低。

图 5 给出对应回撤路径。Trend-A 与 Trend-B 在高换手下经历深度且持续的回撤,布林回撤幅度更小但仍长期存在。图 6 再按时间顺序划分分解净夏普。Trend-B 是唯一在训练与验证上夏普为正的规则,但未触碰测试夏普塌陷到 $-0.633$。Trend-A 与 MR-BB 在训练中已经偏弱,样本外进一步恶化。


EMA–MACD–ADX 测试均值在未调整 t 检验下显著为负($t=-2.71$,$p=0.0067$),表明在零均值 IID 近似下存在持续亏损。比率与布林测试均值在 5% 水平上与零无显著差异($p=0.275$ 与 $p=0.116$)。
三条策略的紧缩夏普概率分别为 0.0000015、0.00113 与 0.000204(图 7)。这些数值不支持观测测试夏普超过经多重检验调整后的基准。图 8 中的年度 IC 路径同样不稳定且频繁变号,强化了方向信号在时间上并不稳健的结论。


5.2 成本与毛表现
交易成本是实质性的,但不是失败的唯一原因。全样本上,EMA–MACD–ADX 策略毛收益为 $+16.2%$,净收益为 $-41.7%$;成本加倍后净收益降至 $-70.7%$。比率策略毛收益 $59.6%$,基准净收益 $-8.7%$;成本加倍产生 $-47.8%$。均值回归策略在扣费前已经为负(毛 $-4.5%$),基准成本下净收益降至 $-24.4%$。因此 H4 得到支持:成本显著损害全部短周期策略,而均值回归规则还受困于疲弱的毛 alpha。
图 9 把成本通道说清楚。把单向成本从 $1\times$ 提高到 $3\times$,三条全样本净夏普都更深地进入负值。Trend-B 在基准成本下最接近零,因此对成本乘数最敏感;MR-BB 即使在扣费前仍为负,所以压力测试主要是放大已经疲弱的信号。

5.3 过滤器消融
去掉 ADX 与带宽过滤,使 Trend-A 测试夏普从 $-1.573$ 改善到 $-1.055$,但表现仍不可接受。用纯价格短期估计替换 VWMA,使比率夏普从 $-0.633$ 变为 $-0.587$;成交量加权并未改善样本外表现。去掉 Hurst/VR 门控,使布林夏普从 $-0.911$ 恶化到 $-1.218$。状态过滤器因此改善了相对均值回归表现,但并没有创造可盈利策略。H3 获得有限的相对支持,而 H1 与 H2 在当前形式上被拒绝。图 10 在未触碰测试期上比较每条选中规则与其匹配消融。

5.4 周期诊断
把选中的比率规格应用到全样本,夏普比率为:15 分钟 $-0.524$,主 30 分钟全样本 $-0.044$,小时线 $0.289$,日线 $0.688$(图 11)。该模式与更低频信号经历更少微观结构噪声与换手相一致 [1]。然而它不是有效的样本外证明,因为这些数字是全样本诊断,且参数来自 30 分钟实验。未来研究必须对每个周期独立重复训练/验证/测试选择。

5.5 事后增强布林稳健性检验
在观察到主测试结果后,作为课题说明的扩展 [12] 实现了增强规格。它保留 EWMA Bollinger %B 开仓与中轨平仓,但增加三项仅开仓控制:尾随 BandWidth 分位数门控、上升带宽骑带否决,以及超过 3.5 个标准差的极端尾部否决。Hurst/VR 仍是状态过滤器而不是方向信号。因为 2023–2025 结果已经已知,这被明确标为事后稳健性练习,而不是新的未触碰样本外测试 [10,11]。
仅训练集选择选中 40 根 EWMA 中心与宽度 2.0。相对原始 MR-BB,测试夏普从 $-0.911$ 改善到 $-0.803$,测试收益从 $-11.2%$ 到 $-9.8%$,最大回撤从 $-14.2%$ 到 $-11.7%$。换手从 126.0 降至 68.3。值得注意的是,毛收益从 $-5.42%$ 恶化到 $-6.70%$;净改善来自更低的交易成本,而不是更强的预测 alpha。因此改善在相对描述意义上是真实的,但策略仍不可盈利。
| 测试期版本 | 净收益 | 毛收益 | 净夏普 | 最大回撤 | 换手 |
|---|---|---|---|---|---|
| 原始 MR-BB(20 根 EWMA) | −11.20% | −5.42% | −0.911 | −14.23% | 126.04 |
| 完整增强规则(40 根 EWMA) | −9.84% | −6.70% | −0.803 | −11.69% | 68.27 |
表 2. 原始与增强布林规则在 2023–2025 测试期上的描述性比较。增强规则为事后分析。
图 12 中的门控消融比标题比较更重要。去掉 BandWidth 门控使测试夏普改善到 $-0.253$,去掉 Hurst/VR 改善到 $-0.646$,朴素 40 根 EWMA 布林版本记录 $-0.268$。3.5 倍标准差否决不改变测试期表现,因为它只挡住一根候选 K 线,且该 K 线并不改变实现仓位路径。因此,更慢的 40 根估计器与更低换手解释了相对原始 20 根规则的大部分改善;额外门控在本样本中并未赚回成本。这并不推翻 主 MR-BB 规则上的 H3(第 5.3 节),在那里去掉预先指定的 Hurst/VR OR 门控会恶化测试夏普;增强消融是另一个已经多重门控的 40 根对象,并且明确是事后的。
| 40 根 EWMA 消融 | 测试净收益 | 测试毛收益 | 测试夏普 | 测试最大回撤 |
|---|---|---|---|---|
| 全部门控 | −9.84% | −6.70% | −0.803 | −11.69% |
| 无极端否决 | −9.84% | −6.70% | −0.803 | −11.69% |
| 无 BandWidth 门控 | −4.26% | +1.42% | −0.253 | −8.79% |
| 无 Hurst/VR | −8.97% | −5.00% | −0.646 | −11.41% |
| 朴素 EWMA 布林 | −4.80% | +1.64% | −0.268 | −10.05% |
表 3. 增强布林的匹配门控消融。全部数字都是已观察到的测试期上的事后诊断。

6. 讨论
证据拒绝“所测 30 分钟形式能够产生稳健净 alpha”的命题。该结果在经济上说得通。趋势规则相对日内噪声反应偏慢,而频繁仓位变化累积价差与滑点。比率策略展示正的毛表现,但无法克服基准换手成本。布林回归交易更少,但其毛收益为负,表明 QQQ 对短波动包络的偏离往往继续,而不是足够快地回归。微观结构解释与价差、换手与实施缺口的标准处理一致 [1];QQQ 特定的表现陈述是本研究的结果。
紧凑特征研究也警告:不能声称“动量在所有设定下都准确”。若干动量特征在训练中 13 根 IC 为负,而波动率特征拥有最大的正秩 IC。PCA 确认许多熟悉的趋势指标共享一个主导信息轴。因此测试数百个相关指标会制造许多名义试验,却加不进等价的独立信息。
即便所测信号疲弱,执行控制仍然必要。重复订单、陈旧 K 线或未对账持仓,会增加本已不可盈利策略的风险。
7. 交易系统实现
执行设计使用 ib_async 连接 TWS 或 IB Gateway Paper [17,18]。QQQ 与 SPY 合约使用 IBKR SMART 路由与美元计价。适配器支持市价、限价、止损与止损限价单,并校验 DAY、GTC 与 IOC 有效期。信号循环使用 LMT/DAY;Paper 演示覆盖 LMT 与 STP。其订单刻意不可立即成交,以便在测试 API 路径时减少意外成交。
Paper 信号循环使用固定 10 股目标做功能测试。它不复制历史回测中的波动率目标仓位,因此 Paper/回放的订单数量与风险统计不与回测组合比较。批准的 Trend-A 参数在 paper_strategy 配置中显式给出。实盘历史请求覆盖 30 个日历日,IBKR 的 K 线起始时间戳被转换为 UTC 完成时刻;正在形成的 K 线被排除。在 20 根 BandWidth 与 130 根有效观测分位数所需的 149 根观测可用之前,循环返回 INSUFFICIENT_HISTORY 而不是空仓信号。
每个策略决策由策略、代码、信号时间戳与目标数量生成确定性客户订单标识。重复的 cron 调用或进程重启因此会取回已有订单,而不是提交重复单。订单生命周期为:
$$\mathrm{CREATED}\rightarrow\mathrm{SUBMITTED}\rightarrow\mathrm{ACKNOWLEDGED}\rightarrow\mathrm{PARTIAL}\rightarrow\mathrm{FILLED}$$
并带有 CANCELLED 与 REJECTED 终态分支。不可能或冲突的转移变为 UNKNOWN。
ClickHouse 表持久化信号、订单、原始事件、成交、对账运行与系统状态,包括已完成 K 线快照。累积成交数量由成交决定,而不是由单一订单状态回调决定。对账过程比较本地由成交推导的持仓与 IBKR 持仓,并查询未完成订单、成交与账户值。任何不一致都会激活粘性熔断并阻止新风险;之后一次匹配轮询也不会在没有操作员动作时清除它。配置的持仓偏离限额由风险门独立检查。同一时间戳上重复或冲突的 OHLCV、时间回退、陈旧/未来数据,以及异常收盘跳变,都会拒绝该信号周期。
一个范围狭窄的 Rust 组件通过 PyO3 暴露,在持久化前规范化经纪商消息顺序。它按事件时间、可选经纪商序号、成交优先级、接收时间与事件 ID 排序;成交消息优先于同时刻的状态消息,以免迟到成交被取消回调吞掉。精确的成交 ID 重复被删除,而同一 ID 内容不同则是冲突。实盘提交要求 Rust 组件,并在不可用或冲突时失败即关闭。Dry-run 与回放在显式设置 CQF_SEQUENCER=python 时可以使用经过测试的等价 Python 实现。
确定性 MockBroker 注入拒单、部分成交、断线、错报持仓、乱序成交、精确重复、冲突 ID,以及取消/成交竞态。单元测试验证部分成交正确聚合、重复提交保持幂等、断线产生显式 UNKNOWN 状态,以及持仓错报激活熔断。
| 注入故障 | 要求结果 |
|---|---|
| 乱序成交 | 在账本写入前按事件时间稳定排序 |
| 精确重复成交 ID | 一条持久化成交与一个重复计数器 |
| 冲突重复 ID | 不持久化冲突成交;提交失败即关闭 |
| 取消/成交竞态 | 由成交推导的数量优先于状态 |
| 重连 | 在允许提交前刷新成交、持仓与未完成订单 |
回放证据包含 11 条注入成交消息,为 10 条保留事件恢复顺序,删除 1 条精确重复,并写入 10 条唯一成交。第二批 12 条消息加入 1 个冲突 ID;它记录 1 次冲突并排除该 ID 的两个版本。
8. 运营风险与部署
项目把信号、对账、健康检查与回放命令分开。文件系统锁防止重叠的信号运行。预交易检查在订单名义金额、总暴露、日亏损、未完成订单数、数据年龄或熔断状态突破配置限额时拒绝订单。未知账户状态失败即关闭。
Docker 使用多阶段 Rust-wheel/Python 构建,Compose 提供信号、对账、健康与回放服务,没有单独的排序 sidecar。Compose 配置通过校验,镜像可在本地构建。运行时依赖主机 ClickHouse,以及经由 host.docker.internal 可达的 TWS/Gateway Paper。
历史回放把同一信号周期模块,配合 MockBroker 与单独的 ClickHouse 数据库,应用到最近 20 个交易日。它完成了 259 个周期、10 次目标变化与 10 笔模拟成交。平均到达缺口约为 $+25.67$ 个基点,因为 MockBroker 成交了刻意不可立即成交的测试限价。该数值测试的是度量管道;真正的实施缺口需要 IBKR Paper 或实盘成交 [1]。
运营报告命令直接读取 ClickHouse 经纪商成交与 K 线快照,然后导出到达/VWAP 缺口、由成交推导的日盈亏、滚动 VaR、动态回撤与 SPY beta。在 2026 年 8 月 3 日美国常规交易时段,Paper 订单路径端到端成功:冒烟测试保留 387–388 根已完成 30 分钟 K 线,相对 149 根最小值;对账匹配空仓账户;选中的 Trend-A 规则在已完成的 14:30 ET K 线上产生 BUY 10 目标;其远离市价的 DAY 限价 698.00 美元被 IBKR 确认,超时后取消,成交数量为零;随后在已完成的 15:00 ET K 线上的 dry-run 再次提出 BUY 10;另外一次 LMT/STP 演示也干净地提交并取消(any_fill=false)。因此实盘业绩报告仍为 empty_pending,因为该命令只索引已持久化的经纪商成交——而不是因为提交失败。远离市价定价是刻意的,所以没有成交进入账本,也没有用模拟值替换。本次提交的第 3 部分执行基准与缺口证据是上面的确定性 Mock 回放(10 笔成交,约 $+25.67$ 个基点),与 Paper 经纪商账本分开保存。
随后的图来自第 1 部分回测日频序列,而不是 IBKR Paper 成交。日频输出供给 Pyfolio [16]、滚动 VaR、滚动波动率、动态回撤与滚动 SPY beta。这把拥有执行与成本的自定义回测,与独立的业绩报告层分开。图 13 概括选中 Trend-A 策略的日频风险路径:滚动波动率保持偏高,动态回撤在多年区间加深,滚动 SPY beta 不稳定且常常接近零或为负——与高换手规则而不是简单的股票多头克隆一致。图 14 是从同一日频序列导出的对应 Pyfolio 收益分析表。


9. 局限
由分钟派生的 OHLCV K 线不包含交易所逐笔序列、报价、队列优先级或订单簿深度,因此事件 K 线研究只把一分钟行当作抽样代理。固定基点成本模型也省略时变价差与市场冲击。因为 QQQ 是唯一主标的,结果并不能确立跨资产稳健性。
Hurst 与方差比估计嘈杂,并对机制变化反应缓慢;此处使用的包容性 OR 门控因此仍是软筛选,如第 4.3 节所量化。第 5.4 节的跨周期夏普是在 30 分钟选中规则下的全样本诊断,不得读作独立样本外成功。尽管有时间顺序划分与紧缩夏普调整,参数试验仍是选择风险的来源 [1,8–11,13]。数据谱系是另一约束:第三方卖方既未提供可独立核验的交易所级谱系,也未提供有文档的复权方法,尽管本地文件通过了第 3 节报告的完整性检查。
MockBroker 与历史回放测试的是软件行为,而不是经纪商执行。IBKR Paper 增加对套接字行为、确认与对账的外部检查,但其成交由最优报价模拟,部分订单类型也与生产不同 [19]。
10. 相对价值均值回归
在主单资产布林结果毛、净均失败之后,交易对象被改为相对价值价差,而不是继续增加单名门控。对冲比率 $\hat\beta$ 由仅训练集 OLS 在对数价格上估计,
$$ \log P^{\mathrm{QQQ}}_t = a + \hat\beta\log P^{\mathrm{SPY}}_t + e_t, $$
此后保持固定。交易对象是对数价差 $S_t=\log P^{\mathrm{QQQ}}_t-\hat\beta\log P^{\mathrm{SPY}}t$。入场阈值要么是 $S_t$ 上的布林带,要么是滚动 Ornstein–Uhlenbeck 均衡带 $\hat\mu\pm z\hat\sigma{eq}$。仓位是对应的多/空对冲组合,而不是只过滤 QQQ。选择仍只用训练集夏普;验证与测试从不选择参数。成功要求 (i) 测试毛夏普为正,且 (ii) 扣费后测试净均值不显著为负。价差/OU 框架遵循均值回归配对的标准实务处理 [20]。
选中的 30 分钟规则使用 $\hat\beta\approx 1.53$、40 根 EWMA 布林包络且 $k=2$,以及 Hurst/VR 开仓门控(12 次训练试验)。它未通过所述成功标准:测试毛夏普约 $-1.40$,测试净夏普 $-2.04$,双侧均值收益 $p$ 值为 0.0004。全样本毛收益也为负($-19%$),因此成本不是唯一解释。保持同一 $\hat\beta$ 与参数固定,该规则在小时数据上仍然疲弱(测试夏普 $\approx -0.68$),在日线上接近持平但仍非正(测试夏普 $\approx -0.08$)。因此在本设计下,相对价值均值回归并不能扭转主负向结论。
11. 结论
所测透明 30 分钟策略未能在 2023–2025 测试期于 QQQ 上产生统计稳健的净收益。EMA–MACD–ADX 与 VWMA 比率未能通过其正 alpha 假设;Hurst/VR 门控相对无门控版本改善了布林均值回归,但得到的策略仍不可盈利。交易成本是趋势规则失败的主要原因,而均值回归规则还缺乏毛盈利能力。
完整增强布林规则相对原始 MR-BB 降低了换手、亏损与回撤,但匹配消融把大部分改善归因于更慢的 40 根 EWMA 中心,而不是 BandWidth、Hurst/VR 或 3.5 倍标准差极端否决。特别是,去掉 BandWidth 门控使测试夏普从 $-0.803$ 改善到 $-0.253$,而极端否决几乎没有经济效果。这些增强消融不得被读作推翻原始 MR-BB 规格上的 H3,在那里 Hurst/VR OR 门控仍相对无门控规则改善测试夏普。
QQQ–SPY 价差实验同样未能通过 30 分钟数据上的毛/净成功标准,并且在不重新优化的情况下应用到 1 小时与 1 日 K 线时仍非正。因此后续工作应强调更好的成本度量与真实 Paper 会话,而不是继续增加单名布林门控。
工程结果更具建设性。相对简单的策略可以被嵌入可审计的执行架构,包含确定性订单身份、显式状态转移、独立的成交/持仓对账、故障注入、风险限额与失败即关闭恢复。该运营层并不能挽救疲弱策略,但可以防止经纪商与流程失败在沉默中增加风险。
方法优点。 透明规则与闭式指标使每条信号可审计。仅训练集选择、禁运 K 线、IC/DSR 诊断、成本压力与匹配消融,把统计伪迹与经济主张分开。同一代码库把规则带入带对账与排序的失败即关闭经纪商路径。
方法缺点。 滚动 Hurst/VR 与短周期 IC 估计高方差;包容性 OR 门控是弱筛选。固定基点成本与收盘到收盘盈亏相对真实执行过于粗糙。Paper 证据强调订单生命周期,而不是成交丰富的实盘基准,单名 QQQ 结果本身也不能推广。
11.1 未来研究
未来研究应首先检验负结果是否特定于单资产日内设计。时点、受存活偏差控制的标普 500 或纳斯达克 100 股票池,将允许在小时与日线上比较时间序列、横截面与市场 beta 残差动量 [3,21]。VIX 期货期限结构可以作为候选条件变量来评估,而不是被施加为趋势与均值回归策略之间的确定性开关 [22]。任何增量价值应通过事先声明的消融、未触碰测试期,以及计入紧缩夏普分析的试验次数来度量 [10,11]。
度量层也应超越一分钟 OHLCV 代理与固定基点成本。成交量与金额 K 线可以从可独立核验的成交与报价重建,而订单簿深度数据将允许订单流失衡、价差、深度与队列敏感诊断 [13,23]。期权推导的 gamma 暴露只有在归档期权链、未平仓合约与计算假设可复现时才应研究。执行成本随后可以使用时变价差与经验估计的参与/冲击模型 [1,24]。带时间戳的 Paper 会话与严格控制的小额实盘订单,可以度量确认延迟、成交概率、部分成交与逆向选择。目标是量化——而不是声称消除——模拟与实现执行之间的缺口,同时保持本研究使用的同一训练/验证/测试纪律。
参考文献
[1] Harris, L. (2003) Trading and Exchanges: Market Microstructure for Practitioners. Oxford: Oxford University Press.
[2] Invesco (2026) Invesco QQQ ETF. Available at: https://www.invesco.com/qqq-etf/en/home.html (Accessed: 4 August 2026).
[3] Moskowitz, T.J., Ooi, Y.H. and Pedersen, L.H. (2012) ‘Time Series Momentum’, Journal of Financial Economics, 104(2), pp. 228–250. doi:10.1016/j.jfineco.2011.11.003.
[4] Carver, R. (2015) Systematic Trading: A Unique New Method for Designing Trading and Investing Systems. Petersfield: Harriman House.
[5] Appel, G. (2005) Technical Analysis: Power Tools for Active Investors. Upper Saddle River, NJ: Financial Times Prentice Hall.
[6] Wilder, J.W. (1978) New Concepts in Technical Trading Systems. Greensboro, NC: Trend Research.
[7] Bollinger, J. (2001) Bollinger on Bollinger Bands. New York: McGraw-Hill.
[8] Hurst, H.E. (1951) ‘Long-Term Storage Capacity of Reservoirs’, Transactions of the American Society of Civil Engineers, 116, pp. 770–799. doi:10.1061/TACEAT.0006518.
[9] Lo, A.W. and MacKinlay, A.C. (1988) ‘Stock Market Prices Do Not Follow Random Walks: Evidence from a Simple Specification Test’, The Review of Financial Studies, 1(1), pp. 41–66. doi:10.1093/rfs/1.1.41.
[10] Bailey, D.H. and López de Prado, M. (2014) ‘The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting, and Non-Normality’, The Journal of Portfolio Management, 40(5), pp. 94–107. doi:10.3905/jpm.2014.40.5.094.
[11] Bailey, D.H., Borwein, J.M., López de Prado, M. and Zhu, Q.J. (2017) ‘The Probability of Backtest Overfitting’, The Journal of Computational Finance, 20(4), pp. 39–69. doi:10.21314/JCF.2016.322.
[12] CQF Institute (2026) Trend Following and Mean Reversion Trading: Final Project Brief. Unpublished course material.
[13] López de Prado, M. (2018) Advances in Financial Machine Learning. Hoboken, NJ: John Wiley & Sons.
[14] Jolliffe, I.T. (2002) Principal Component Analysis. 2nd edn. New York: Springer. doi:10.1007/b98835.
[15] Sharpe, W.F. (1966) ‘Mutual Fund Performance’, The Journal of Business, 39(S1), pp. 119–138. doi:10.1086/294846.
[16] Jansen, S. and contributors (2026) pyfolio-reloaded: Portfolio and Risk Analytics in Python. Available at: https://github.com/stefan-jansen/pyfolio-reloaded (Accessed: 31 July 2026).
[17] Interactive Brokers (2026) TWS API Documentation. Available at: https://interactivebrokers.github.io/tws-api/ (Accessed: 31 July 2026).
[18] ib-api-reloaded contributors (2026) ib_async: Python Sync/Async Framework for the Interactive Brokers API. Available at: https://github.com/ib-api-reloaded/ib_async/ (Accessed: 4 August 2026).
[19] Interactive Brokers (2026) Paper Trading vs Live Trading—What’s the Difference? Available at: https://www.interactivebrokers.com/campus/trading-lessons/paper-trading-vs-live-trading-whats-the-difference/ (Accessed: 4 August 2026).
[20] Chan, E.P. (2013) Algorithmic Trading: Winning Strategies and Their Rationale. Hoboken, NJ: John Wiley & Sons. doi:10.1002/9781118676998.
[21] Jegadeesh, N. and Titman, S. (1993) ‘Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency’, The Journal of Finance, 48(1), pp. 65–91. doi:10.1111/j.1540-6261.1993.tb04702.x.
[22] Simon, D.P. and Campasano, J. (2014) ‘The VIX Futures Basis: Evidence and Trading Strategies’, The Journal of Derivatives, 21(3), pp. 54–69. doi:10.3905/jod.2014.21.3.054.
[23] Cont, R., Kukanov, A. and Stoikov, S. (2014) ‘The Price Impact of Order Book Events’, Journal of Financial Econometrics, 12(1), pp. 47–88. doi:10.1093/jjfinec/nbt003.
[24] Almgren, R., Thum, C., Hauptmann, E. and Li, H. (2005) ‘Direct Estimation of Equity Market Impact’, Risk, 18(7), pp. 58–62.