步骤4阶段1 3 4天核心闭环方案

源文件:D:\Hermes\reports\步骤4阶段1_3-4天核心闭环方案.md · 日期 2026-09-13 · 7KB

步骤4阶段1 - 3-4天核心闭环方案(修正版)

制定日期: 2026-09-13
观察任务: cron_id=7e8ae2aeca81
当前进度: D1观察中(17次自动运行,100%成功)


任务1:修正排期表

日期 阶段 核心任务 验收标准 耗时
D1 9/13 告警系统上线 alert_channel_health + dead_mans_switch部署 D1观察通过(100%成功)✅ ✅ 已完成
D2 9/14 受控测试+集成 4项测试 + run_with_alert集成 4项测试全部通过 2.5小时
D3 9/15 风控熔断 设计+实现熔断逻辑 熔断测试通过 4小时
D4 9/16 影子运行+验收 双系统并行比对 零重大偏差,交付使用 2小时

增量迭代(D5-D7,边跑边做)

任务 执行方式 说明
2C-1 DAG设计 D5开始设计 裁剪非必要模块
消除重复 边跑边做 不单独排期
权重校准 影子运行时同步 对比新旧系统输出

任务2:修正受控测试方案(D2)

2.1 测试矩阵

测试项 注入方式 预期结果 验证方法 耗时
告警路径 jobs.json添加test_alert_path_001 + task_runs插入failed记录 [TEST]前缀TG告警 检查TG频道 30分钟
超时路径 修改last_run_at为3天前 timeout告警 检查TG频道 30分钟
Dead-Man 停心跳30分钟 dead_man告警 检查TG频道 30分钟
通道健康 改TG token为错误值 channel_error告警 检查TG频道 30分钟
run_with_alert集成 集成到评估流程 评估后触发告警检查 手动触发+检查日志 30分钟
回归验证 恢复所有配置 无告警,正常运行 cron list检查 30分钟

总计耗时: 约2.5小时(可分上午/下午执行)

2.2 测试执行流程

# === 前置:备份生产数据 ===
cp C:/Users/Admin/AppData/Local/hermes/cron/jobs.json C:/Users/Admin/AppData/Local/hermes/cron/jobs.json.bak_D2

# === 测试1:告警路径(30分钟)===
# 1.1 添加测试任务
python -c "
import json
from pathlib import Path
jobs_path = Path('C:/Users/Admin/AppData/Local/hermes/cron/jobs.json')
data = json.loads(jobs_path.read_text(encoding='utf-8'))
data['jobs'].append({
    'id': 'test_alert_path_001',
    'name': '[TEST] 告警路径测试',
    'schedule': '*/15 * * * *',
    'command': 'python -c \"import time; time.sleep(1)\"',
    'last_status': 'failed',
    'last_run_at': '2026-09-14T10:00:00+08:00'
})
jobs_path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding='utf-8')
print('测试任务已添加')
"

# 1.2 插入failed记录
python -c "
import sqlite3
conn = sqlite3.connect('D:/Hermes/data/state/alert_state.db')
conn.execute(\"\"\"
    INSERT OR REPLACE INTO task_runs 
    (task_id, status, start_time, exit_code, error_message, created_at)
    VALUES ('test_alert_path_001', 'failed', '2026-09-14T10:00:00', 1, 'test alert trigger', datetime('now'))
\"\"\")
conn.commit()
conn.close()
print('测试记录已插入')
"

# 1.3 等待cron运行(约15分钟),检查TG是否收到[TEST]前缀告警

# 1.4 清理测试数据(恢复jobs.json + 删除task_runs记录)

# === 测试2-5:类似流程,分别注入不同故障 ===

2.3 测试通过标准


任务3:修正风控熔断边界(D3)

3.1 只做(核心4项)

熔断项 触发条件 动作 实现方式
总仓位 总仓位>80% 输出警告,不阻断主流程 检查持仓总额/总资产
单票 单票回撤>5% 输出警告,建议减仓 检查单票盈亏
回撤 单日回撤>3% 输出警告,暂停新开仓 检查当日净值变化
流动性 流动性不足 输出警告,建议观望 检查成交额/换手率

3.2 不做(非核心)

3.3 实现方案

# 风控熔断检查脚本(D3实现)
# 文件: D:/Hermes/scripts/risk_circuit_breaker.py

def check_circuit_breaker():
    """核心4项熔断检查"""
    results = {
        "total_position": check_total_position(),      # 总仓位>80%
        "single_stock": check_single_stock_drawdown(), # 单票回撤>5%
        "daily_drawdown": check_daily_drawdown(),      # 单日回撤>3%
        "liquidity": check_liquidity()                 # 流动性不足
    }

    # 输出警告,不阻断主流程
    for item, passed in results.items():
        if not passed:
            log_warning(f"熔断警告: {item}")

    return results

def check_total_position():
    """总仓位检查"""
    # 实现逻辑...
    pass

def check_single_stock_drawdown():
    """单票回撤检查"""
    # 实现逻辑...
    pass

def check_daily_drawdown():
    """单日回撤检查"""
    # 实现逻辑...
    pass

def check_liquidity():
    """流动性检查"""
    # 实现逻辑...
    pass

任务4:修正验收标准

4.1 P0验证(必须完成)

验证项 验证方法 通过标准
受控测试 D2执行4项测试 4项测试全部通过
稳定运行 D2-D4连续运行 3天稳定运行,无重大故障
回滚方案 一键回滚测试 <5分钟完成回滚

4.2 移除的指标


任务5:增量迭代计划(D5-D7)

5.1 边跑边做

任务 执行方式 预计完成
2C-1 DAG设计 D5开始设计,不阻塞主流程 D5-D6
消除重复 边运行边扫描,发现即合并 持续进行
权重校准 影子运行时同步对比 D4-D5

5.2 不单独排期


附录:当前系统状态

A.1 已部署组件

组件 文件路径 cron_id 状态
alert_channel_health D:/Hermes/scripts/alert_channel_health.py 7e8ae2aeca81 ✅ 运行中
dead_mans_switch D:/Hermes/scripts/dead_mans_switch.py - ✅ 已部署
run_with_alert D:/Hermes/scripts/run_with_alert.py - ⏳ D2集成

A.2 D1观察统计

指标 值
自动运行次数 17次(10:30-14:15)
成功率 100%
平均间隔 15m05s
心跳记录 18条(全部ok)
TG通知 0次(expected)
exit_code 全部0

A.3 待执行检查

时间 检查内容 状态
14:30 自动运行 ⏳ 即将执行
20:00 晚间检查 ⏳ 待执行
次日10:00 D1总结 ⏳ 待执行

方案修正时间: 2026-09-13T14:30:00
下一步: 等待20:00晚间检查 + 次日10:00 D1总结后进入D2