clbot 对冲策略系统配置与运维

clbot 是运行于后台的量化策略(Titan)与异动风控守护进程。通过监控 VIX、VXN 隐含波动率以及 QQQ 均线,实施阶梯式跌幅风控,并向飞书发送异动警报卡片,同时接收用户的按钮反馈执行仓位平仓或展期。


一、 项目目录结构 (Directory Tree)

clbot/
├── core/                       # 核心业务引擎 (Domain/Logic)
│   ├── __init__.py             # 包识别文件
│   ├── engine.py               # 主交易策略与生命周期
│   ├── market.py               # 市场数据中心与指标计算
│   └── broker.py               # 底层交易网关
├── infrastructure/             # 基础架构与基础设施 (Infrastructure)
│   ├── __init__.py             # 包识别文件
│   ├── db.py                   # SQLite 数据库与持久化仓储层
│   ├── config.py               # 统一配置管理与防脱敏安全模块
│   └── feishu/                 # 飞书交互模块包 (MVC 分层)
│       ├── __init__.py         # 暴露入口 (无缝对接 engine.py 和 main.py)
│       ├── cards.py            # 视图层 (View):表单卡片 JSON 构建与排版
│       ├── handlers.py         # 控制层 (Controller):指令路由与业务桥接
│       └── client.py           # 基建层 (Client):WebSocket通信与 IO 队列
├── data/                       # 持久化挂载目录 (Docker Volume)
│   ├── clbot.db                # SQLite 数据库文件 (WAL 模式伴生文件在此生成)
│   ├── clbot_state.json        # 状态缓存
│   ├── .fs_offset              # 飞书消息游标或 Token 缓存
│   └── .notifier_dlq.jsonl     # 发信失败的死信队列容灾文件
├── logs/                       # 日志持久化目录 (Docker Volume)
│   └── clbot.log               
├── deploy/                     # 部署链路配置
│   ├── Dockerfile
│   └── docker-compose.yml
├── .env.example                # 环境变量契约模板
├── requirements.txt            # Python 依赖清单
└── main.py                     # 主守护进程入口

二、 系统配置参数矩阵 (.env 契约)

项目根目录下的 .env 配置文件参数详解:

配置键名参数类型默认值 / 推荐值作用与物理边界
FEISHU_USER_IDID[REDACTED]用户的个人飞书 Open ID(ou_ 前缀),接收异动警报与表单指令交互。
FEISHU_GROUP_IDID[REDACTED]用于接收盘后估值日报的群组 ID(oc_ 前缀)。
TRADIER_ACCOUNT_ID账户[REDACTED]Tradier 资金账户账号。
TRADIER_PAPER布尔false是否为模拟盘。必须在只读模式下设为 false 并剥离写接口。
MAINTENANCE_ACTIVE布尔false账户防休眠自动保号功能开关。必须设为 false 以防资金损耗。
MAINTENANCE_SYMBOL股票NOK保号交易买卖的标的代码。
MAINTENANCE_QTY股数1每次保号买卖的股票数量(限 1 股)。
REPORT_TIME时间07:30触发美股盘后估值日报的北京时间。
SQLITE_DB路径data/clbot.db持久化数据库路径(建议使用 WAL 模式防死锁)。

三、 config.py 核心参数矩阵与物理意义

在系统核心配置中心 clbot/infrastructure/config.py 中,各项全局参数作用梳理如下:

1. 🔑 核心密钥与账户安全参数

  • TRADIER_TOKEN:Tradier API 生产环境的 Bearer 行情与交易鉴权密钥,决定底层 HTTP 会话是否处于激活状态(tradier_active)。
  • TRADIER_ACCOUNT_ID:你的 8 位 Tradier 资金账户号码,用于路由仓位和下单网关(broker.py)。
  • TRADIER_PAPER:布尔值(true/false),定义是否连接模拟盘(Paper Trading)沙箱。
  • FEISHU_APP_ID / FEISHU_APP_SECRET:飞书开放平台自建应用的凭证,控制 WebSocket 接收事件与消息卡片的主通信鉴权。

2. 📈 市场基准与数据调度参数

  • MARKET.TIMEOUT:设置 API 网络请求超时强熔断秒数(默认 15 秒),防止单次握手卡死拖垮主轮询。
  • MARKET.VIX_SYMBOL:标的波动率指数代码(默认 ^VIX),用于评估全市场宏观避险水位。
  • MARKET.BENCHMARK_SYMBOL:策略盯盘的现货基准符号(默认 QQQ),决定所有的跌幅监控、均线及历史波动率(HV)计算的数据源。

3. 🛡️ 账户保号活跃交易参数 (防休眠)

  • MAINTENANCE_ACTIVE:防账户休眠被收费的自动交易开关。
  • MAINTENANCE_TRADING_DAYS:设定在每个月的哪些天执行保号交易(默认每月 1,15 号)。
  • MAINTENANCE_SYMBOL:用于保号交易的股票标的(默认低价股 NOK 诺基亚)。
  • MAINTENANCE_QTY:每次保号自动买入/卖出的股数(默认限制为最小的 1 股)。

4. 🛎️ 消息通信与指令调度参数

  • FEISHU_USER_ID:接收异动告警与交互卡片(平仓、展期按钮回执)的个人 Open ID。
  • FEISHU_GROUP_ID:接收盘后估值日报的群组 ID。
  • REPORT_TIME:盘后触发多账户 Dietz 财务核算并发送估值日报的时间(已更新为美东盘后 17:30,约北京时间次日清晨 05:30 CST)。
  • CMD_COOLDOWN:飞书命令交互冷却防刷时延(默认 2.0 秒),防止高频点击按钮导致并发竞态。

5. 🌊 市场波动率与情绪阶段参数

  • VIX_STAGES:定义了 6 个波动率级别范围(0-20 常态期,20-25 观察期,25-30 介入期,30-40 击球区,40-50 贪婪区,50-999 黄金坑),提供宏观风控评定。
  • VOL_STAGES.VXN:针对纳斯达克 100 波动率指数(VXN)定义的 5 阶情绪分类(Tier 1 极度低波 到 Tier 5 极值安全线),用于警报卡片的可视化标注。
  • VOL_STAGES.HV / HV_252:针对 20 日和 252 日历史波动率定义的平静/正常/剧烈偏离状态。

6. 🧠 Titan 策略与风控决策参数

  • TITAN.LEVERAGE:策略最高使用的杠杆上限倍数(默认 4.0 倍)。
  • TITAN.DROP_TRIGGER:触发急跌警报的阈值比例(默认 -0.01,即日内跌幅达 1% 时警报)。
  • TITAN.RSI_OVERSOLD:RSI 强力超卖警报阀值(默认小于 35)。
  • TITAN.MA_BULL:牛熊判断的长线均线周期(默认 200 日均线)。
  • TITAN.STOP_LOSS_MA:止损参考的均线(默认 MA100,收盘破位触发止损提示)。
  • TITAN.ROLL_DEFENSE_DTE:时间防守移仓天数阀值(默认 180 天,当 LEAPS 期权剩余天数小于该值时,自动触发移仓提示以避开时间衰减加速区)。
  • TITAN.DELTA_ROLL_THRESHOLD:深度实值移仓 Delta 阈值(默认 0.90,达到此值意味着期权已丧失杠杆,需要向上展期)。
  • TITAN.STOP_LOSS_HARD:权利金账户最高硬止损线(默认 -0.50,亏损 50% 自动止损)。
  • TITAN.TRAILING_ACTIVATETRAILING_CALLBACK:追踪止盈的激活线(利润达 60% 激活)与最大回撤幅度(回吐最高利润的 25% 止盈出局)。
  • TITAN.ROLL_PROFIT_FAST / MID / SLOW:期权针对时间与收益率交叉网格的“多维止盈策略”参数(例如:持仓大于 180 天且盈利率达到 10% 自动建议慢速止盈,防止时间价值彻底耗尽)。

四、 部署与运行指令 (Docker Compose)

1. 物理目录与 WAL 持久化规范

在容器编排中,绝对不要单文件挂载 clbot.db,必须挂载其所在的整个父目录../data:/root/clbot/data)。

  • 原因:SQLite 开启 WAL(Write-Ahead Log)模式时,会在同级目录下生成 -wal-shm 临时伴生文件,如果只挂载 db 单文件,伴生文件无法映射回宿主机,会导致容器重启时发生数据截断损坏。

2. 部署启动与构建

cd /root/HermesAgent/clbot/deploy
 
# 停止并移除容器
docker compose down
 
# 重新构建并拉起守护进程
docker compose up -d --build

3. 运维监控常用命令

# 实时追踪策略运行日志
docker logs -f clbot
 
# 查看最后 50 行报错和 Tick 记录
docker logs --tail 50 clbot

4. 容器内测试与网络诊断

当怀疑 VPS 的 DNS 发生故障或连接被阻断时,直接向容器注入测试脚本:

# 1. 复制测试脚本到运行容器内
docker cp ../test_diagnostics.py clbot:/root/clbot/
 
# 2. 在容器内部执行诊断
docker exec -it clbot python test_diagnostics.py

三、 实盘交易硬性“物理熔断”安全策略

为了严格防范 clbot 执行任何买入/卖出下单操作(坚守只读红线),建议在 core/broker.py 模块中执行以下“物理阻断”:

# 核心修改:在 _execute_order_leg( L259 ) 入口处直接熔断
async def _execute_order_leg(self, symbol, side, price, qty, order_type="limit"):
    # 物理防线:硬性拒绝所有的 POST 下单调用
    logger.critical(f"⚠️ [安全警报] 拦截到非授权交易请求: {side} {qty}{symbol}")
    return False, "FORBIDDEN_READONLY_MODE", 0

这能确保即便在上层策略或自动保号(Maintenance)配置被意外激活时,交易网关也能在最底层直接封死交易请求,绝对保障资金安全。

相关链接