QQQ期权策略零基础部署与运维手册
type
Post
status
Published
date
Mar 9, 2026
slug
clbot
summary
本手册面向完全零基础用户,逐步引导你从零完成 CLBOT 的配置、部署与日常维护。密钥管理统一使用 Bitwarden Secrets Manager (BWS),不在任何文件中明文存储敏感信息。
tags
期权策略
category
技术分享
icon
password
创建时间
Mar 8, 2026 11:02 PM
零基础部署与运维手册
本手册面向完全零基础用户,逐步引导你从零完成 CLBOT 的配置、部署与日常维护。密钥管理统一使用 Bitwarden Secrets Manager (BWS),不在任何文件中明文存储敏感信息。
目录
1. 系统架构概览
各模块职责简述:
config.py:统一读取所有环境变量和配置参数
market.py:通过 Tradier API 和 yfinance 获取实时行情、期权报价、VIX、CNN 恐贪指数等
strategies.py:执行 Titan 核心策略,包含建仓信号检测、持仓风控(止损/追踪止盈/Delta移仓)
analyst.py:调用 OpenRouter LLM + Tavily 新闻搜索,生成 AI 研判报告
reporter.py:每日定时推送估值监测日报
notifier.py:Telegram 消息推送、PushPlus 微信推送、TG 指令监听(/p /buy /sell)
database.py:Notion 数据库读写,管理持仓记录和运行状态
2. 前置准备:账号与工具注册
按以下顺序注册所需服务,全部免费层即可启动。
2.1 必须注册的服务
服务 | 用途 | 注册地址 |
Bitwarden | 密钥安全管理(核心) | https://bitwarden.com |
Telegram | 接收交易信号推送 | https://telegram.org |
Notion | 持仓数据库 | https://notion.so |
Tradier | 股票/期权行情与交易 | https://tradier.com |
OpenRouter | LLM API 网关(AI研判) | https://openrouter.ai |
2.2 可选服务
服务 | 用途 | 注册地址 |
Tavily | AI 新闻搜索增强 | https://tavily.com |
PushPlus | 微信消息推送 | https://www.pushplus.plus |
Healthchecks.io | 服务存活监控 | https://healthchecks.io |
2.3 获取各服务的 Token/Key
Telegram Bot Token 和 Chat ID
- 在 Telegram 搜索
@BotFather,发送/newbot,按提示创建机器人,复制 Bot Token(格式:123456:ABC-DEF...)
- 向你的机器人发送任意消息,然后访问:
- 在返回的 JSON 中找到
"chat":{"id": XXXXXXX},这就是你的 Chat ID
Notion Token 和数据库 ID
- 访问 https://www.notion.so/my-integrations,点击「New integration」
- 名称填
CLBOT,权限选「Read content」+「Update content」+「Insert content」,复制 Internal Integration Token
- 数据库 ID 见第 7 章说明
Tradier Token 和 Account ID
- 登录 https://tradier.com/user/applications,创建 Application,获取 Access Token
- 访问 https://tradier.com/user/account,复制 Account Number(即 Account ID)
- 如使用 Paper Trading(模拟盘),将
TRADIER_PAPER设为true
OpenRouter API Key
- 登录 https://openrouter.ai/keys,点击「Create Key」
- 复制生成的 API Key(格式:
sk-or-v1-...)
3. Bitwarden Secrets Manager 配置
BWS 是 Bitwarden 提供的专为程序密钥设计的保险库,比直接写
.env 文件安全得多。3.1 开通 Secrets Manager
- 登录 https://vault.bitwarden.com
- 左侧菜单点击「Secrets Manager」→「Get Started」(免费层支持 100 个 Secret)
- 创建一个 Project,命名为
CLBOT
3.2 创建所有 Secrets
在 BWS 控制台,进入你的
CLBOT Project,逐条点击「New Secret」,按下表填写:Secret 名称(Key) | 填入的值 | 说明 |
TRADIER_TOKEN | 你的 Tradier Access Token | 交易与行情 |
TRADIER_ACCOUNT_ID | 你的 Tradier Account Number | 账户ID |
TRADIER_PAPER | false | 模拟盘填 true |
NOTION_TOKEN | 你的 Notion Integration Token | 数据库访问 |
NOTION_DB | 你的 Notion 数据库 ID | 见第7章 |
TG_TOKEN | 你的 Telegram Bot Token | 推送通知 |
TG_CHAT_ID | 你的 Telegram Chat ID | 接收消息的账号 |
LLM_API_KEY | 你的 OpenRouter API Key | AI研判 |
LLM_MODEL | openai/gpt-4o | 推荐模型,可按需改 |
TAVILY_API_KEY | 你的 Tavily Key(可选) | 新闻搜索增强 |
PUSHPLUS_TOKEN | 你的 PushPlus Token(可选) | 微信推送 |
HEALTHCHECK_URL | 你的 Healthchecks.io URL(可选) | 存活心跳 |
TIMEZONE | America/New_York | 交易时区,一般不改 |
REPORT_TIME | 07:30 | 日报推送时间(ET) |
3.3 生成机器访问令牌(Machine Account Token)
- 在 BWS 控制台左侧点击「Machine Accounts」
- 点击「New Machine Account」,命名为
clbot-server
- 点击进入该账号,切换到「Access Tokens」标签
- 点击「Generate Token」,立即复制保存(只显示一次!)
- 格式为:
0.xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - 这个 Token 命名为
BWS_ACCESS_TOKEN,后续部署时用
- 回到「Projects」,将
CLBOT项目分配给clbot-server(授予 Read 权限)
4. 服务器环境搭建
推荐使用 Ubuntu 22.04 LTS 的 VPS(2核2G 内存即可),国内可用阿里云、腾讯云,国外推荐 Vultr、DigitalOcean。
4.1 系统初始化
SSH 登录服务器后,依次执行:
4.2 安装 BWS CLI
Bitwarden 提供官方一键安装脚本,自动识别系统架构并完成安装,推荐优先使用此方式:
脚本会自动完成以下步骤:检测系统架构 → 下载对应二进制 → 安装至系统路径。
安装完成后验证:
脚本说明: --f:服务器返回错误时静默失败(不输出 HTML 错误页) --s:静默模式,不显示下载进度条 --S:即使-s静默,遇到错误仍显示错误信息 --L:自动跟随重定向网络受限时的备用方案(手动下载):
4.3 配置 BWS 访问凭证
Project UUID 获取方式:在 BWS 控制台进入CLBOT项目,URL 末尾的长串字符串就是 Project UUID。
4.4 创建项目目录和 Python 虚拟环境
5. 项目文件部署
5.1 上传代码文件
将以下 8 个文件上传至
/opt/clbot/ 目录:上传方式(任选其一):
方式 A:使用 scp 从本地上传
方式 B:在服务器直接 git clone(如果你的代码在 GitHub)
5.2 安装 Python 依赖
提示:如果网络较慢,可以加上清华源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
5.3 创建 BWS 注入脚本
在
/opt/clbot/ 下创建启动脚本 start.sh:粘贴以下内容(将
BWS_PROJECT_ID 替换为你的实际 Project UUID):6. BWS 注入环境变量并启动
6.1 设置 BWS_ACCESS_TOKEN 为系统持久环境变量
在文件末尾添加一行:
保存后重新加载:
6.2 首次手动测试启动
观察输出,确认所有 Secrets 都显示「✅ 已加载」,且最后出现:
按
Ctrl+C 停止,准备配置为后台服务。6.3 配置 systemd 后台常驻服务
粘贴以下内容:
7. Notion 数据库配置
7.1 创建持仓数据库
- 在 Notion 中新建一个页面,点击「/」搜索「Database - Full page」
- 数据库名称建议填
CLBOT持仓管理
- 按下表添加所有必须的字段(属性):
属性名称 | 类型 | 说明 |
Ticker | Title(标题,默认存在) | 股票/期权代码 |
EntryPrice | Number | 股票买入价 |
Quantity | Number | 数量(股数或合约数) |
Strategy | Select | 选项: Titan、Manual |
Status | Select | 选项: Active、Closed |
EntryDate | Date | 建仓日期 |
ExitPrice | Number | 平仓价格 |
ExitDate | Date | 平仓日期 |
HighestPnL | Number | 历史最高盈亏率(系统自动更新) |
Strike | Number | 期权行权价(股票可留空) |
Expiration | Date | 期权到期日(股票可留空) |
EntryPremium | Number | 期权买入权利金 |
EntryDelta | Number | 期权买入时 Delta |
ContractSymbol | Text(Rich Text) | OCC 标准合约代码 |
OptionType | Select | 选项: call、put |
7.2 获取数据库 ID
- 在浏览器中打开你创建的数据库页面
- 复制地址栏 URL,格式如下:
- URL 中
notion.so/用户名/后面、?v=前面的 32 位字符串就是 数据库 ID
- 将其格式化为:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(每8位加一个 )
7.3 为 Integration 授权访问数据库
- 打开数据库页面,点击右上角「···」菜单
- 选择「Add connections」,搜索并添加你在第 2 章创建的
CLBOTIntegration
- 点击「Confirm」确认授权
8. 验证系统运行状态
8.1 查看实时日志
8.2 查看日志文件
8.3 确认运行正常的标志
服务启动后,你应该在 Telegram 收到一条消息:
日志中应出现类似以下内容,无
ERROR 或 CRITICAL 字样:8.4 测试 Telegram 指令
在 Telegram 向你的机器人发送:
机器人应回复:
9. 日常运维操作
9.1 服务管理常用命令
9.2 更新代码
9.3 修改配置(通过 BWS)
- 登录 https://vault.bitwarden.com → Secrets Manager
- 找到对应的 Secret,点击编辑,修改 Value
- 回到服务器,重启服务即可生效:
注意:永远不要直接在服务器上的文件中写入 API Key!所有密钥变更都通过 BWS 控制台操作。
9.4 手动录入持仓(Telegram 指令)
买入/录入持仓:
查看当前持仓:
平仓(使用实时市价):
平仓(使用指定价格):
9.5 查看每日日报
系统在每个交易日的
REPORT_TIME(默认 07:30 ET)自动通过 PushPlus 推送日报,内容包含:
- QQQ 当前 PE 与估值状态
- VIX 恐慌指数与阶段
- CNN 贪婪/恐惧指数
- MA50 / MA200 技术均线
- 距 52 周高点回撤9.6 保号任务管理
保号任务用于防止 Tradier 账户因长期不交易被收取闲置费。
通过 BWS 修改保号配置:
Secret Key | 示例值 | 说明 |
MAINTENANCE_ACTIVE | true | 是否启用(true/false) |
MAINTENANCE_TRADING_DAYS | 1,15 | 每月第几个交易日执行,逗号分隔 |
MAINTENANCE_SYMBOL | NOK | 保号用的低价股代码 |
MAINTENANCE_QTY | 1 | 买卖股数 |
修改后重启服务生效。
10. 常见报错与解决方案
问题 1:启动后 Telegram 收不到消息
检查步骤:
常见原因:
-
TG_TOKEN 填写有误:检查 BWS 中的值,确保没有多余空格
- TG_CHAT_ID 填写有误:注意 Chat ID 可能是负数(群组 ID),个人 ID 是正整数
- 服务器无法访问 Telegram API(中国大陆 VPS 需要代理)解决办法:
问题 2:Notion 持仓读取失败
日志表现:
Notion Query Error 或 Notion Init Error检查步骤:
1. 确认
NOTION_TOKEN 和 NOTION_DB 均已正确填入 BWS
2. 确认数据库已授权给 Integration(见第 7.3 节)
3. 确认数据库 ID 格式正确(32 位字符,可带或不带 - 连字符)问题 3:行情数据获取失败
日志表现:
YF fallback error 或 Tradier quote error检查步骤:
常见原因:
- Tradier Token 未配置或已过期,系统会自动回退到 yfinance
- yfinance 被 Yahoo Finance 限速(通常几分钟后自动恢复)
问题 4:AI 研判不工作
日志表现:
LLM 分析异常 或 AI 未启用检查步骤:
1. 确认
LLM_API_KEY 在 BWS 中已设置
2. 确认 OpenRouter 账户有余额(LLM 调用是收费的)
3. 检查 LLM_MODEL 名称是否正确,格式为 供应商/模型名,如 openai/gpt-4o问题 5:BWS Secrets 加载失败
日志表现: 启动脚本显示多个
⚠️ 未找到检查步骤:
常见原因:
-
BWS_ACCESS_TOKEN 没有持久化到 /etc/environment
- Machine Account 没有被授权访问 CLBOT Project问题 6:服务频繁崩溃重启
检查步骤:
常见原因:
- 网络不稳定导致 API 请求频繁失败,触发
MAX_CONSECUTIVE_ERRORS
- 可通过 BWS 调大 ERROR_PAUSE_SECONDS(默认 300 秒)11. 完整环境变量速查表
以下所有变量均应存储在 BWS 中,通过启动脚本注入。
必填项
变量名 | 示例值 | 说明 |
TRADIER_TOKEN | abcd1234efgh5678 | Tradier API Token |
TRADIER_ACCOUNT_ID | 123456789 | Tradier 账户号 |
NOTION_TOKEN | secret_xxxx... | Notion Integration Token |
NOTION_DB | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Notion 数据库 ID |
TG_TOKEN | 123456:ABC-DEF... | Telegram Bot Token |
TG_CHAT_ID | 987654321 | Telegram 接收账号 ID |
选填项(功能增强)
变量名 | 默认值 | 说明 |
TRADIER_PAPER | false | 模拟盘模式(true=沙盒) |
LLM_API_KEY | (空) | OpenRouter Key,为空则不启用 AI |
LLM_BASE_URL | https://openrouter.ai/api/v1 | LLM 接口地址 |
LLM_MODEL | openai/gpt-4o | 使用的模型 |
TAVILY_API_KEY | (空) | 新闻搜索 Key,为空则跳过新闻 |
PUSHPLUS_TOKEN | (空) | PushPlus Token,为空则不推送微信 |
PUSHPLUS_TOPIC | (空) | PushPlus 群组 Topic(可选) |
HEALTHCHECK_URL | (空) | Healthchecks.io 心跳 URL |
运行参数(高级调优)
变量名 | 默认值 | 说明 |
TIMEZONE | America/New_York | 时区设置 |
REPORT_TIME | 07:30 | 日报推送时间(ET 24小时制) |
CHECK_INTERVAL | 60 | 主循环间隔(秒,最小10) |
HEARTBEAT_INTERVAL | 3600 | 心跳间隔(秒,最小60) |
MAX_CONSECUTIVE_ERRORS | 10 | 最大连续错误次数后暂停 |
ERROR_PAUSE_SECONDS | 300 | 触发错误暂停后的等待时间(秒) |
FORCE_IPV4 | true | 强制 IPv4(纯 IPv6 机器设 false) |
MAINTENANCE_ACTIVE | false | 是否启用自动保号任务 |
MAINTENANCE_TRADING_DAYS | 1,15 | 每月第几个交易日执行保号 |
MAINTENANCE_SYMBOL | NOK | 保号股票代码 |
MAINTENANCE_QTY | 1 | 保号买卖数量(股) |
附录:快速部署命令汇总
手册版本:v5.2.1 | 最后更新:2026-03
Loading...