项目编号:【181147】
1. 项目概述(Project Overview)
1.1 项目背景
• 市场:美股期权(股票 & 指数期权)。
• 用户:使用 thinkorswim + Unusual Whales 的主动期权交易者。
• 需求:
1 自动跟踪账号持仓标的的期权 OI、Volume、Put/Call Ratio 随时间变化,并成图。
2 实时扫描市场中大额新开仓(premium 大于自定义阈值,如 1,000,000 美元),并在电脑和手机端发出提示。
1.2 项目目标
• 基于 Python 搭建一个长期运行的后台服务:
◦ 日内 & 日线周期性拉取数据。
◦ 对指定标的进行统计与可视化。
◦ 实时监控 Unusual Whales / thinkorswim 流中的新开仓,触发预警。
1.3 时间设定(美国东部时间 ET)
• 每日结算时间点:06:30 ET(视为前一交易日数据 settle 完成)。
• 正常交易时段:09:30–16:00 ET
◦ 期间 Volume 等会实时变化,需要定期或近实时抓取。
2. 系统总体架构(System Architecture)
2.1 逻辑架构
• 数据源层:
◦ thinkorswim / 相关经纪商 API(如 Schwab / TD API)
◦ Unusual Whales 官方 API
• 数据采集层(Ingestion):
◦ 定时任务(06:30 日线采集;09:30–16:00 日内采集)
◦ 实时事件流监听(大额新开仓扫描)
• 数据处理层(Processing):
◦ 数据清洗、字段标准化(跨两个 API 的统一)
◦ 指标计算(OI、Volume、Put/Call Ratio 等)
• 存储层(Storage):
◦ 关系型数据库(SQLite / PostgreSQL)
◦ 可选:时序数据库(如 InfluxDB)
• 可视化 & 报表层(Visualization & Reporting):
◦ 图表生成(matplotlib / plotly)
◦ Web Dashboard(如 Streamlit / Dash)
◦ 每日盘后图表报告
• 预警通知层(Alerting):
◦ 桌面通知 / Web 弹窗
◦ 手机端(邮件、Telegram Bot、微信机器人、Push 服务等)
2.2 模块划分
1 API 接口模块(TOS / UW SDK 封装)
2 数据采集与调度模块
3 数据清洗与计算模块
4 数据存储模块
5 图表生成与前端展示模块
6 实时扫描与预警模块
7 配置管理与日志模块
3. 数据源与接口(Data Sources & APIs)
3.1 thinkorswim / 经纪商 API
• 功能需求:
◦ 获取账号当前持仓(标的、具体期权头寸)。
◦ 获取指定标的的实时 / 分时期权链数据:
▪ 字段示例:underlying, option_symbol, expiry, strike, type, last, bid, ask, volume, open_interest, IV 等。
• 认证方式:OAuth / API Key,Token 刷新策略。
3.2 Unusual Whales API
• 功能需求:
1 历史 / 实时 Option Data(用于持仓标的的 OI、Volume、PCR 跟踪)。
2 实时 Option Flow / Tape(用于扫描新开仓大额订单)。
• 关键字段:
◦ time, symbol, option_symbol, expiry, strike, type, side, size, price, premium, is_opening(或通过 OI 变化判断开仓)、exchange, sweep/block 标记等。
3.3 数据频率和限流
• 需在设计中考虑:
◦ Unusual Whales API 调用频率限制。
◦ 经纪商 / thinkorswim 侧限流和节流机制。
◦ 出错重试 / 指数退避策略。
3.4 时区与时间戳统一
• 内部全部用 UTC 存储,展示与调度使用 ET。
• 所有记录需保存原始时间戳 + 统一转换后的时间戳。
4. 核心功能需求一:持仓标的 OI / Volume / PCR 跟踪与图示
4.1 标的范围
• 基础范围:
◦ 当前账号有期权头寸的所有 underlying(如 SPX、QQQ、NVDA 等)。
• 可选扩展:
◦ 用户维护一个额外 watchlist(不一定持仓),也纳入跟踪。
4.2 时间粒度与调度
4.2.1 日线数据(结算后)
• 调度时间:每天 06:30 ET
• 任务内容:
1 获取前一交易日的最终 OI / Volume 数据(通过 UW / TOS)。
2 针对每个标的进行当日汇总统计并入库。
3 更新日线图表(可覆盖或追加)。
4.2.2 日内数据(实时 / 近实时)
• 时间窗口:交易时段 09:30–16:00 ET
• 调度策略示例:
◦ 每 5 分钟 / 15 分钟采一次 snapshot(可配置)。
• 任务内容:
1 查询持仓标的期权数据(两个 API 的选择策略:主用 UW,TOS 备用或交叉验证)。
2 计算当时刻的 OI、Volume、Put/Call Ratio。
3 将结果作为时间序列写入数据库。
4.3 指标定义
• 对每个 underlying U,在每个采样时刻 t,计算:
◦ Call_OI_Total(U, t)
◦ Put_OI_Total(U, t)
◦ Call_Volume_Total(U, t)
◦ Put_Volume_Total(U, t)
◦ Put/Call OI Ratio = Put_OI_Total / Call_OI_Total
◦ Put/Call Volume Ratio = Put_Volume_Total / Call_Volume_Total(可选)
• 可配置过滤条件:
◦ 仅统计接近当前价格的合约:|strike / underlying_price − 1|