# 策略解构 ## 核心逻辑 这份研报研究的是加密货币永续合约在 1 秒级别的订单簿微观结构。核心判断是:只要把盘口状态和同期成交流转换成相对量,跨资产都能观察到稳定的短周期收益预测关系。最重要的信号不是传统日频因子,而是订单簿失衡、相对价差、以及买卖成交 VWAP 相对中间价的偏离。 策略本质上是一个“微观结构状态 -> 未来 3 秒中间价收益”的预测问题。模型先用盘口顶部与成交特征预测 3 秒前瞻对数收益,再把连续预测值转换成交易信号:当预测绝对值超过阈值时,按预测方向开仓;当方向变化或信号消失时,平仓或反手。 ## 交易标的 - 论文原文:Binance Futures 永续合约,代表性标的为 BTC、LTC、ETC、ENJ、ROSE。 - 本次工程实现:输入协议不限制具体合约,只要本地表满足统一字段,就可以复用于任意 Binance 合约的 1 秒级历史切片。 ## 择时/选股规则 - 选股层面:论文不是横截面多因子选币,而是验证“同一特征库可迁移到多个币种”。因此工程实现里不内嵌资产筛选器,默认按单一 `symbol` 的本地历史表运行。 - 择时层面: - 先构造中间价、相对价差、顶档深度、顶档失衡、净主动成交量、订单流失衡、买卖 VWAP 偏离等特征。 - 用 CatBoost 预测未来 3 秒中间价对数收益。 - 当 `|prediction| > theta` 时触发交易,方向取预测符号。 - `prediction > theta` 做多,`prediction < -theta` 做空,否则空仓。 ## 执行逻辑 ### Taker - 论文原设定:买入按最优卖价成交,卖出按最优买价成交。 - 工程实现: - 开多用 `ask_price`,开空用 `bid_price`。 - 多头库存按 `bid_price` 估值,空头库存按 `ask_price` 估值,刻意悲观。 - 只在信号变化时调仓,避免无意义高换手。 - 支持手续费参数。 ### Maker - 论文原设定:使用固定深度的被动挂单回测,强调逆向选择风险。 - 工程实现中的保守近似: - 当信号要求建仓或平仓时,在当前最优价挂一档被动单。 - 下一时刻若出现“穿价”或成交 VWAP 显示价格已经触碰挂单,则认为被动单成交。 - 该近似不是逐笔排队仿真,而是可测试、可解释的保守代理,重点保留“被动成交更容易在不利行情中吃到逆向选择”的论文结论。 ## 适用市场状态 - 更适合盘口信息充分、成交连续、撮合活跃的高频环境。 - 在相对窄价差、深度尚可、订单流失衡持续的阶段更容易发挥作用。 - 宽价差、极端波动、延迟显著或流动性突然抽空的状态下,吃单收益会被快速侵蚀,而做市面临更强逆向选择。 # 模型与数学定义 ## 目标变量 论文目标为未来 3 秒中间价对数收益: $$ r_{t \rightarrow t+3s} = \log\left(\frac{mid_{t+3s}}{mid_t}\right), \quad mid_t = \frac{ask_t + bid_t}{2} $$ 本次实现默认保留同样的 3 秒窗口,并允许通过 `horizon_seconds` 参数调整。 ## 特征工程 ### 论文原始思想 - 盘口顶部特征:反映即时流动性与交易成本。 - 订单流与成交失衡:反映主动买卖压力。 - VWAP 相对中间价偏离:反映短期知情交易和微观结构回归。 - 特征尽量用相对量表示,减少跨币种价格尺度差异带来的扭曲。 ### 本次实现的具体因子 - `mid_price = (bid_price + ask_price) / 2` - `spread = ask_price - bid_price` - `relative_spread = spread / mid_price` - `top_depth = bid_size + ask_size` - `depth_imbalance = (bid_size - ask_size) / (bid_size + ask_size)` - `net_volume = buy_volume - sell_volume` - `order_flow_imbalance = net_volume / (buy_volume + sell_volume)` - `buy_vwap_deviation = (buy_vwap - mid_price) / mid_price` - `sell_vwap_deviation = (sell_vwap - mid_price) / mid_price` - `vwap_pressure = ((buy_vwap * buy_volume) - (sell_vwap * sell_volume)) / ((buy_volume + sell_volume) * mid_price)` 说明:这些特征直接对应论文反复强调的三类核心信息通道,即失衡、价差和 VWAP 偏离。为了避免未来信息泄露,所有特征都仅使用当前及历史时点的数据,而目标收益单独向前平移 3 秒生成。 ## 模型架构 ### 论文原设定 - 模型:CatBoost 梯度提升树。 - 训练:平方误差回归。 - 选模:用方向感知的 GMADL 指标挑选最优模型。 - 调参:Optuna + 时间序列交叉验证。 - 解释:TreeSHAP。 ### 本次工程实现 - `epcmbot.modeling` 中使用 `CatBoostRegressor(loss_function="RMSE")` 训练回归模型。 - 用 `Optuna` 搜索: - `depth` - `iterations` - `learning_rate` - `l2_leaf_reg` - 采用带 `purge window` 的滚动前向验证:训练窗、清洗窗、测试窗严格按时间顺序排列。 - 输出两套结果: - 主模型:以 GMADL 平均得分最高的参数组为主。 - 基线模型:以样本外 `R^2` 更优的参数组为对照。 ## GMADL 定义 论文中的 GMADL 用来强调“方向对不对”比“小数值误差”更重要: $$ \ell_i = -\left(\frac{1}{1 + e^{-a R_i \hat{R}_i}} - \frac{1}{2}\right) |R_i|^b $$ 在实现中我们使用等价的“平均奖励”形式来做最大化: $$ GMADL\ Score = \frac{1}{N} \sum_i \left(\frac{1}{1 + e^{-a R_i \hat{R}_i}} - \frac{1}{2}\right) |R_i|^b $$ 这样当预测方向和真实收益方向一致时,得分提高;当大波动行情方向判断正确时,奖励更大。 ## SHAP 解释 - 使用 `TreeExplainer` 计算全局特征重要性。 - 以平均绝对 SHAP 值排序,识别最重要因子。 - 额外导出顶部特征的依赖数据表,便于观察论文中提到的“单调但极值处边际递减”的失衡效应。 - 当前版本以结构化表输出为主,不强制生成图片。 ## 回测与风险评估 ### 关键指标 实现中提供以下指标: - `ARC`:年化复合收益 - `ASD`:年化标准差 - `Sharpe Ratio / IR*`:在无风险利率近似为 0 的假设下,用 `ARC / ASD` - `MDD`:最大回撤 - `MLD`:最大亏损持续期 - `IR**`:结合收益方向和最大回撤的改进信息比率 - `t-stat / p-value`:检验收益均值是否显著偏离 0 ### 主要风险 - 过拟合:可能只在当前交易所、当前窗口和样本期有效。 - 延迟与滑点:高频收益很容易被实盘基础设施摩擦吃掉。 - 流动性蒸发:极端事件中固定名义仓位会高估真实成交容量。 - 逆向选择:做市在单边行情中尤其脆弱。 - 信号拥挤:同类失衡模型可能形成自强化反馈。 - 浅层大单诱导:虚假挂单会扭曲失衡特征并误导模型。 ### 工程边界说明 - 以上回测严格基于本地输入数据表,不含在线行情抓取器。 - Maker 成交逻辑是保守近似,不是逐笔队列仿真。 - 测试使用仓库内 Binance 历史切片验证接口和真实分布下的基本行为,但不把短样本结果解释为策略最终可交易性证明。