BOCPD drift_threshold 参数说明
BOCPD drift_threshold 参数说明
概述
drift_threshold 是 BOCPD(Bayesian Online Change Point Detection,贝叶斯在线变点检测)模块中的核心参数,用于定义**"有经济意义的最小漂移"**。
它回答的核心问题是:
每根 K 线的均值收益率 |μ| 要多大,才能被判定为"市场处于趋势中"?
该参数位于动量过滤器 Layer 0(BOCPD 机制检测层),直接影响硬拦截决策。
数学原理
P(trending) 的计算
BOCPD 为每个 run length r 维护一组 Normal-Inverse-Gamma (NIG) 后验参数 (μ_r, κ_r, α_r, β_r)。在此后验下,均值 μ_r 服从 Student-t 分布:
μ_r | data ~ Student-t_{2α_r}(μ̂_r, β_r / (α_r · κ_r))
趋势概率的计算分两步:
第一步:对每个 run length r,计算"真实漂移超出阈值"的概率:
P(trending | r) = P(|μ_r| > δ)
= 1 - CDF_t(δ; df, μ̂, scale) + CDF_t(-δ; df, μ̂, scale)
其中:
δ=drift_thresholddf=2α_r(自由度)scale=sqrt(β_r / (α_r · κ_r))(后验标准差)
第二步:按 run length 后验概率加权求和:
P(trending) = Σ_r P(r | data) × P(trending | r)
当 P(trending) 超过预设阈值时,BOCPD 判定市场处于趋势机制,触发硬拦截,阻止开仓。
直觉理解
drift_threshold 本质上是一个**"死区"(dead zone)**:
|μ| ≤ δ → 视为噪声 / 均值回归环境(允许开仓)
|μ| > δ → 视为趋势驱动(拦截开仓)
当前配置
| 位置 | 参数值 | 说明 |
|---|---|---|
_BOCPD.__init__ 默认值 |
0.0005(0.05%/bar) |
类级别默认值 |
MomentumFilter 实际使用值 |
0.001(0.1%/bar) |
系统运行时生效值 |
系统实际使用 0.001,即每根 5 分钟 K 线的平均收益率超过 0.1% 才被视为趋势。
经济学含义换算
以 drift_threshold = 0.001(0.1%/5min bar)为例:
| 时间粒度 | 等效漂移率 | 说明 |
|---|---|---|
| 5 分钟 | 0.1% | 单根 bar 均值漂移 |
| 1 小时 | ~1.2% | 12 根 bar 累计 |
| 24 小时 | ~28.8% | 288 根 bar 累计 |
这意味着只有出现强烈的单向趋势时 BOCPD 才会触发硬拦截,避免在趋势行情中执行均值回归策略。
调参指南
调大 drift_threshold(如 0.002)
- 对趋势的判定标准更高,需要更强的漂移才认定为趋势
- BOCPD 拦截频率降低,更多行情被视为"噪声"
- 开仓机会增多
- 风险:趋势行情中误开仓的概率增大
适用场景:高波动币种、BOCPD 误杀过多时
调小 drift_threshold(如 0.0003)
- 对趋势的判定标准更低,微小漂移即判定为趋势
- BOCPD 拦截频率升高,更多行情被标记为趋势
- 开仓机会减少
- 风险:可能误杀本可盈利的均值回归机会
适用场景:低波动币种、保守风控需求
与其他参数的联动
| 参数 | 联动关系 |
|---|---|
hazard_rate |
变点先验概率。hazard 越大,regime 切换越频繁,drift_threshold 的判定在更短的窗口内生效 |
beta0(NIG 先验方差) |
决定后验 scale 的初始值。beta0 越大,初始后验越宽,drift_threshold 在早期数据不足时影响较小 |
bocpd_trend_threshold |
P(trending) 的拦截阈值。drift_threshold 决定"什么算趋势",trend_threshold 决定"趋势概率多高才拦截" |
代码位置
- 参数定义:
src/trading/momentum_filter.py—_BOCPD.__init__(L211) - 趋势概率计算:
src/trading/momentum_filter.py—_BOCPD.trend_probability(L284-313) - 系统配置值:
src/trading/momentum_filter.py—MomentumFilter.__init__(L597) - BOCPD 实例化:
src/trading/momentum_filter.py—MomentumFilter._update_buffers(L1229-1232)