DY 对冲套利系统 · 核心风控与参数引擎(整合版 V1:A+B)

口径:USD 点差|原则:不预测涨跌,只做“环境位置(P几/Regime)”与可解释风控动作。
整合内容:A)历史分位数标定(Quantile Calibration) + B)半 AI 参数自适应引擎(AI+统计)。

快速导航 1. 目标与边界(统一口径) 2. 数据基础与输入输出(你们已落库) 3. A:历史分位数标定(每日批处理) 4. B:参数自适应引擎 V1(在线) 5. 实时判断“当前价差= P几?”(实现方式) 6. 参数注入:自动挂单 V2(动态追踪开仓) 7. 参数注入:动态止盈 V2 8. 参数注入:Gap Risk Guard(隔夜跳变防护) 9. AI 解释层(可选,不预测) 10. 统一接口与日志(全链路可复盘) 11. 上线步骤(最短路径)

1. 目标与边界(统一口径)

目标

边界

统一口径:所有阈值/统计/规则统一采用 USD 点差,跨模块严禁混用 RMB/点值口径。

2. 数据基础与输入输出(你们已落库)

已具备价差历史 K 线(spread_kline)并存储到数据库。

整合版要求补齐的关键字段

3. A:历史分位数标定(每日批处理)

核心:用分位数替代拍脑袋阈值,生成关键分位点(P70/P80/P85/P90/P95/P97),供次日运行时加载。

核心分布(建议至少三类):
1) intraday_spread:日内常态 spread 分布(过滤开盘冲击)
2) overnight_gapAbs:隔夜/节后开盘 gapAbs = |openSpread - prevCloseSpread| 分布
3) recovery_floor:极端 gap 后 T 小时内的最小 spread(回归能力)分布

输出:spread_stats_daily(按品种/窗口/回看周期:30/60/90)
你们的优势:因为已经落库价差 K 线,所以 A 的落地成本很低:只需新增统计任务与统计表即可。

4. B:参数自适应引擎 V1(在线)

参数引擎 V1 的核心是:AI 不算涨跌,只算环境位置。运行时加载分位数表,计算当前 spread 的 p_rank(处在 P几) 并映射 Regime。

Regime 默认划分:
NORMAL   : p_rank < 0.80
ELEVATED : 0.80 ≤ p_rank < 0.95
EXTREME  : p_rank ≥ 0.95

注意:Regime 仅表示“环境位置”,不代表方向。

5. 实时判断“当前价差 = P几?”(实现方式)

推荐 V1离线分位点表 + 在线区间判定(可选线性插值)。

粗粒度 p_rank 区间判定(示例):
if spread < P80:   p_rank ≈ [0,0.80)
elif spread < P90: p_rank ≈ [0.80,0.90)
elif spread < P95: p_rank ≈ [0.90,0.95)
elif spread < P97: p_rank ≈ [0.95,0.97)
else:             p_rank ≈ [0.97,1.00)

可选:在命中区间内做线性插值,输出连续 p_rank_est。
工程建议:第一版优先“分位点表”方案(稳定、可解释、上线快);后续如需更连续,可引入在线分位数算法(t-digest / P²)。

6. 参数注入:自动挂单 V2(动态追踪开仓)

Regime 是否允许开仓 StartSpread 处理 EntryPullbackPct 仓位/分批
NORMAL 允许(常规) max(用户底线, intraday P80) 15%(默认) 1~2 段分批
ELEVATED 允许但更严 max(用户底线, intraday P85~P90) 18%~25%(更等回撤) 3 段分批
EXTREME 默认禁开/仅小仓试探 intraday P95+ 或直接禁开 25%~35% 强制小仓/试探仓
注入伪代码(示例):
env = getEnvSnapshot("GOLD")
if env.regime == "EXTREME":
  entry.allowOpen = false  # 或 allowOpen=true 但 maxPosition=20%
else:
  entry.allowOpen = true
  entry.startSpread = max(userMin, env.q_intraday(P85 if ELEVATED else P80))
  entry.entryPullbackPct = 0.20 if ELEVATED else 0.15

7. 参数注入:动态止盈 V2

Regime DrawdownPct ConfirmWindow tolerancePct recentNewHighWindow 说明
NORMAL 18%~22% 3 5% 8s 均衡锁利
ELEVATED 22%~30% 3~5 5%~8% 10~15s 波动更大:放宽回撤,防洗出
EXTREME 更保守或转入 Gap 规则 5 0~5% 更短 冲击期优先风控

8. 参数注入:Gap Risk Guard(隔夜跳变防护)

核心:用 overnight_gapAbs 的分位数标定分层阈值;用 recovery 分布标定回归脱困带。

示例(默认 NORMAL):
LadderLevels = [gapAbs_P85, gapAbs_P90, gapAbs_P95]   # 分层减仓阈值(USD点差)
CooldownOpen = 120s
RecoveryBand = recovery_P80
DISASTER:gapAbs ≥ P95 且确认

EXTREME 时更敏感(更保守):
LadderLevels = [gapAbs_P80, gapAbs_P85, gapAbs_P90]
CooldownOpen = 300s
RecoveryBand = recovery_P90(更积极“先救出来”)
DISASTER:gapAbs ≥ P90 即进入
价值:遇到“圣诞节开盘 1200 → 4000”这种事件,系统会被分位数自然识别为 P95+/P97 极端区间,自动进入灾难风控模式,而不是靠人拍脑袋判断。

9. AI 解释层(可选,不预测)

AI 的角色:把结构化结论解释成自然语言(给客户/客服/运营/投顾沟通用),但禁止预测涨跌

AI 输出建议固定 JSON Schema(示例):
{
  "env": {
    "symbol_group": "GOLD",
    "p_rank_est": 0.97,
    "regime": "EXTREME",
    "basis": "90d_quantile",
    "key_levels": {"P80": 800, "P90": 1200, "P95": 1800, "P97": 2500}
  },
  "recommendations": {
    "auto_entry": {"allow_open": false, "start_spread": 1800, "entry_pullback_pct": 0.30},
    "dynamic_tp": {"drawdown_pct": 0.25, "confirm_window": 5, "tolerance_pct": 0.03},
    "gap_guard": {"cooldown_open_s": 300, "ladder_levels": [1200,1800,2500], "recovery_band": 1500}
  },
  "confidence": 0.78,
  "rationale": [
    "当前价差处在近90交易日分布的P95以上,属于极端区间",
    "极端区间更易出现跳变/锯齿波动,因此开仓更谨慎,风控参数更保守"
  ],
  "risk_notes": ["若开盘冲击期或延迟升高,系统将自动切换到更保守模式"]
}

10. 统一接口与日志(全链路可复盘)

接口建议:
getEnvSnapshot(symbol_group) -> {
  ts, spread_now, p_rank_est, regime,
  quantiles:{P70,P80,P85,P90,P95,P97},
  latency_ms, sessionFlag, stats_version
}

getParamPack(symbol_group, module) -> { ... }   # module: auto_entry / dynamic_tp / gap_guard
日志建议:
[EnvEngineV1]
timestamp, symbol_group, spread_now, p_rank_est, regime,
stats_version(date+lookback), quantiles_used, recommendations_hash,
latency_ms, sessionFlag

并在各模块日志中引用 env_snapshot_id,保证全链路可复盘。

11. 上线步骤(最短路径)