clbot 对冲策略系统配置与运维指南 (v11.4.2 全量架构与加固版)
本 Wiki 详细沉淀了 CLBOT 异动风控守护与保号交易系统 (v11.4.2) 的全局架构逻辑、各模块参数契约、飞书高级互动卡片推送、全量版本迭代更新日志(Change Log)以及生产部署规程。
一、 系统架构与模块分层
CLBOT 采用严格的 Domain / Infrastructure / View 模块解耦架构:
clbot/
├── core/ # 核心业务与量化策略引擎 (Domain/Logic)
│ ├── engine.py # TitanEngine:主策略轮询、持仓风控评估、Bulk 预热发起与估值日报调度
│ ├── market.py # MarketData:报价中心、Bulk Prefetch 批量预热、技术指标计算与多级 TTL 缓存
│ ├── broker.py # TradierBroker:底层交易网关、订单弹性解析、日历 API 日缓存与半日市感知
│ ├── maintenance.py # MaintenanceTask:账户防休眠保号交易 T+1 隔夜闭环状态机
│ └── portfolio.py # 持仓视图构建、PnL 算法引擎、批量报价预热与格式化渲染
├── infrastructure/ # 基础架构与基础设施 (Infrastructure)
│ ├── config.py # 统一配置中心、SafeConfigDict 脱敏管理与硬拦截校验
│ ├── db.py # AsyncDatabase:SQLite 异步驱动、WAL 模式、持仓/保号台账与 KV 状态机
│ └── feishu/ # 飞书交互与推送模块 (MVC 分层)
│ ├── __init__.py # 模块暴露入口 (Notifier, NotifierIO, 命令处理器)
│ ├── cards.py # 视图层 (View):交互式表单卡片 JSON 构建与排版
│ ├── handlers.py # 控制层 (Controller):斜杠指令路由与业务响应
│ └── client.py # 通信层 (Client):WebSocket 双工长连接、IO 队列与 DLQ 死信容灾
├── data/ # 生产持久化挂载目录 (Docker Volume / 运行态)
│ ├── clbot.db # SQLite 数据库文件 (WAL 模式伴生 -shm / -wal)
│ └── .notifier_dlq.jsonl # 飞书发信失败死信队列 (DLQ) 容灾持久化文件
├── logs/ # 生产日志挂载目录 (Docker Volume / 运行态)
│ └── clbot.log # 轮转运行日志文件
├── deploy/ # 容器化部署
│ ├── Dockerfile # 精简版 Python 3.11-slim 镜像构建脚本
│ └── docker-compose.yml # 容器编排 (优雅退出窗口 60s 与日志轮转)
├── .dockerignore # 构建隔离文件 (自动忽略凭证、数据库与临时文件)
├── .env # 环境变量配置字典 (包含 API Key 与私人配置)
├── .gitignore # Git 源码版本控制过滤规则
├── main.py # 守护进程主入口 (SIGTERM 捕获、Watchdog 心跳探针与优雅退场)
├── requirements.txt # 生产环境 Python 依赖清单
├── test_diagnostics.py # 生产级全量功能与接口连通性诊断脚本
├── 异动推送逻辑以及数值.md # 15 大异动风控预警、触发临界值与防骚扰机制说明文档
└── 命令.txt # 飞书文本/斜杠命令使用指南与常见操作手册
二、 核心参数与 .env 配置文件契约
系统在 config.py 中挂载了 SafeConfigDict 脱敏字典,支持通过项目根目录下的 .env 进行零侵入调参。
.env 生产完整配置模板
# --- 1. 核心凭证区 (高敏感,已自动脱敏防护) ---
TRADIER_TOKEN=your_tradier_bearer_token
FEISHU_APP_ID=cli_a1b2c3d4e5f6
FEISHU_APP_SECRET=your_feishu_app_secret
# --- 2. 券商与账户配置 ---
TRADIER_ACCOUNT_ID=VA12345678
TRADIER_PAPER=false
# --- 3. 飞书推送与交互通道 ---
FEISHU_USER_ID=ou_xxxxxxxxxxxxxxxxxxxxxxxx # 接收告警与交互回执 (OpenID)
FEISHU_GROUP_ID=oc_xxxxxxxxxxxxxxxxxxxxxxxx # 接收盘后估值日报 (群ID)
# --- 4. 预设保号交易配置 ---
MAINTENANCE_ACTIVE=true
MAINTENANCE_TRADING_DAYS=8 # 响应 Tradier 新规,每月第 8 个有效交易日执行
MAINTENANCE_SYMBOL=NOK
MAINTENANCE_QTY=1
# --- 5. 系统调度与防爆锁防护 ---
TIMEZONE=America/New_York
REPORT_TIME=17:30 # 每日盘后估值日报推送时间
CHECK_INTERVAL=60 # 主策略轮询周期 (秒)
HEARTBEAT_INTERVAL=3600 # Watchdog 心跳保活上报周期 (秒)
HEALTHCHECK_URL=https://hc-ping.com/your-uuid # 外部健康探针 URL
MAX_CONSECUTIVE_ERRORS=10 # 允许最大连续报错次数 (超限触发安全避让)
ERROR_PAUSE_SECONDS=300 # 主线程熔断避让休眠时间 (秒)
FORCE_IPV4=true # 强制开启 IPv4 链路 (防止海外 VPS 遭遇 IPv6 路由黑洞)三、 核心策略与风控逻辑参数矩阵 (16 大法则)
系统的量化风控与信号触发遵循以下 13 核心逻辑法则:
| 规则序号 | 风控 / 信号分类 | 参数键名与默认阈值 | 触发条件与动作逻辑 |
|---|---|---|---|
| 1 | 阶梯式急跌预警 | DROP_TRIGGER = -0.02DROP_THRESHOLD_STEP = 0.005 | 标的日内跌幅 时触发首条急跌预警;跌幅每进一步扩大 触发阶梯破位追警。 |
| 2 | 均线破位与收复 | MA50 支撑MA50_CLEAR_BUFFER = 0.005 | 现价跌破 MA50 触发破位预警;当现价回升突破 MA50 的 倍(带有 缓冲带)时触发“风险信号解除”通知。 |
| 3 | 经典超卖与回归 | RSI_OVERSOLD = 35RSI_CLEAR = 40 | 触发经典超卖预警;当 回升至 时触发超卖风险解除通知。 |
| 4 | 极度超卖与回归 | RSI_6_OVERSOLD = 22RSI_6_CLEAR = 30 | 触发极度超卖预警;当 回升至 时触发极度超卖风险解除通知。 |
| 5 | 硬止损线 | STOP_LOSS_HARD = -0.50 | 实时盈亏 时触发 🛑 硬止损,适用于正股与期权持仓。 |
| 6 | 追踪止盈保护 | TRAILING_ACTIVATE = 0.60TRAILING_CALLBACK = 0.25 | 历史最高盈亏曾达 激活;利润自最高点回撤超过 (即 )时触发 💰 追踪止盈。 |
| 7 | 保本防御防线 | BREAK_EVEN_ACTIVATE = 0.30STOP_LOSS_DYNAMIC = 0.05 | 历史最高盈亏曾达 激活;当浮盈回吐至 时触发 🛡️ 保本防御 提示收回本金。 |
| 8 | 时间网格止盈 (一档) | ROLL_PROFIT_FAST (天, 盈 ) | 持仓 天且利润 时触发 🚀 快速止盈。 |
| 9 | 时间网格止盈 (二档) | ROLL_PROFIT_MID (天, 盈 ) | 持仓 天且利润 时触发 🚶 稳健止盈。 |
| 10 | 时间网格止盈 (三档) | ROLL_PROFIT_SLOW (天, 盈 ) | 持仓 天且利润 时触发 🐢 慢速止盈。 |
| 11 | 期权移仓时间里程碑 | DTE 里程碑 [7, 14, 30, 90, 180] | 期权剩余到期天数(DTE)分别 天时提示展期移仓,单里程碑去重锁死。 |
| 12 | Delta 杠杆衰减 | DELTA_ROLL_THRESHOLD = 0.90DELTA_SILENCE_DAYS = 7 | 期权 (深度实值丧失杠杆率)时触发移仓建议,带 7 天静默期。 |
| 13 | 期权到期归档 | DTE | DTE 时发送行权/作废提示,数据库记录物理转为 CLOSED。 |
| 14 | 行情/持仓链路失联 | OUTAGE_MILESTONES = (300, 1800, 7200)OUTAGE_REPEAT = 7200 | 数据或行价连续失联达 5分钟、30分钟、2小时 分级报警;超 2小时 后每 2小时 持续循环推送,恢复后自动推送已恢复通知。 |
15 | 保号交易异常监控 | MAINTENANCE_MAX_COST = 200.0MAINTENANCE_BUY_RETRY_MAX = 3 | 保号买入腿预算上限 \ge$3天 🚨🚨)。 |
16 | 宏观风格动量与轮动哨兵 | STYLE_MONITOR_ACTIVE = trueFAST=21, SLOW=63BUFFER = ±0.5%EXTREME = ±8.0% | 监控 VTV/QQQ 与 CGDV/QQQ 相对比值变化率:1) 风格漂移: 跨越 缓冲带,识别 Risk-On (科技成长) 与 Risk-Off (价值防御) 风格大漂移; 2) 极值拥挤反转: (价值过热/科技左侧反弹) 或 (成长过热/挤泡沫) 触发反向预警; 3) 挂载于盘后估值日报与异动研判,带双向防抖状态机,飞书纯数值零加粗排版。 |
四、 运行逻辑与推送机制
1. 策略轮询主循环 (Tick Loop)
- 开盘判定:
broker.is_open()优先依赖 API 实时时钟;API 故障时自动退落至本地日历半日市感知(精确匹配节假日休市与美股 13:00 提前收盘)。 - 保号交易 (Maintenance Trade):盘中命中预设交易日(如本月第 1/15 交易日)且时间 ≥ 10:00 EST 时,自动拉起异步任务:
- 限价买入 1 股
NOK➔ 成功后限价卖出平仓。 - 若限价卖单超时未成交,自动触发 3 次市价单 (Market Order) 兜底平仓。
- 若兜底彻底失败,主动
raise RuntimeError,捕获后写入 SQLiteNAKED_EXPOSURE持久化裸单标记,并向飞书推送🚨🚨 保号交易致命失败:疑似裸头寸滞留级别告警。
- 限价买入 1 股
2. 风控独立评估与告警批处理合并 (Batch Alert Aggregation)
- 独立评估 (非 elif 截断):在同一个 Tick 评估单个持仓时,以下 4 大风控指标并行计算,互不排斥:
- ⏳ 时间移仓:触及 180 天/120 天等到期防守里程碑。
- 🎯 Delta 移仓:深度实值期权 丧失杠杆率(带 7 天静默期)。
- 🛑 硬止损:持仓亏损触及极值(如 )。
- 💰 追踪止盈 & 🛡️ 保本防御:最高利润回吐及锁定本金。
- 单 Tick 合并推送:同一个 Tick 内涉及的全部告警项会被合并暂存,一次性生成结构化汇总卡片推送至飞书,杜绝高频消息打断。
3. 消息队列与死信队列容灾 (DLQ)
- 告警消息写入异步内存队列
_io_queue,由NotifierIO消费协程逐条下发。 - 若遇到网络波动、飞书接口 5xx 或 QueueFull 且消息标注
important=True时,自动落盘至.notifier_dlq.jsonl文件,并在网络恢复后自动排空重试。
4. 守护探针 (Watchdog)
- 主循环每轮更新时间戳
app_state["last_tick"]。 - 心跳协程定时校验:若盘中超时 180 秒无 Tick 更新,判定主线程卡死,自动暂停向
HEALTHCHECK_URL报活,从而触发外部监控面板转红报警。
5. 异常分级捕获、推送与熔断避让逻辑
系统在 main.py 的主循环与各引擎模块中构建了严格的三级异常避让与自我保护屏障:
- 一级:单次普通异常避让
- 当 Tick 轮询过程中因网络抖动、第三方 API 超时抛出普通
Exception时,计数器err_count += 1。 - 自动触发 30 秒避让休眠(
await asyncio.sleep(30)),防止因高频频繁重试导致 API 被封禁或引起雪崩效应。若下一轮轮询成功,err_count自动清零。
- 当 Tick 轮询过程中因网络抖动、第三方 API 超时抛出普通
- 二级:连续故障广播与连接池协同重置
- 当连续异常次数达到
MAX_CONSECUTIVE_ERRORS(默认 10 次)时,触发二级保护:
- 系统自动协同重置
MarketData连接池(先等待 5 秒收敛在途请求后平滑重新连接,规避 Session 假死)。 - 强制向飞书发送
⚠️ 系统连续故障级别的紧急告警(包含脱敏后的最新错误摘要),通知研发关注。 - 触发系统级长休眠避让(默认 300 秒,
ERROR_PAUSE_SECONDS),避免日志穿透与信息轰炸。
- 当连续异常次数达到
- 三级:单日致命崩溃主动宕机熔断 (Exit Code 70)
- 若在同一自然日内连续触发 3 次二级熔断 (
daily_fatal_crashes >= 3),说明底层遭遇了系统性致命障碍。 - 触发终极安全防线:向飞书广播
🚨 系统强制下线告警后,持久化FATAL_HALT标记,并执行sys.exit(70)主动退出进程。 - 配合 Docker 的
restart: on-failure:5策略,终止容器重启循环,防止失控。上线复活需通过飞书发送/status并清除标记。
- 若在同一自然日内连续触发 3 次二级熔断 (
6. 全量消息推送触发条件与矩阵汇总 (Message Trigger Matrix)
| 分类 | 触发条件 / 临界值 | 目标通道 (receive_id) | 卡片 / 消息格式与标题 | 去重与防打扰机制 |
|---|---|---|---|---|
| 市场急跌 | 标的价格跌幅 (DROP_TRIGGER) | FEISHU_USER_ID (个人) | 🚨 市场异动: 急跌 -X.XX% | 当日单次,set_triggered_today |
| 阶梯破位 | 跌幅在急跌后进一步扩大 (DROP_THRESHOLD_STEP) | FEISHU_USER_ID (个人) | 🚨 市场异动: 再度破位急跌 -X.XX% | 阶梯递进锁定更新 TODAY_MAX_DROP |
| MA50 破位 | 标的突破下穿 50 日均线 (price < MA50) | FEISHU_USER_ID (个人) | 🚨 市场异动: 破位 MA50 | 当日单次,set_triggered_today |
| RSI(14) 超卖 | (RSI_OVERSOLD) | FEISHU_USER_ID (个人) | 🚨 市场异动: RSI(14) 超卖 | 当日单次,set_triggered_today |
| RSI(6) 极度超卖 | (RSI_6_OVERSOLD) | FEISHU_USER_ID (个人) | 🚨 市场异动: RSI(6) 极度超卖 (X.X) | 当日单次,set_triggered_today |
| 硬止损 | 持仓浮亏 (STOP_LOSS_HARD) | FEISHU_USER_ID (个人) | 🛑 硬止损 [现价: $XX.XX] | 单 Tick 批量合并,MD5 阶梯去重 |
| 追踪止盈 | 最高浮盈 且利润回吐达 | FEISHU_USER_ID (个人) | 💰 追踪止盈 [现价: $XX.XX] | 单 Tick 批量合并,MD5 阶梯去重 |
| 保本防御 | 最高浮盈 且回落至 | FEISHU_USER_ID (个人) | 🛡️ 保本防御 [现价: $XX.XX] | 触发后锁定 breakeven_active 状态 |
| 时间移仓 | 到期时间触及 DTE 180 天 / 120 天 | FEISHU_USER_ID (个人) | ⏳ 建议移仓 (时间) | 按到期里程碑 ID 锁定推送 |
| Delta 移仓 | 深度实值期权 (DELTA_ROLL_THRESHOLD) | FEISHU_USER_ID (个人) | 🎯 建议移仓 (Delta) | 默认 7 天静默期窗口限制 (DELTA_SILENCE_DAYS) |
| 保号成功 | 保号交易日成功完成 NOK 买平 | FEISHU_USER_ID (个人) | 🛡️ 保号任务 ✅ | 当日单次,set_triggered_today |
| 保号致命失败 | 限价及 3 次市价兜底均失败 (滞留裸单) | FEISHU_USER_ID (个人) | 🚨🚨 保号交易致命失败:疑似裸头寸滞留 | 写入 DB 标记,主循环每 30 分钟持续复读提醒 |
| 估值日报 | 美东时间 17:30 盘后且数据抓取完成 | FEISHU_GROUP_ID (群组) | 📊 QQQ 估值日报 (YYYY-MM-DD HH:MM) | 当日单次持久化 daily_report_sent_YYYYMMDD |
| 连续故障 | 连续报错达到 10 次 (MAX_CONSECUTIVE_ERRORS) | FEISHU_USER_ID (个人) | ⚠️ 系统连续故障 | 协同重置连接池并长休眠 300 秒 |
| 强制下线 | 单日连续触发 3 次二级熔断 | FEISHU_USER_ID (个人) | 🚨 系统强制下线 | 进程 sys.exit(70) 退出停止运行 |
五、 系统多级 TTL 缓存架构与合理性评估 (10 大缓存机制)
系统的内存级缓存(基于 cachetools.TTLCache 与时间戳/美东日期双重校验)集中在 market.py(市场数据中心)、broker.py(交易网关)和 client.py(通信交互)。缓存体系已实现**“按业务周期精准隔离”**:
| 缓存名称 | 作用对象与逻辑 | TTL / 生存时间 | 所在模块 | 合理性与工程保障评估 |
|---|---|---|---|---|
price_cache | 正股实时买卖价/成交价切片 | 20 秒 | core/market.py | 精妙契合。严格小于 30 秒 Tick 周期,确保单 Tick 内多策略计算基准同一,跨 Tick 必然过期以形成独立采样。 |
option_cache | 期权合约市价(基于 VIX 动态价差容忍度) | 20 秒 | core/market.py | 极度合理。与现价缓存同步,防范跨 Tick 假采样或旧价复用。 |
vix_cache | VIX 恐慌指数 | 120 秒 (2分钟) | core/market.py | 非常合理。从原 30 秒拉长至 2 分钟,消除了主循环边界竞态,兼顾了价差调节敏感度与降频。 |
iv_cache | ATM 隐含波动率 (IV30 / IV365) | 1800 秒 (30分钟) | core/market.py | 救命级优化。计算需拉取 500+ 期权链进行两点插值,30 分钟缓存彻底防范急跌暴跌日 API 限流。 |
delta_cache | 期权希腊字母 Delta 值 | 1800 秒 (30分钟) | core/market.py | 完全合理。主要服务于长周期深度实值移仓建议(自带 7 天静默期),30 分钟精度绰绰有余。 |
cnn_cache | CNN 情绪指数与状态描述 | 1800 秒 (30分钟) | core/market.py | 非常合理。从原 8 小时优化为 30 分钟,确保盘后 17:30 估值日报能准确反映最新美股情绪。 |
vxn_cache | VXN 纳斯达克 100 波动率指数 | 1800 秒 (30分钟) | core/market.py | 合理。用于日报波动率矩阵与监控,30 分钟 TTL 兼顾了时效性与网络负担。 |
pe_cache | Yahoo 实时市盈率 (PE) | 28800 秒 (8小时) | core/market.py | 极其严密。PE 日内几乎不变,8 小时缓存避免滥用非公开接口;取价失败 (None) 拒绝写入缓存,杜绝 403 踩坑。 |
history_cache | 历史日线 K 线 DataFrame (RSI/MA/回撤) | 24小时 + 美东日期校验 | core/market.py | 逻辑严密。除了 24 小时绝对寿命,每次读取强制校验 cached_day == TZ.date(),美东跨夜强制刷新收盘价。 |
CLOCK_SYNC_BUFFER | Tradier 市场开收盘时钟轮询 | 120 秒 (2分钟) | core/broker.py | 优秀。将每日 2880 次无效时钟 API 调用削减 96%,且完全在其 10 分钟鲜活性要求之内。 |
history_fail_cache | 历史日线拉取失败熔断保护 | 60 秒 | core/market.py | 防死亡重试。网络故障或数据不足时锁定 60 秒,避免每个 Tick 频繁下穿拉取引起重复风暴。 |
_calendar_cache_date | 本月有效交易日数缓存 | 当日有效 | core/broker.py | 防频次消耗。美股交易日次位数按自然日缓存,彻底消除了盘中每 30 秒访问日历 API 的高频过度调用。 |
bulk prefetch 机制 | 正股与 OCC 期权批量报价预热 | 单 Tick 级 | core/market.py | 架构级优化。在引擎扫描与持仓评估前按 100 个分块合并发包,将原本 N+1 次并发请求压缩至 1 次。 |
六、 部署与运维操作 SOP
1. 绿云 (GreenCloud) 新加坡 VPS 一键部署规程
在绿云新加坡 VPS 终端中依次运行:
# 1. 克隆代码仓库
cd /root && git clone git@github.com:yyanxiao/HermesAgent.git
# 2. 配置环境变量
cd /root/HermesAgent/clbot && nano .env
# (贴入本文第二节的 .env 模板并填写密钥)
# 3. 容器编译与启动
cd deploy && docker compose up -d --build
# 4. 实时查看防脱敏日志
docker logs -f clbot2. 飞书运维指令 (Command Routing)
在飞书个人对话框或挂载的机器人中,可直接发送以下斜杠指令进行交互与诊断:
/status(或/st) : 诊断系统状态与链路健康度。输出美东时间、交易开闭盘状态、综合行情链路延迟、Yahoo 兜底链路及 WAL 数据库连通性。/p(或/positions) : 列出当前所有活跃持仓、成本价、最新行价、风控标签及累计多空盈亏。/history(或/hist) : 查询已平仓的历史交易台账。/buy//sell//roll: 极客模式下手动录入开仓、平仓与展期移仓。/buy_form//sell_form//roll_form: 唤起可视化交互卡片表单。/del <ID>: 物理抹除数据库中错录的持仓记录 (支持 ID 模糊匹配)。
📝 七、 架构迭代与更新日志 (Change Log)
📌 2026-09-23 (v11.4.2 宏观风格动量与轮动哨兵上线)
本次更新为 clbot 引入了对冲策略层面的宏观风格动量哨兵 (Style Momentum Sentinel),通过监控 VTV/QQQ 与 CGDV/QQQ 的比值变动率(ROC),构建顶层风格大漂移感知:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
core/style_regime.py | 新增核心计算与状态机引擎 | 1. 采集比值数据并计算 (月度敏捷)与 (季度趋势)以及 5 日平滑加速度斜率; 2. 构建 StyleRegimeEvaluator 状态机,包含 零轴双向防抖缓冲带(有效规避 Chop Chop 假突破误报);3. 实现 极端拥挤度反转预警(成长过度拥挤挤泡沫 vs 价值过度拥挤悲观逆转); 4. 统一封装符合飞书规范的高级网格交互式卡片 build_style_regime_card。 |
core/engine.py | 主调度集成与估值日报附挂 | 1. 挂载于盘前与盘后周期巡检流水线中,异步拉取并评估风格状态; 2. 状态发生实质漂移(Risk-On ⟷ Risk-Off)或触发极端拥挤时,向飞书群推送独立预警卡片; 3. 在每日盘后《估值日报》中增设“📌 宏观风格动量 (Style Regime)”二级面板,保持大盘全景透视。 |
infrastructure/config.py | 配置字典契约更新 | 支持零侵入式配置:STYLE_MONITOR_ACTIVE、STYLE_MONITOR_VALUE_TICKER(默认 VTV,可选 CGDV)、STYLE_MONITOR_FAST_PERIOD (21)、STYLE_MONITOR_SLOW_PERIOD (63) 及极值阈值。 |
infrastructure/feishu/cards.py | 排版红线合规设计 | 确保飞书卡片纯数值零加粗、无裸 $ 符号与 LaTeX 公式、原生宽屏展示与 {"tag": "hr"} 物理分割。 |
📌 2026-09-19 (v11.4.1 生产日志信噪比极致优化:彻底收敛定时重连与状态机GC噪音)
- 【WebSocket 定时刷新日志静默 (
feishu/client.py)】:将[Feishu WS] 接收到优雅退出信号,正在卸载 SDK 任务...降级为DEBUG级别;长连接挂载日志仅在服务首次冷启动时输出一次INFO,后续每日美东双锚点(03:00 与 17:00)定点刷新全部收敛至DEBUG。 - 【状态机例行清理日志降噪 (
infrastructure/db.py)】:将每日午夜执行的 SQLite 临时状态锁与过期死信清理日志[DB] 状态机自动清理完成...降级为DEBUG级别,消除日常无故障垃圾回收造成的控制台刷屏。
📌 2026-09-17 (v11.4.0 WebSocket 美东双锚点固定定时刷新与日志静默重构)
- 双锚点固定静默刷新 (
infrastructure/feishu/client.py):废除相对计时84600秒(23.5小时)导致的每日重连时间向前漂移 30 分钟缺陷,改用美东时间双锚点动态对齐机制(美东 03:00 与 17:00 EDT/EST)。- 美东 03:00 (美西 00:00 / 北京 15:00):深夜盘后静默期,距美股开盘 6.5 小时;
- 美东 17:00 (美西 14:00 / 北京 05:00):美股常规交易盘刚结束,盘后主要流动性出清完毕。
- 24小时硬掐断彻底免疫:单次长连接存活时长严格稳定在 10 ~ 14 小时之间,大幅远离飞书服务端 24 小时强制掐断线,零毫秒被动断连风险。
- 生产日志彻底净化:将例行重连与调度计划日志全部收敛降级为
DEBUG级别,在生产INFO模式下完全静默,不再污染项目标准运行日志。
📌 2026-09-10 (v11.3.9 全量代码 PEP 8 规范化、Linux LF 换行符统一、注释净化与生产性能轻量化治理)
- 生产轻量化性能与容错治理 (Production Hardening):
- 日志指纹库 TTL 内存治理 (
main.py):引入cachetools.TTLCache(maxsize=1000, ttl=86400)配合threading.Lock。淘汰了原先暴力的set(list(...)[:2500])截断,锁死内存占用在百 KB 级别,实现 24 小时自然滑动淘汰,保障隔天复发的严重故障能重新触发飞书告警。 - Yahoo Crumb 全局连接池复用 (
core/market.py):废弃单次爬虫临时建连,构建_get_yahoo_session()全局长连接池复用底层的 TCP Connector 与 CookieJar 状态,请求延迟直降 70%(省去 150ms 建连握手),大幅降低触发 Yahoo 频控封锁 IP 的概率。 - 交易日历联动与半日市感知降级 (
core/broker.py):将月度日历缓存_today_calendar_day深度打通至本地is_open()降级逻辑。优先识别日历中当天开闭盘时间定义(如 09:30-13:00)与非交易日,彻底消除假期或半日市早退后的无效空轮询。
- 日志指纹库 TTL 内存治理 (
- 代码规范与格式化 (PEP 8):
- 运用 Ruff 格式化引擎对
clbot全量 17 个 Python 文件完成规范化排版与结构对齐(88 字符折行,消除悬挂逗号与空格错位)。 - 全量消除 Windows
\r\n(CRLF) 换行符,统一转换为标准 Linux\n(LF)。
- 运用 Ruff 格式化引擎对
- 注释与历史标签净化:
- 清理全代码中遗留的历史草稿式注释(如
# 核心修复: 原实现...、# 核心优化...),规范重构为清晰的# 设计约束:与# 设计规范:业务文档,提升代码专业度与信噪比。
- 清理全代码中遗留的历史草稿式注释(如
- 全量测试与实盘验证:
- 本地自动化测试套件
test_suite.py(8/8 PASS)、test_p0_fixes.py(5/5 OK)与test_security_gates.py(4/4 OK)全部通过验证,并已热更新至绿云生产 VPS。
- 本地自动化测试套件
📌 2026-09-07 (v11.3.9 全量安全专项加固:实盘硬防线物理熔断、NaN/Inf特殊值清洗与Traceback递归脱敏)
本次更新落实了系统安全专项审计整改,在最底层构建了物理级硬防线与输入脱敏闭环:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
core/broker.py | 实盘下单底层物理硬防线 | 在 _execute_order_leg 咽喉点增加物理断路器:动态绑定 .env 配置的 MAINTENANCE_SYMBOL(如 NOK)白名单与 MAINTENANCE_QTY 数量上限;任何非白名单标的或超额数量坚决抛出错误阻断,从物理最底层杜绝实盘误操作。 |
feishu/handlers.py | 浮点数特殊值强类型清洗 | 引入 math.isfinite() 校验,对买入/平仓/展期的价格、数量及行权价进行有限性断言,彻底封堵 NaN 与 Inf 绕过正数校验毒化下游持仓台账与指标计算的漏洞。 |
feishu/handlers.py | 持仓模糊匹配空串通配阻断 | _match_position 强制限制检索目标有效长度必须 字符,彻底杜绝指令入参为空串时误通配全局持仓引发误平仓。 |
main.py / config.py | Traceback 异常栈递归脱敏 | 实现 HardenedMaskingFormatter,深入清洗 formatException 调用栈中的私密凭证与 URL Token,并在 SECRET_KEYS 中补充账号与 AppID 保护,防止网络报错时明文泄密。 |
test_security_gates.py | 安全测试套件上线 | 新增 test_security_gates.py 自动化测试,全量 4/4 项安全防御断言 100% 真实通过。 |
📌 2026-09-05 (v11.3.8 生产级缺陷加固:DLQ 持久化重定向、保号买入落盘强校验与异常退场闭环)
- 死信队列 (DLQ) 目录持久化重定向 (
infrastructure/feishu/client.py):- 将 DLQ 回退路径从原已废弃的根目录
.重构为强绑定CONFIG["DATA_DIR"](挂载卷data/),根除容器重新发布与重建时滞留告警(如止损建议、保号通知)丢失的系统性漏洞。
- 将 DLQ 回退路径从原已废弃的根目录
- 保号买入状态机落盘结果强校验 (
core/maintenance.py):- 严格校验
set_state_value(PENDING_KEY)与set_triggered_today(BUY_DONE_KEY)的持久化布尔返回值。 - 若买入成交但落盘失败,立刻触发
logger.critical并下发🚨 保号状态机异常紧急飞书卡片,杜绝因瞬时 DB 锁导致隔夜头寸遗漏平仓。
- 严格校验
- WS 引擎通用异常退场安全防护 (
infrastructure/feishu/client.py):- 在捕获未知异常并准备重试的兜底分支中注入
stop_event.set()与await ws_task,确保旧线程退出后再启新线程,防范未知异常引发的跨 Loop 踩踏。
- 在捕获未知异常并准备重试的兜底分支中注入
📌 2026-09-04 (v11.3.8 消除优雅停机时子循环解冻的良性报错与虚假重连提示)
本次更新彻底根除了进程停止或容器重启瞬间,看门狗解冻子循环引发的良性异常输出,使停机日志达到 100% 纯净:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
infrastructure/feishu/client.py | 平滑吸收 Event loop stopped 异常 | 在子线程 _start_ws_client() 内捕获 RuntimeError,对由于 sub_loop.stop() 解冻导致的 Event loop stopped before Future completed 予以平滑吸收并降为 DEBUG 级别,阻止其向上抛至外层 ERROR 分支。 |
infrastructure/feishu/client.py | 停机标志熔断阻断重连循环 | 在外层 try ... except 异常分支及主等待逻辑后,显式检测 self._ws_stopped 状态。一旦处于停机流程,直接 break 退出协程,彻底切断原有的 5秒后重连 虚假报错与休眠。 |
📌 2026-09-04 (v11.3.7 飞书 SDK 空闲断线重连噪音降级为 DEBUG 并消除双重输出)
本次更新解决了飞书官方 SDK 在公网长连接空闲轮换时将良性自愈重连误报为 ERROR 制造假警报的问题,并根除了终端双重重复输出:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
main.py | LarkNoiseFilter 噪音拦截降级 | 实现 LarkNoiseFilter(logging.Filter),检测当日志属于 Lark 且包含 receive message loop exit 时,自动将其级别重写为 DEBUG;在生产默认 INFO 模式下直接拦截静默(返回 False),彻底消除了控制台误报的红色假警报。 |
main.py | 第三方 Logger 默认 Handler 清理 | 在 setup_logging 中显式调用 l_obj.handlers.clear() 清理 Lark 内部自带的无过滤 StreamHandler,并保持 propagate = True 统一收敛至 CLBOT 标准格式化器,彻底消除了同一条日志打印两遍的缺陷。 |
test_p0_fixes.py | 单元测试断言 | 新增 test_lark_noise_filter_downgrade_to_debug 自动化测试用例,断言在 INFO 模式下重连噪音被拦截,在 DEBUG 模式下级别被重写为 DEBUG,真实错误不受任何影响(5/5 测试通过)。 |
📌 2026-09-04 (v11.3.6 根除保号卖出裸空头竞态、优雅退出顺序闭环与 DB 连接防污染)
本次更新彻底消除了保号卖出撤单并发导致的裸空头风险、停机资源悬挂与协程取消造成的数据库连接污染:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
core/broker.py | 保号穿透核验防裸卖空 (P0) | 在 sell_maintenance_leg 限价卖单撤单后、发起市价兜底前,强制向券商端穿透核验实际持仓。严格解耦网络异常(返回 None)与真实零持仓:查询失败时坚决报错熔断拒绝市价单;若持仓已归零自动校准为全额成交并拦截市价单;确有正多头时按 min(remain, int(latest_held)) 限量报单,杜绝超额卖出打出裸空头。 |
infrastructure/feishu/client.py | 长连接优雅停止信号与任务回收 (P0) | 引入 _ws_stopped 标记与 close_ws() 方法;子线程看门狗轮询间隔缩短至 0.5s,在 3.0s wait_for 窗口内保证充足采样;显式 cancel() 并安全 await 回收外层 _polling_task 轮询任务,彻底杜绝 5 秒幽灵复活与僵尸重连。 |
main.py | 停机析构拓扑顺序闭环 (P0) | 重构 Application.shutdown() 退出序列:严格遵循依赖倒序(排空在途任务 ➔ 优雅停止飞书长连接 ➔ 释放行情网络会话 ➔ 最后关闭 SQLite 连接),根除退出阶段在途协程写库引发的 Cannot operate on a closed database 级联异常。 |
infrastructure/db.py | 数据库连接防污染与防死锁 (P1) | 将 _get_conn 异常分支捕获从 Exception 扩展为 BaseException(涵盖 Python 3.8+ 的 asyncio.CancelledError),确保外部任务超时被取消时底层 SQLite 脏连接被干净关闭并置空重置,消除连接池状态污染与事务死锁。 |
main.py | 日志去重器线程互斥与滑动窗口 (P1) | 为 FeishuLogHandler 指纹库增加 threading.Lock 保护多线程并发访问;废弃全量 clear(),改为容量超过 5000 时保留后 2500 条的滑动淘汰机制,杜绝网络抖动时的全量告警二次雪崩。 |
test_p0_fixes.py & test_suite.py | 测试套件健全性 | 补充 test_p0_fixes.py 专项深度测试(4/4 通过),全量功能套件 test_suite.py(8/8 通过),并在 infrastructure/config.py 中导出 env_int/env_float 标准解析别名。 |
📌 2026-09-03 (v11.3.5 引入跨线程 stop_event 优雅退场与 shield 隔离,根除跨 Loop 踩踏)
- 跨线程优雅退出与子线程生命周期闭环 (
infrastructure/feishu/client.py):- 根因消除:在
asyncio.to_thread运行阻塞的ws_client.start()时,外部wait_for超时无法杀死 Python 操作系统的 worker 线程,导致旧线程在后台僵尸运行,与新线程并发踩踏模块级全局loop变量,从而抛出Task ... got Future ... attached to a different loop。 - 优雅停机与看门狗通信:引入
threading.Event()(stop_event),并在子事件循环中挂载_watchdog协程;当超时发生时触发stop_event.set(),由子线程主动取消内部所有任务并调用sub_loop.stop()干净解冻阻塞。 - 主协程串行等待收割 (
await ws_task):使用asyncio.shield保护线程任务,并在超时重连前显式await ws_task,确保旧线程 100% 物理销毁后方才启动下一代长连接,彻底实现严格串行化与零跨 Loop 污染。
- 根因消除:在
📌 2026-09-02 (v11.3.4 彻底根除 lark-oapi WebSocket 模块级 loop 绑死与 GC 析构异常)
- SDK 模块级 Loop 重定向 (
infrastructure/feishu/client.py):在_start_ws_client()子线程沙盒中,显式将lark_oapi.ws.client.loop重定向赋值为当前子线程专属的sub_loop,彻底消除了连续运行 23.5 小时定时重连时报出的This event loop is already running历史死循环缺陷。 - ExpiringCache 安全取消与析构保护:在
finally资源收割阶段,显式取消ws_client._cache._cron定时器任务,根除 Python 垃圾回收阶段由于 Event loop 提前关闭抛出的Event loop is closed/Task was destroyed but it is pending!警告。
📌 2026-08-29 (v11.3.3 响应 Tradier 费率新规,保号交易频率调整为每月第 8 个交易日)
- 保号交易频率优化 (
infrastructure/config.py):根据 Tradier 2026年9月新规(彻底取消非美客户月度闲置费,仅保留年度 2 笔交易豁免要求),将保号交易触发日从原有的每月第 1、15 个交易日(1,15)优化为每月第 8 个交易日(8)。在确保每年 12 笔真实交易健康心跳与年度闲置费完全豁免的前提下,使交易敞口与摩擦成本降低 50%。
📌 2026-08-13 (v11.3.2 Yahoo Crumb 爬虫会话注入 TCPConnector force_close 防句柄残留)
- 底层 Socket 句柄即时关闭 (
core/market.py):在get_realtime_pe中为独立的 Yahoo CrumbClientSession显式注入aiohttp.TCPConnector(force_close=True)。确保单次爬虫会话在请求结束后立即关闭底层 TCP 连接,杜绝长时间运行下的 Socket/SSL 句柄残留隐患。
📌 2026-08-13 (v11.3.1 子线程 Event Loop 显式收割与句柄泄漏彻底销毁)
本次更新彻底消除了由于子线程 Event Loop 未显式销毁引发的 AttributeError: _ssock 及 Too many open files 连环掉线隐患:
- 子线程 Event Loop 显式收割 (
infrastructure/feishu/client.py):在_start_ws_client()的finally块中加入sub_loop.run_until_complete(sub_loop.shutdown_asyncgens())与sub_loop.close()。 - 根除句柄与事件循环冲突:确保子线程每次重连或退出时,物理销毁
self-pipe管道句柄,切断垃圾回收器 (GC) 阶段的未处理异常,彻底杜绝This event loop is already running与Too many open files造成的掉线死锁。
📌 2026-08-08 (v11.3.0 WS 独立事件循环沙盒与 FeishuLogHandler MD5 指纹去重防轰炸)
本次更新彻底消除了飞书 SDK 在底层子线程中绑定主 Event Loop 的冲突,并为系统构筑了带 MD5 哈希去重的全局错误告警防线:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
client.py | WS 子线程独立事件循环沙盒 | 将 ws_client = lark.ws.Client(...) 的实例化与 start() 启动全量移入子线程函数 _start_ws_client(),在内部显式调用 asyncio.set_event_loop(asyncio.new_event_loop()) 创建专属沙盒 Loop,彻底解决 This event loop is already running 崩溃。 |
main.py | FeishuLogHandler 全局报错劫持 | 实现原生 FeishuLogHandler(logging.Handler),挂载至 root 日志记录器,拦截 ERROR / CRITICAL 日志,通过 loop.call_soon_threadsafe 送入 broadcast_urgent 异步队列。 |
main.py | MD5 哈希指纹去重防轰炸 | 排除 infrastructure.feishu 及底层网络库报错防止死循环;提取 record.name + raw_msg + exc_info 生成 MD5 哈希指纹(_seen_errors 集合),对相同的错误仅推送一次,防止轰炸与告警疲劳。 |
📌 2026-08-07 (v11.2.0 WS 23.5h防假死熔断、Lark噪音抑制与 MA100 均线指标)
本次更新解决了飞书 24 小时长连接强制断开导致的底层 SDK 假死与双重打印日志噪音,并在估值日报中成功串联并上线了 MA100 支撑位:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
client.py | WS 23.5h 防假死主动重连 | 在 start_polling_loop 中使用 asyncio.wait_for(asyncio.to_thread(ws_client.start), timeout=84600) 增加了 23.5 小时强制熔断机制,在服务端强掐前主动触发超时并引发平滑重连,根除官方 SDK 内部死锁假死。 |
main.py | 第三方 Logger 噪音压制 | 在 setup_logging 抑制列表中补充了 "Lark" 和 "websocket",彻底切断飞书 SDK 内部底层报错的向上重复传播。 |
market.py | MA100 策略指标计算导出 | 在 TitanIndicators 契约与 get_titan_indicators 函数中,调用 _safe_ma(close_calc, 100) 接入 MA100。 |
engine.py / cards.py | MA100 估值日报 UI 串联 | engine.py 的 build_and_send_report 提取 ma100 打包进 report_data;cards.py 的 build_report_card 网格字段列表增加 MA100 支撑 的可视化展示。 |
📌 2026-08-06 (v11.1.0 飞书高级互动卡片全量组件融合与导出解耦)
本次更新解压并融合了 0806.zip 的全量最新源码,完成了飞书互动卡片组件的全量统一导出与控制层解耦:
- 组件全量导出 (
feishu/__init__.py):暴露build_buy_form_card、build_sell_form_card、build_roll_form_card、build_text_card、build_urgent_alert_card、build_report_card、build_portfolio_card及CommandHandlerMixin,彻底屏蔽内部架构细节。 - 解耦优化 (
core/engine.py):Notifier 模块的导入路径收敛为from infrastructure.feishu.client import Notifier,消除了与旧版导出格式化函数的循环依赖隐患。 - 全量链路回归:通过
test_diagnostics.py自动化诊断(报价、RSI/MA50 指标、VIX/PE 兜底探针、持仓 PNL 计算与死信队列容灾全盘 PASS)。
📌 2026-08-05 (v11.0.0 飞书高级互动卡片 UI/UX 全面重构)
本次更新将 clbot 系统的飞书消息推送架构从“纯文本/简单 Markdown 拼接”彻底升维至**“飞书高级互动卡片(Interactive Cards)体系”**。在保持核心交易逻辑不改动的前提下,实现了专业级视觉排版、双列网格布局与防误杀安全防护:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
cards.py | 高级互动卡片构建器 (UI 视图层) | 1. 引入红/绿/蓝/黄彩色页眉模板(Colored Headers),提升告警与视图的视觉冲击力。 2. 启用了 Fields 双列/多列网格布局,将 RSI、MA50、IV30、VIX、最大回撤等指标像专业研报一样精准对齐。 3. 修正最大回撤 drawdown 的金融语义,显式包含 - 减号前缀(如 -12.50%)。4. 重构 _safe_format 辅助函数,采用 format(v, spec) 消除 f-string 动态格式化语法歧义,并加入 math.isnan 容错。 |
client.py | 智能颜色路由与防二次转义 (通信基建层) | 1. 引入 _infer_template 颜色推断引擎,自动根据文本特征识别告警、成功、警告与常规状态并包裹彩色页眉卡片。2. 在 _send_feishu_payload 中增强类型防御(isinstance(card_json, dict)),防止传入字符串 JSON 时被二次转义触发飞书 10012 Content format error 报错。3. _ws_card_handler 统一返回标准的 Toast 响应字典 {"toast": {"type": "info", "content": "已收到指令"}},阻断前端卡片按钮转圈。 |
handlers.py | 持仓视图与指令卡片化 (业务控制层) | 1. /p 持仓视图重构:调用 build_portfolio_card 输出网格化卡片,并在适配层动态注入 pnl_icon 盈亏红绿灯图标。2. 指令反馈全面卡片化: /buy、/sell、/roll、/status、/history 等指令结果全部升级为带彩色标题的卡片弹窗。 |
core/engine.py | 数据解耦与结构化字典下发 (业务引擎层) | 1. 补齐 _async_alert_dispatch 中缺失的 ma50 与 drawdown 数据键。2. 剥离引擎层内部的 Markdown 文本硬编码拼接,改为输出结构化 dict 载荷直接交由 cards 视图层渲染。 |
📌 2026-08-05 (v10.3.0 状态驱动长效告警锁重构与 Vacuum 豁免加固)
本次更新针对 clbot 的告警锁机制进行了彻底重构,放弃了依附美东日期的短时锁,全面引入“破位触发长效锁 + 收复自动销毁 + 数据库 Vacuum 豁免”的全闭环控制:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
core/engine.py | 告警长效锁机制重构 | 放弃依附日期后缀的 is_triggered_today 短时锁,改用 get_state_value 长效锁。当价格/指标破位(MA50、RSI-14、RSI-6)时打上长效锁并只推送一次告警;直到价格/指标重新收复安全线(触发 _emit_signal_clear)时才物理销毁该锁(set_state_value(lock, False))。 |
infrastructure/db.py | 真空清理 (Vacuum) 豁免加固 | 在 vacuum_expired_keys 的 SQL 过滤规则中,除了 signal_ma50_% 与 signal_rsi_% 之外,补充补充了 signal_rsi_6_% 的免死豁免规则,彻底解决连续暴跌期间长效锁被 3 天定时清理任务误扫导致重复惊扰的隐藏漏洞。 |
📌 2026-08-05 (v10.2.0 波动率矩阵基准收敛与 IV30 架构重构)
本次更新针对 clbot 系统的波动率分析矩阵进行了深度重构与清洗,收敛了多期限隐含波动率(IV)的基准,优化了计算指标与飞书日报的呈现逻辑:
| 涉及模块 | 变更类型 | 详细修改与底层代码实现 |
|---|---|---|
core/engine.py | 波动率矩阵基准收敛 | 彻底去除了 IV365(远端隐含波动率)的采集与相关字典字段 iv365,统一收敛为以 IV30 作为唯一的隐含波动率基准。 |
core/engine.py | 偏离度计算逻辑修正 | 修正长期限历史波动率偏离度 long_diff 的计算公式,由原先对比 IV365 与 HV252,修改为以 IV30 对比 HV252(即 (IV30 / HV252 - 1) * 100)。 |
core/engine.py | 飞书估值日报排版优化 | 重构了盘后估值日报中 “🌊 波动率矩阵 (Volatility Matrix)” 的 Markdown 渲染结构。移除了“近端/远端”混乱标签,清晰直观地展示 IV30、HV20(及其偏离度)与 HV252(及其偏离度)。 |
📌 2026-08-03 (v10.1.0 网络安全与防爆发包优化)
本次更新针对并发线程安全边界、死信队列磁盘 I/O 阻塞以及持仓视图中的 MA50 并发请求风暴进行了深度修复,并正式恢复并优化了 /status 运维诊断指令:
| 涉及模块 | 修复缺陷与优化项 | 详细修复方案与底层代码实现 |
|---|---|---|
client.py | WS 回调并发与线程安全边界 | 在 _ws_message_handler 和 _ws_card_handler 中,通过 call_soon_threadsafe 将任务抛给主事件循环前,在同步线程内将 sender_id、text、event_id、token 及 form_value 显式解包/深拷贝为 Python 原生标量与字典,彻底切断异步闭包对飞书 SDK 底层 C 扩展对象或网络反序列化对象的延时引用,根除并发数据污染。 |
client.py | 死信队列 (DLQ) 磁盘 I/O 阻塞 | 在 Notifier 初始化中配置独立的单线程执行器 ThreadPoolExecutor(max_workers=1, thread_name_prefix="DLQ_Worker")。将 _save_to_dlq 与 flush_dlq 中的磁盘文件读写交由该隔离执行器处理(run_in_executor),防止极端网络故障下大量失败告警涌入落盘打满默认线程池或阻塞主 Asyncio 事件循环。 |
portfolio.py | MA50 计算引发的 K 线并发请求风暴 | 在 build_portfolio_view 中循环获取各个持仓标的的指标 market.get_titan_indicators(t, live=False) 时,显式传入 live=False 参数。由于持仓视图展示的 MA50 并不要求秒级实时,强制利用本地已有的日线历史缓存,杜绝在未命中实时缓存时意外触发全量 K 线数据的并发请求风暴。 |
handlers.py | 新增 /status (或 /st) 运维诊断指令 | 1. 在 _dispatch_command 的 match cmd: 路由结构中新增 "status" | "st" 匹配。2. 新增异步 _cmd_status() 方法,实时输出美东时间、交易开闭盘状态、综合行情链路延迟(quote_age)、Yahoo PE 兜底接口联通性及数据库 WAL 探针,提供无侵入的只读健康度诊断。 |
八、 数据安全与自动化测试规程
1. SQLite 数据库在线热备份
由于数据库持续处于 WAL 读写状态,严禁直接使用 cp 拷贝,必须执行在线 VACUUM 备份:
sqlite3 ~/clbot/data/clbot.db "VACUUM INTO '/root/clbot/data/clbot_backup_$(date +%Y%m%d).db'"2. 全量自动化回归与集成测试
在任何部署或更新代码的环境中,均可手动触发全量测试套件进行物理验收:
# 1. 运行深度加固专项回归测试 (防裸卖空/优雅退出/DB取消防污染)
python3 /root/HermesAgent/clbot/test_p0_fixes.py
# 2. 运行核心功能单元/边界自动化测试 (8/8 PASS)
python3 /root/HermesAgent/clbot/test_suite.py
# 3. 运行生产级全链路诊断探针 (报价/指标/VIX/持仓PNL/死信容灾)
python3 /root/HermesAgent/clbot/test_diagnostics.py九、 QQQ 近10年买入/异动预警指标全景回测绩效 (2015-2026)
基于 2015-01 至 2026-09 近 10 年(2,700+ 个交易日)真实历史日 K 数据,对 clbot 生产系统的入场研判模块(_check_entry)及四大买入预警法则在基准标的 QQQ 上的表现进行了事件研究法(Event Study)严格回测。详细数据底表归档在仓库 qqq-options-backtest/clbot_entry_signals_10y_backtest.xlsx。
1. 核心预警指标 10 年回测总表
全样本无脑基准 (Benchmark):任意交易日买入并持有 QQQ:
- 未来 30 天(21 交易日)平均涨幅:+1.61%,胜率:67.5%
- 未来 180 天(126 交易日)平均涨幅:+9.90%,胜率:80.8%
| 预警指标名称 | 触发阈值与逻辑契约 | 10年触发次数 | 未来 30 天平均涨幅 | 未来 30 天胜率 | 未来 180 天平均涨幅 | 未来 180 天胜率 | 核心指导价值与阿尔法归因 |
|---|---|---|---|---|---|---|---|
| 全样本买入基准 | 任意交易日持有 | 2,700+ | +1.61% | 67.5% | +9.90% | 80.8% | 美股科技长牛自然向上漂移基线 |
| 阶梯急跌 | 当日跌幅 | 167 次 | +2.33% | 64.1% | +13.37% | 77.9% | 短期存在 3~5 天动量惯性,半年期收益显著跑赢基准 3.47 个百分点 |
| MA50 破位支撑 | 现价 MA50 (带收复锁) | 80 次 | +1.37% | 71.4% | +11.49% | 83.8% | 短期面临筹码消化压制,中线半年胜率稳健提升至 83.8% |
| 经典超卖 | RSI(14) (回升>40解) | 45 次 | +3.71% | 73.3% | +15.68% | 86.0% | 超额 Alpha 显著:30天收益翻倍,半年平均大赚 15.68% (跑赢基准 5.78%) |
| 极度情绪超卖 | RSI(6) (回升>30解) | 49 次 | +3.59% | 75.5% | +14.69% | 89.4% | 敏捷情绪见底:30天胜率 75.5%,半年胜率高达 89.4% |
| 双超共振买入 | RSI14 且 RSI6 | 36 次 | +4.43% | 75.0% | +16.13% | 91.2% | 全场最佳买点:半年胜率 91.2%,平均收益超基准 63%,高赔率黄金坑 |
2. 量化实战执行指南
- 【双超共振】是系统最确定的做多信号 (Golden Setup):
- 近 10 年仅出现 36 次,一旦出现,未来半年胜率高达 91.2%,平均回报 +16.13%;
- 对应历史上著名的黄金底部(2018年末清仓暴跌、2020年3月疫情底、2022年10月熊市底、2024年8月日元套息平仓底);
- 实战指引:逢出现此报警,应果断执行卖出看跌期权(Short Put)收取高 IV 权利金,或分批建仓 QQQ 现货 / 买入实值 Call。
- 【阶梯急跌 】需防范短期惯性杀跌:
- 30 天胜率微降至 64.1%,表明单日大阴线有下探惯性;但 180 天平均涨幅达 +13.37%;
- 实战指引:避免单日急跌首日“无脑满仓接飞刀”,建议结合 RSI-6 极度超卖 确认恐慌出清后再分批介入。
本 SOP 已同步写入本地 Wiki 知识库,所有更改与工程规程均符合只读安全与生产就绪要求。