高频数据问题处理¶
1. 数据采样(解决“时间不规则”问题)
- 收盘价格采样:取时间段内最后一条有效报价,代码逻辑为“遍历时间段内数据,记录最后一条非空报价”(适用于低频率回测,假设无新数据时价格不变);
- 线性插值采样:处理数据间隔不均,代码实现公式$ \hat{q}{t}=q }+\left(q_{t, next }-q_{t, last }\right) \frac{t-t_{last }}{t_{next }-t_{last }\((\) t \(为目标采样时间,\) q_{t, last } \(为前序报价,\) q_{t, next } $为后序报价),适用于高频数据连续性要求高的场景;
- 成交量采样:按固定成交量划分“时间单位”(如每50合约为一个单位),代码需累计成交 volume,达到阈值时记录数据(减少时间偏差对策略的影响)。
2. 买卖方向判断(解决“无买卖标识”问题)
- Tick Rule(基于前后成交价): 代码逻辑:若当前成交价 > 前成交价 → 买方发起(uptick);若当前 < 前 → 卖方发起(downtick);若相等 → 继承上一次非零方向(如上次是uptick则记为zero-uptick);
- Lee-Ready Rule(结合报价与Tick): 代码逻辑:先判断成交价是否偏离买卖价差中点(成交价>中点→买方,<中点→卖方);若在中点,则用Tick Rule补充判断;
- Bulk Volume Classification(批量成交量概率判断): 代码实现公式$ Pr\left(V_{\tau}=B\right)=Z\left(\frac{p_{\tau}-p_{\tau-1}}{\sigma \Delta P}\right) \((\) Z \(为标准正态分布PDF,\) p_{\tau}-p_{\tau-1} \(为价格差,\) \sigma \Delta P \(为价格差标准差),再计算买方发起成交量\) V_{\tau}^{B}=V_{\tau}×Pr\left(V_{\tau}=B\right) $。
3. 数据噪声处理(修正“买卖价差波动”)
实现“中间价计算”逻辑,消除 bid-ask bounce 对数据的干扰 代码公式:$ \hat{q}{t\right) }}^{m}=\frac{1}{2}\left(q_{t_{a}}^{a}+q_{t_{b}}^{b\(,其中\) t_{m} \(取“最新买价/卖价的时间戳(谁更新取谁)”,确保中间价实时同步市场变化; 进阶:若需考虑订单量权重,代码实现size-weighted中间价\) \tilde{q}{t}^{s}=\frac{q }}^{b} s_{t_{a}}^{a}+q_{t_{a}}^{a} s_{t_{b}}^{b}}{s_{t_{a}}^{a}+s_{t_{b}}^{b}\((\) s $为买/卖价对应的订单量)。