跳到主要内容

DH-TM R4 小批量验证接入任务书

Curvature Labs · Trading Matrix
版本 v1.1 · 2026-07-01
状态:草稿 · 进行中
Owner:TM 工程(主),DH maintainer(协查)

与赛马看板 PRD 的边界
赛马看板 PRD v1.4 覆盖运营 UI 层:候选管理、五维候选包、推进(回测/跳过)、R3 candidate_validation 写回。
本文覆盖工程验证层:TM 接入 DH 候选读取、持久化、受控验证、candidate_backtest_result 写回、集成测试与 R4 验收。


一、R4 目标

证明 Trading Matrix 能稳定读取 Data Horizon 的 KOL 动态画像候选,完整保存身份字段,对少量受控候选完成验证,写回人和系统都能理解的真实反馈,并给出是否进入 R5 策略蒸馏的 go/no-go 判断。

R4 不证明:某个 KOL 策略已经可盈利;R4 不进入实盘。


二、前置条件(DH 侧已完成)

状态证据
dn_kol_candidate_validation_feedback✓ 生产已创建id=1 smoke 记录已写入
候选读取接口 POST /v1/open/kol/dynamic-state/candidate-list✓ 已通过smoke 输出 OK: read-only R3 contract smoke passed
反馈写入接口 POST /v1/open/kol/candidate-validation/feedback✓ 已通过accepted=true
错误密钥保护(Open API Key)✓ 已通过
过期状态保护 / 重复写入保护DH 自动化已覆盖待 TM 集成复测
Woods 工作台回归✓ 已通过(smoke 记录)R4 真实反馈写回后需再次复核

三、R4 Pilot 候选批次

来源:DH 生产只读快照(2026-06-23)。当前生产无 action 候选,全为 risk/observe。

#KOLKOL ID标的类型DH 状态证据数选择理由
1所长11BTCriskconflicted4BTC 日内冲突样本,验证风险路径
2Johnny24SOLriskconflicted10SOL 高证据风险样本,避免只测 BTC
3Muzzagin29BTCriskconflicted22高冲突跨市场样本,验证分歧处理
4Woods32ZECriskconflicted6复用 Woods 上下文(不用之前 BTC smoke 候选)
5P总47ETHobserveactive15ETH 高证据观察样本,验证正常消费路径
6美股研究社55MSFTobserveactive2美股个股样本,验证非加密标的处理
7美股投资网58SPYobserveactive2美股指数 / 宏观样本,验证周期和宏观范围
8985学长71GOLDobserveactive3黄金样本,验证商品类标的处理

R4 不伪造 action 候选,等 DH 生产出现真实 action 候选后由运营在赛马看板操作。


四、TM 侧任务清单

T1 接入候选读取接口

目标:TM 后端能调用 DH 候选列表接口并解析返回结构。

通过标准

  • 使用已批准的 X-API-Key 调用 POST /v1/open/kol/dynamic-state/candidate-list
  • 正确识别 candidate_contract_version 字段(用于版本兼容检测)
  • 解析返回的候选列表,打印每条 candidate_id + kol_id + candidate_type + lifecycle_status
  • 调用日志可审计

Owner:TM 工程


T2 持久化候选身份字段

目标:TM 本地完整保存每条候选的 DH 颁发身份字段,写回时必须原样带回。

必须持久化的字段

字段说明
candidate_idDH 生成的候选稳定 ID
state_id对应的动态状态 ID
state_version状态版本号(写回时防止版本错位)
state_hash状态内容哈希(写回时防止旧状态覆盖)
kol_idKOL 在 DH 的稳定 ID
source_ids信源 ID 列表
symbol_bucket标的分组(如 BTCETHMSFT

通过标准

  • 上述 7 个字段全部存入 TM 本地表,不允许丢弃或覆盖
  • 读取候选时 → 存入;写回时 → 原样携带(不重新生成)

Owner:TM 工程


T3 小批量验证 Runner

目标:对 T1 + T2 完成后的 8 条 pilot candidates,通过批量回测系统对历史信号做离线重放,各生成一个可解释的量化验证结果。

与赛马看板三层漏斗的关系:T3 的回测结果将作为 Layer 0(回测基线层)呈现在 KOL Drawer 中(见主 PRD v1.4 §4.3.5)。T3 已通过 DEV-07 与 /api/event-backtest 集成;R4 系统化验收记录待补。

约束

  • 结果不要求盈利,只要求结果可解释(知道 TM 对这条候选做了什么、学到了什么)
  • 不进入实盘
  • 不做全量 KOL 自动赛马
  • 不把策略种子直接升级为策略资产

信号数据来源(D5 已解除阻塞,批量回测系统直接可用):

接口用途状态
GET /v1/open/profile/signalsdirection / symbol / published_ts 的结构化信号,回测方向准确率计算基础✅ DH main 已上线
POST /v1/open/event-stream原始事件总量(端到端命中率分母)✅ DH main 已上线
TM K 线库(已有)历史价格,验证 direction 是否准确(4h K 线收盘)✅ 已有

批量回测接口契约(TM 赛马后端 → 批量回测系统):

回测系统由 TM 工程独立开发/对接,与赛马看板后端通过以下契约解耦。R4 Pilot 阶段可用异步 callback 或 TM 主动轮询,正式集成后确认最终方式。

输入(TM 发送给回测系统)

{
"kol_id": 47,
"source_ids": [101, 102],
"symbol_bucket": "ETH",
"backtest_window": "2025-06-01..2026-06-30",
"candidate_id": "csc_001",
"callback_url": "http://tm-api/internal/backtest/result/{task_id}"
}

输出(回测系统回传给 TM)

{
"kol_id": 47,
"candidate_id": "csc_001",
"win_rate": 0.61,
"profit_factor": 1.8,
"expectancy": 0.023,
"max_drawdown": 0.12,
"sample_trade_count": 187,
"realized_style_drift": 0.18,
"backtest_window": "2025-06-01..2026-06-30",
"validation_status": "pass",
"computed_at": 1751234567000
}

validation_status 判定规则(对齐 §4.8.4):

状态条件
passwin_rate ≥ 0.55max_drawdown < 0.20sample_trade_count ≥ 10
failwin_rate < 0.45max_drawdown ≥ 0.20(样本 ≥ 10)
unresolvedsample_trade_count < 10,或指标居于 pass/fail 之间

R4 Pilot 建议回测窗口2025-06-01..2026-06-30(近 12 个月,DH 候选数据覆盖范围)

通过标准

  • 8 条 pilot candidates 各生成一条回测结果,含 win_rate / profit_factor / max_drawdown / sample_trade_count / backtest_window
  • validation_status 按上表规则判定,非人工填写
  • 回测结果已写入 TM 本地 tm_kol_backtest_result 表(供 T4 写回 DH 使用)
  • 不能把 smoke 记录当作真实验证结论

Owner:TM 工程(批量回测系统)


T4 写回真实非 smoke 反馈

目标:对 T3 完成的验证结果,通过 R3 接口写回 DH(非 smoke 记录)。

写回规范

字段规范
tm_run_id前缀使用 tm_r4_pilot_,格式 tm_r4_pilot_{kol_id}_{timestamp}
feedback_id格式 tm_r4_{candidate_id}_{timestamp},全局唯一,保证幂等
feedback_typecandidate_backtest_result(对齐主 PRD v1.4 §10.2;非 validation_completed
validation_phasebacktest
validation_statuspass / fail / unresolved(按§4.8.4 阈值判定,或标注无法判定原因)
validation_result_summary必须是人类可读句子(见 T6 要求),不能只写数字
realized_style_drift按§4.8.2 公式计算,sample_trade_count < 10 时留空
backtest_window实际验证时间段,例如 2026-06-01..2026-06-23
sample_trade_count成交次数(0 时仍写回,但 drift 留空)
认证头X-API-Key + X-TM-Validation-Key 均需携带

通过标准

  • 8 条 pilot candidates 各写回 1 条真实反馈,DH 返回 accepted=true
  • 写回记录可在 DH 工作台看到(作为外部验证证据)

Owner:TM 工程(密钥由 DH maintainer 下发)


T5 集成测试覆盖

目标:确保 TM R3 客户端对 DH 的边界保护情形有明确处理。

必须覆盖的测试场景

场景预期行为
错误 X-API-KeyDH 返回 401,TM 记录 auth 错误,不重试
错误 X-TM-Validation-KeyDH 返回 401/403,TM 触发密钥过期告警(参见赛马看板 PRD §10.4)
过期状态(state_hash 不匹配)DH 返回 accepted=false,TM 标注"写回失败,state 已过期"
重复 feedback_id(同内容)DH 返回幂等接受(accepted=true, reason=duplicate),TM 视为成功
重复 feedback_id(不同内容)DH 返回 accepted=false,TM 标注冲突,不覆盖
网络错误TM 最多重试 3 次(指数退避),失败后标注"写回待同步"

通过标准:以上 6 个场景有测试记录(日志 / 单测 / 集成测试均可)

Owner:TM 工程


T6 validation_result_summary 规范

目标:每条候选的验证总结必须是人类可读的描述,供 DH 工作台展示和 DH 静态画像团队消费。

格式要求

# 示例(observe 候选,ETH,P总)
"在 2026-06-01 至 2026-06-23 期间对 ETH 候选进行模拟验证,
共触发 12 次信号,执行 8 次,胜率 62%。
KOL 观察型候选,ETH 方向偏多,与 DH 画像描述基本一致。
当前结论:unresolved,样本不足以判断长期有效性,建议继续观察 30 天。"

# 示例(risk 候选,BTC,所长)
"在 2026-06-01 至 2026-06-23 期间对 BTC 风险候选进行 dry-run,
KOL lifecycle=conflicted,多空方向冲突,TM 执行 4 次信号,胜负各 2。
验证结论:fail(win_rate 50%,未达阈值且方向信号不稳定)。
建议:等 DH 状态恢复 active 后重新进入候选评估。"

禁止:只写指标数字(如 win_rate=0.62, drawdown=0.08),没有任何文字说明。

Owner:TM 工程(理解每条候选后撰写)


T7 联合复核 DH 工作台展示

目标:T4 写回后,DH + TM 联合确认 DH 工作台仍然只把 TM 反馈展示为外部验证证据,不影响 DH 可信度、排序或生命周期。

检查清单

  • 验证结果只出现在"外部验证证据"区,不出现在 DH 候选推荐排序中
  • validation_result_summary 文字在工作台可读
  • realized_style_drift 以 TM 外部数据形式展示,不影响 DH 画像可信度排序字段
  • 工作台不显示"已可实盘"或"已成为策略资产"等字样
  • Woods(KOL 32)smoke 记录与 R4 真实记录在工作台能区分

Owner:DH maintainer(工作台)+ TM 工程(提供 feedback_id 列表)


T8 R4 验收记录 + R5 go/no-go

目标:输出 R4 结束后的联合验收记录,明确是否进入 R5 策略蒸馏。

验收记录包含

# DH-TM R4 验收记录

日期:____
版本:____

## 候选处理结果

| # | KOL | candidate_id | feedback_id | validation_status | summary |
|---|---|---|---|---|---|
| 1 | 所长 | ksc_xxx | tm_r4_xxx | pass/fail/unresolved | __ |
...

## 集成测试结果(T5)

| 场景 | 结果 |
|---|---|
| 错误密钥 | ✓/✗ |
...

## 工作台展示复核(T7)

[ ] 通过 / [ ] 发现问题:____

## R5 go/no-go 判断

go:条件 ______
no-go:原因 ______
下一步:______

通过标准:记录已填写并由 DH + TM 双方确认

Owner:DH maintainer + TM 工程联合输出


五、任务优先级与建议顺序

T1(接口集成)→ T2(身份持久化)→ T3(验证 runner)

T4(写回真实反馈)+ T5(集成测试)+ T6(summary 规范)

T7(工作台联合复核)→ T8(验收记录 + R5 判断)

T1 + T2 是硬前置,不完成则后续无法推进。
T5 集成测试可与 T4 并行进行。
T6 summary 在 T3 完成后立即撰写,不要等 T4。


六、与赛马看板 PRD 的接口说明

R4 工程接入与赛马看板 UI 共享以下契约,需保持一致:

接口 / 字段赛马看板 PRD 引用R4 任务使用
POST /v1/open/kol/candidate-validation/feedback§十 TM→DH 写回映射T4 写回真实反馈
feedback_type=candidate_backtest_result主 PRD v1.4 §10.2T4
candidate_validation(运营 admit/observe/defer)主 PRD v1.4 §10.2赛马看板 UI(DEV-03)
realized_style_drift 计算公式§4.8.2T4
pass/fail/unresolved 判定阈值§4.8.4T3 + T4
X-API-Key + X-TM-Validation-Key 双认证§10.1T4 + T5
feedback_id 幂等格式§10.4T4 + T5

赛马看板 PRD 不覆盖的内容(本文负责)

  • TM 后端候选读取的集成实现(非 UI)
  • 候选身份字段本地持久化表结构
  • 验证 runner(T3)的具体实现方式
  • validation_result_summary 内容标准(T6)
  • R4 验收记录格式(T8)

七、开放问题

#问题Owner期望
Q1feedback_type 枚举@DH maintainer✅ 已关闭:见主 PRD v1.4 §10.2 / §6.4
Q2candidate_status vs candidate_type@DH maintainer✅ 已关闭:读 candidate_type;忽略 candidate_status
Q3批量回测集成方式@TM 工程callback + event-backtest 批量任务(DEV-07 @ 2026-07-01)
Q4R4 结束后,smoke 记录(feedback_id=tm_r3_smoke_ksc_…)是否需要从生产表中清理@DB 权限成员T8 前确认
Q5批量回测系统是否直接接入 DH profile/signals 接口自行拉信号,还是 TM 赛马后端预处理后传给回测系统?建议:回测系统直接用 source_ids 调 DH,避免 TM 中间层成为瓶颈@TM 工程(批量回测)+ @DH maintainerT3 前确认
Q6R4 backtest_window:统一固定 vs 按 last_evidence_at 动态@TM 工程动态 12 个月 + clamp [2025-06-01, 2026-06-30](主 PRD §4.3.5.2)

八、参考文档

文档位置
DH KOL 动态画像进展(2026-06-23)外部文档
DH KOL 静/动态画像方案(2026-06-19)外部文档
赛马看板 KOL 画像集成 PRD v1.4Gov co-request
赛马看板工程交付状态Gov co-request
赛马看板 PRD v1.2 修订计划clabs requirement/归因追踪/赛马看板-PRD-v1.2-修订计划.md
候选管理技术实施方案clabs docs/raceboard_candidate_impl_plan.md
R4 验收记录模板(T8)本文 §四 T8