ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vibe-Trading 因子/策略衰减监控实战:`sdm_decay_scan` 与 Decay Report 报告模板深度解读

Vibe-Trading 因子/策略衰减监控实战:`sdm_decay_scan` 与 Decay Report 报告模板深度解读 Vibe-Trading 因子/策略衰减监控实战sdm_decay_scan与 Decay Report 报告模板深度解读【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading导读在 Vibe-Trading 的 Strategy Development ManagerSDM策略开发管理器工作流中因子和策略从论文/研报中提取出来后并不会一劳永逸——市场的结构性变化会让曾经有效的 alpha 逐步衰减。本文围绕 SDM 技能包中的decay_report.md报告模板完整讲解sdm_decay_scan衰减扫描工具的输出格式、五档健康度分类、状态机转换规则、阈值基线计算以及如何通过ScheduledResearchExecutor定时调度扫描并辅以仓库源码sdm_decay_scan_tool.py、decay.py、metrics.py逐层印证实现原理。读完本文你将能读懂任何一份 Decay Report并能独立配置、调度与解读全自动的因子衰减监控流程。一、Decay Report 是什么SDM 第 5 阶段的体检报告在 SKILL.md 定义的 SDM 五阶段生命周期INGEST → EXTRACT → IMPLEMENT → EVALUATE → MONITOR中Phase 5 MONITOR 的核心动作是调用sdm_decay_scan工具对某个 universe 下所有活跃 artifact 做批量衰减扫描而decay_report.md就是这个扫描动作的标准输出模板。每次扫描后Agent 将结果填入模板产出一份包含汇总统计、状态迁移记录、逐因子详情与行动建议的结构化报告。模板位于 decay_report.md其字段占位符如下占位符含义{SCAN_DATE}扫描日期{UNIVERSE}扫描的市场范围如 CSI300、SP500{MANUAL/SCHEDULED}扫描触发方式手动 / 定时{TOTAL_SCANNED}扫描的 artifact 总数{HEALTHY_COUNT}健康数量{WARNING_COUNT}警告数量{DECAYED_COUNT}已衰减数量{CRITICAL_COUNT}严重数量{INSUFFICIENT_COUNT}数据不足数量{TRANSITIONS_TABLE}本次扫描应用的状态迁移表格{HEALTHY_DETAILS}/{WARNING_DETAILS}/{DECAYED_DETAILS}三类因子的逐条详情{RECOMMENDATIONS}行动建议报告默认落款为Generated by Strategy Development Manager -- sdm_decay_scan即模板明确声明这份报告由sdm_decay_scan工具生成。二、五档健康度Summary 表如何被填充报告顶部的 Summary 表并非凭空而来它直接对应sdm_decay_scan工具内部的计数逻辑。查看 sdm_decay_scan_tool.py 的源码可以发现扫描器维护的计数字典与模板中的六项指标一一对应counts { total_scanned: 0, healthy: 0, warning: 0, decayed: 0, critical: 0, insufficient_data: 0, }每个 artifact 会被归入以下五档之一对应 Summary 表的五档计数Healthy健康所有指标均高于 Healthy 阈值Warning警告至少一个指标落入 Warning 区间性能正在下滑Decayed已衰减至少一个指标落入 Decayed 区间需要行动Critical严重至少一个指标落入 Critical 区间必须处理Insufficient data数据不足bench 历史不足以进行可靠评估。关于最后一项源码给出了精确的判定规则sdm_decay_scan_tool.py若bench_history不足 3 条len(bench_history) 3直接判为insufficient_data。这也对应 SKILL.md 中 Common Pitfalls 的说明衰减监控至少需要 3 条 bench 历史才能建立基线只有一次回测的新注册 artifact 无法进行有意义的衰减扫描若 metrics 中没有任何可供评估的输入has_decay_inputs返回 False同样判为insufficient_data——其原因是 metrics.py 中DecayEvaluator.evaluate_decay在所有输入为 None 时默认返回 HEALTHY为避免把没有数据误报成健康调用方必须显式上报数据不足。此外扫描的目标集合不是全部 artifact而是active与monitoring两种状态的并集见 sdm_decay_scan_tool.py已 disabled 或处于 created/benching 阶段的 artifact 不会进入扫描范围。三、阈值体系每个指标的三段式分类报告中对每个因子的健康度判断来自 decay_thresholds.md 定义的阈值表。核心原则是每个指标独立评估取所有指标中最差的信号作为该 artifact 的总体衰减信号worst signal wins。3.1 因子类 artifact 指标指标HealthyWarningDecayedCriticalIC Ratio滚动/基线 0.70.5 – 0.70.3 – 0.5 0.3IR滚动窗口 1.00.5 – 1.00.1 – 0.5 0.1IC Positive Ratio 55%45% – 55%35% – 45% 35%3.2 策略类 artifact 指标策略类 artifact 的补充指标在 strategy_metrics.md 中定义指标HealthyWarningDecayedCriticalSharpe Ratio 1.00.5 – 1.00.0 – 0.5 0.0Sortino Ratio 1.51.0 – 1.50.5 – 1.0 0.5Calmar Ratio 2.01.0 – 2.00.0 – 1.0 0.0Max Drawdown 15%15% – 25%25% – 40% 40%Win Rate 55%45% – 55%35% – 45% 35%Profit Factor 1.51.2 – 1.51.0 – 1.2 1.0策略评估的优先级顺序为Sharpe Ratio首要门槛须 0.5→ Max Drawdown风险门槛须 30%→ Sortino Ratio次要确认→ Win Rate / Profit Factor补充刻画。当 Sharpe 0.5 或 Max DD 30% 时策略即判定为不达标。与因子衰减预测力衰减不同策略衰减以风险调整后收益为主信号主指标是滚动 Sharpe辅以回撤加深、胜率下滑、交易频率异常上升、Profit Factor 跌破 1.0 等信号。3.3 阈值的源码落点这些阈值在 decay.py 中以DecayThresholdsdataclass 形式可配置dataclass(frozenTrue) class DecayThresholds: ic_ratio_healthy: float 0.7 ic_ratio_warning: float 0.5 ic_ratio_decayed: float 0.3 ir_healthy: float 1.0 ir_warning: float 0.5 ir_decayed: float 0.1 ic_pos_ratio_healthy: float 0.55 ic_pos_ratio_warning: float 0.45 ic_pos_ratio_decayed: float 0.35 sharpe_healthy: float 1.0 sharpe_warning: float 0.5 sharpe_decayed: float 0.0 warnings_for_monitoring: int 3 # active → monitoring warnings_for_decayed: int 2 # monitoring → decayed额外 critical_for_disabled: int 3 # decayed → disabled分类逻辑在_classifydecay.py中实现阈值按 healthy warning decayed 降序排列值 ≥ healthy 为 HEALTHY位于 healthy 与 warning 之间为 WARNING位于 warning 与 decayed 之间为 DECAYED低于 decayed 为 CRITICAL。策略类 artifact 可在注册时通过sdm_register传入sharpe_healthy、max_dd_warning、rolling_window_days等参数做逐 artifact 覆盖见 strategy_metrics.md 第 5 节。四、基线计算IC Ratio 从何而来报告中的 Warning/Decayed 判定高度依赖 IC Ratio其计算规则定义于 decay_thresholds.md 的 Baseline Calculation 一节并在 metrics.py 中有精确实现Baseline IC mean 所有bench_typeinitial的 bench 记录均值或取最早 5 条periodic记录的均值源码实现为ic_values[:5]Rolling IC mean 最近 N 条记录均值源码实现为ic_values[-5:]N 可通过rolling_window_days配置IC Ratiorolling_ic_mean / baseline_ic_mean当 baseline 不为 0 时计算结果保留 4 位小数。同时compute_decay_metrics还会产出rolling IR滚动 IC 的均值/标准差要求窗口内样本数 1 且标准差 0与IC Positive Ratio全部 IC 历史中正值占比。策略 artifact 则对应计算baseline_sharpe与rolling_sharpe各自取前 5 / 后 5 条记录均值。所有输入指标均要求至少 3 条非 None 记录才认为有效len(...) 3这也与报告中的insufficient_data档位相呼应。五、状态机与迁移规则Report 中 Transitions 表的判据Decay Report 中的 Status Transitions Applied 表格记录了本次扫描实际执行的迁移from → to reason。这些迁移由 decay.py 中的纯逻辑状态机DecayEvaluator.should_transition决定迁移规则如下迁移条件连续读数要求active → monitoringWARNING 或更差连续 3 次周期性 benchmonitoring → decayedDECAYED 或更差额外连续 2 次检查monitoring → activeHEALTHY恢复1 次读数即可decayed → disabledCRITICAL连续 3 个监控周期disabled → active手动 enable—完整的生命周期状态机decay_thresholds.mdcreated → benching → active → monitoring → decayed → disabled ↑ │ └───────────┘ (recovery: IC ratio 0.7)策略类 artifact 使用同一状态机但带策略专属条件见 strategy_metrics.md 第 2.3 节active → monitoring要求滚动 Sharpe 0.5 或 Max DD 25% 连续 3 期monitoring → decayed要求滚动 Sharpe 0.0 或 Max DD 40% 额外连续 2 期恢复条件为滚动 Sharpe 1.0 且 Max DD 15% 连续 2 期。在扫描工具的实现中每次扫描会读取最近的 decay historyget_decay_history(limit10)把历史信号与本次信号拼接后交给should_transition判断若判定触发且非dry_run模式则调用store.update_status应用迁移并记录 reasonfDecay scan: {signal.value} signal triggered transition。同时每次扫描都会写入一条DecaySnapshot含 rolling IC、baseline IC、IC ratio、decay signal、连续警告次数形成可查询的衰减历史sdm_decay_scan_tool.py。需要特别说明的是dry_run参数默认 False当设置为 True 时扫描只报告不迁移迁移建议以recommended_transition字段给出适合上线前预演。六、触发方式手动、定时与被动decay_report.md的头部字段Scan Type: {MANUAL/SCHEDULED}对应 decay_thresholds.md 定义的三种触发模式手动MANUALAgent 或用户直接调用sdm_decay_scan(universe...)工具定时SCHEDULED通过ScheduledResearchExecutor配置周期扫描任务由后台调度器自动触发被动PASSIVE每次alpha_bench运行时自动更新对应因子的衰减快照即基准线数据持续累积。工具的完整参数sdm_decay_scan_tool.py参数类型说明默认值universestring按市场过滤扫描范围无全部artifact_typestring按类型过滤factor/strategy无全部dry_runboolean只报告不应用迁移False七、定时扫描配置让 Decay Report 自动生成当使用 SCHEDULED 模式时报告会自动生成并落库。完整配置方法见 scheduled_decay_scan.md7.1 开启后台调度器后台执行器默认关闭。启动服务时需要显式传入环境变量VIBE_TRADING_ENABLE_SCHEDULER1 vibe-trading serve --port 8899未开启该标志时/scheduled-runs端点仍会记录任务但不会真正触发执行。7.2 创建每周衰减扫描任务curl -X POST http://localhost:8899/scheduled-runs \ -H Content-Type: application/json \ -d { prompt: Run a decay scan on all active factors in the CSI300 universe. For any factors showing decay signals, generate a summary report., schedule: 0 2 * * 1, config: {} }API 返回包含id、status、next_run_at与完整 schedule 定义的作业记录。任务持久化在~/.vibe-trading/目录下服务重启后依然有效。7.3 多市场扫描对跨市场的因子组合建议按 universe 拆分任务并错开执行时间# CSI300 每周扫描周一 curl -X POST http://localhost:8899/scheduled-runs \ -H Content-Type: application/json \ -d { prompt: Run a decay scan on all active factors in the CSI300 universe. Generate a decay report with status transitions., schedule: 0 2 * * 1, config: {} } # SP 500 每周扫描周二错开一天 curl -X POST http://localhost:8899/scheduled-runs \ -H Content-Type: application/json \ -d { prompt: Run a decay scan on all active factors in the SP500 universe. Generate a decay report with status transitions., schedule: 0 2 * * 2, config: {} }当配置了API_AUTH_KEY时需在请求头携带Authorization: Bearer your-api-key。7.4 调度格式与常用 cron 模式schedule字段接受两种格式格式示例说明间隔毫秒21600000每 6 小时6 × 60 × 60 × 1000Cron5 字段0 2 * * 1周一 02:00 UTCCron 字段顺序minute hour day-of-month month day-of-week每字段支持数字、*任意或*/n步长。常见衰减扫描节奏模式Schedule适用场景每周周一 2am UTC0 2 * * 1大多数因子组合的标准扫描节奏每月1 日 3am UTC0 3 1 * *稳定、长持有期的低频因子每日UTC 零点0 0 * * *波动行情下的高频监控每两周1 日与 15 日0 2 1,15 * *混合持有期组合的平衡节奏每 6 小时间隔21600000实盘因子栈的持续监控7.5 扫描频率调优建议扫描频率应与因子的decay_horizon元数据对齐scheduled_decay_scan.md 的 Tuning Scan Frequency 一节因子类型推荐节奏理由短持有期 5 天每日0 0 * * *衰减可能在单个交易周内显现中持有期5–20 天每周0 2 * * 1兼顾检测速度与噪声抑制长持有期 20 天每月0 3 1 * *与月度再平衡周期对齐实盘因子每 6 小时21600000最小化生产环境暴露于劣化因子通用建议避免过度扫描每次扫描都会消耗 Agent 迭代与数据加载配额500 因子的日扫成本很高只对实盘组合保留与再平衡周期对齐月度再平衡的因子周扫意义不大迁移要等下次再平衡才生效错开多市场任务避免共享数据源如 tushare 的限流监控扫描时长若单次扫描时长超过触发间隔调度器会排队派发此时应加大间隔或收窄 universe。7.6 作业生命周期POST /scheduled-runs | v [PENDING] --(executor tick, is_duetrue)-- [RUNNING] | | | dispatch success: [COMPLETED] | dispatch failure: [FAILED] | | | next_run_at advanced, re-enters | PENDING for the next fire | DELETE /scheduled-runs/id | v [CANCELLED] (terminal, never re-dispatched)注意FAILED 为终态失败任务不会自动重试需用相同 prompt 与 schedule 重建任务。八、每次扫描 Agent 实际执行的五步流程结合 scheduled_decay_scan.md 的 What Happens on Each Scan 与扫描工具源码一次定时扫描在 Agent 会话内依次执行调用sdm_decay_scan携带配置的 universe如sdm_decay_scan(universeCSI300)工具内部拉取 active monitoring 状态的 artifact 列表计算衰减指标对每个 artifact 读取 bench history用compute_decay_metrics计算滚动 IC 均值、IR、IC 正占比、Sharpe健康度分类按五档阈值归类Healthy / Warning / Decayed / Critical / Insufficient data应用状态迁移满足连续读数要求的按状态机迁移active → monitoring、monitoring → decayed、decayed → disabled、monitoring → active 恢复生成报告产出按类别统计的计数表、迁移表与建议填充decay_report.md模板。九、如何查看扫描结果与完整历史列出定时任务curl http://localhost:8899/scheduled-runs返回所有作业的当前状态、last_run_at与next_run_at查询单次扫描产物扫描完成后结果作为 artifact 存储通过sdm_status(actiondetail, artifact_idscan_artifact_id)获取包含逐因子指标、已应用迁移与生成报告的完整输出取消任务curl -X DELETE http://localhost:8899/scheduled-runs/job_id取消后任务标记为终态不再派发。sdm_status工具本身支持list、detail、disable、enable、decay_check等动作见 sdm_status_tool.py其中的decay_check走与sdm_decay_scan相同的compute_decay_metricsDecayEvaluator链路可用于单 artifact 的快速体检。十、一份报告的实战解读示例以 examples.md 中 Example 2 的 MONITOR 阶段为参照假设sdm_decay_scan(universeequity_us)输出如下示意Summarytotal_scanned2, healthy1, warning1, decayed0, critical0order_flow_mean_reversion状态 healthy所有指标高于阈值无需动作momentum_12_1的 IC ratio 跌至 0.62落入 Warning 区间 0.5–0.7报告给出warning标注本次暂不迁移但下一次扫描若仍处于 Warning 即满足active → monitoring的连续 3 次要求将自动进入监控状态。这正是 Decay Report 的价值所在它不是一次性判决书而是为状态机提供连续读数输入的健康档案让衰减在早期被识别并沿active → monitoring → decayed → disabled路径自动处置。十一、相关源码与文档速查报告模板decay_report.mdSDM 技能总览Phase 5 MONITOR 与 SignalEngine 契约SKILL.md衰减阈值与状态机decay_thresholds.md定时扫描配置与调度scheduled_decay_scan.md策略专属指标与滚动窗口strategy_metrics.md扫描工具实现sdm_decay_scan_tool.py状态机纯逻辑decay.py指标计算实现metrics.py状态查询/更新工具sdm_status_tool.py完整工作流示例examples.md【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表