个人美股量化分析平台,专注日线级别数据采集、技术分析、信号生成与回测验证。
yfinance ──→ collectors ──→ DuckDB ──→ analyzers ──→ signals ──→ dashboard
│ │ │ tui (Textual)
hermes cron indicators atomic signals 终端面板
定时触发 + 结构分析(缠论) + 策略/事件
+ market regime + 多周期偏置(P0)
+ Alpha101因子 + 自适应权重(P1)
↓
backtest / tracker
回测验证 + 绩效追踪
- 日线行情 — OHLCV + 分红拆股,yfinance,盘后自动拉取
- 期权链 — 到期日、行权价、IV、Greeks,跟踪最近 3 个到期日
- 基本面 — PE、市值、EPS、利润率等,季度更新
- 调度 — 通过 hermes cron 定时触发(盘后采集 + 盘前分析)
- 经典指标 — RSI、MACD、布林带、SMA/EMA、ATR(手写实现,无 pandas-ta 依赖)
- 结构分析(缠论) — K 线包含处理 → 分型识别 → 笔连接 → 中枢识别 → 市场状态分类
- 市场状态 — bullish_trend / bearish_trend / range_bound / transitional / high_volatility
- 多周期分析 (P0) — 日线聚合为周线,周线趋势作为偏置过滤(只做多/只做空/无限制)
- Alpha 101 因子 — 25 个 WorldQuant alpha 因子的时序版本
- 原子信号 — 每个信号独立计算(RSI超卖/超买、MACD金叉/死叉、布林带突破、均线趋势、成交量异常、波动率、ATR突破)
- 策略组合 —
Strategy(线性加权)+ Event(AND/OR/NOT 逻辑组合)+ EventStrategy(多事件策略)
- 方向仲裁 — 多空信号冲突时按多数+置信度决胜
- 自适应权重 (P1) — 根据原子信号历史胜率动态调整置信度,低胜率自动淘汰
- 信号跟踪 — 每个信号发出后跟踪其后 1/3/5/10 日表现
- 信号回测 — 对历史信号计算胜率、平均收益、夏普率、最大回撤
- 成本感知回测 —
TradeSimulator 模拟真实交易(手续费 0.1%、滑点 0.05%)
- 权重优化 — 随机搜索寻找最优指标权重组合
- 基于技术指标的 XGBoost 价格方向预测(feature: RSI, MACD, BB, SMA, ATR 等)
- 单标的独立训练,自动评估
- Streamlit 面板 — K 线图、信号面板、市场状态、回测结果、权重分析
- Textual TUI — 终端交互面板,支持概览/信号/跟踪/数据 4 个标签页
# 安装依赖
pip install -r requirements.txt
# 初始化数据库
python scripts/collect.py --init-db
# 采集数据(手动测试)
python scripts/collect.py --symbols AAPL,MSFT,GOOGL
# 运行分析管线
python scripts/analyze.py
# 启动 Streamlit 面板
streamlit run dashboard/app.py
# 启动终端面板
python tui/app.py
# 用 hermes cron 定时采集(每天盘后)
hermes cron add "30 0 * * 2-6" "cd ~/quant && python scripts/collect.py"
quant/
├── config.py # 全局配置(Collect/Indicator/Signal/Storage/MultiTF/Adaptive/Dashboard)
├── core/models.py # 数据模型:Bar, SignalAtom, SignalResult
│
├── collectors/
│ └── stocks.py # yfinance 采集:行情+期权+基本面
│
├── storage/
│ ├── engine.py # DuckDB 引擎封装(单文件零配置)
│ └── schema.py # 7 张表结构定义
│
├── analyzers/
│ ├── indicators.py # 技术指标计算(手写 RSI/MACD/BB/SMA/ATR)
│ ├── regime.py # 市场状态识别(委托 structure.py)
│ ├── structure.py # 缠论结构分析:分型→笔→中枢→状态
│ ├── signals.py # 原子信号系统 + 自适应权重(P1) + 策略/事件组合
│ ├── multitimeframe.py # 多周期分析(P0):周线趋势偏置
│ ├── alpha101.py # WorldQuant Alpha 101 因子(25 个时序版)
│ ├── backtest.py # 回测引擎 + 成本感知 TradeSimulator
│ └── tracker.py # 信号绩效跟踪
│
├── models/
│ └── predictor.py # XGBoost ML 预测模型
│
├── dashboard/
│ └── app.py # Streamlit 可视化面板
│
├── tui/
│ └── app.py # Textual 终端交互面板
│
├── scripts/
│ ├── collect.py # 数据采集入口
│ ├── analyze.py # 分析管线入口
│ └── report.py # 信号摘要报告
│
└── requirements.txt
| 信号 |
类型 |
说明 |
rsi_oversold |
反转 |
RSI < 30 → 看多 |
rsi_overbought |
反转 |
RSI > 70 → 看空 |
macd_golden_cross |
趋势 |
MACD 上穿信号线 → 看多 |
macd_death_cross |
趋势 |
MACD 下穿信号线 → 看空 |
bb_touch_lower |
反转 |
收盘跌破下轨 2% → 看多 |
bb_touch_upper |
反转 |
收盘突破上轨 2% → 看空 |
sma_trend_up/down |
趋势 |
SMA20/SMA50 排列方向 |
volume_spike |
确认 |
成交量 > 2.5 倍均值 |
high_volatility |
风险 |
ATR/Close > 6% → 警示 |
atr_breakout |
趋势 |
突破 SMA20 ± 2.5×ATR |
P0: 多周期偏置 ─── 周线趋势决定做多/做空/双向
↓
P1: 自适应权重 ─── 原子历史胜率调置信度(淘汰 <= 35%)
↓
P2: 方向仲裁 ──── 多空冲突按多数+置信度决胜
运行 python -m analyzers.backtest 或通过面板查看:
- 胜率 — 信号发出后 N 日方向正确率
- 夏普率 — 风险调整后收益(年化)
- 置信度分桶 — 高置信度信号是否确实表现更好
- 按标的分解 — 哪些股票信号系统表现最佳
| 数据 |
来源 |
更新频率 |
说明 |
| 日线行情 |
yfinance |
日 |
免费,无需 API Key |
| 期权链 |
yfinance |
日 |
OI、Volume、IV、Greeks |
| 基本面 |
yfinance |
季度 |
PE、市值、股息率 |
# 盘后采集数据(美东时间周一至周五 20:30)
hermes cron add "30 0 * * 2-6" "cd ~/quant && python scripts/collect.py"
# 盘前运行分析(美东时间 7:00)
hermes cron add "0 11 * * 1-5" "cd ~/quant && python scripts/analyze.py"
# 查看定时任务
hermes cron list
# 删除任务
hermes cron remove <job-id>
| 组件 |
选型 |
理由 |
| 存储 |
DuckDB |
列存引擎,零运维,单文件,分析查询极快 |
| 采集 |
yfinance |
免费,覆盖美股+期权+基本面 |
| 指标 |
手写 |
零依赖,兼容 Py3.14 |
| 信号 |
原子化(czsc 风格) |
灵活组合,可扩展,支持自适应权重 |
| ML |
XGBoost |
表格数据王者,速度快,可解释 |
| 面板 |
Streamlit |
快速出图,交互式探索 |
| TUI |
Textual |
终端内浏览,无需浏览器 |
| 调度 |
hermes cron |
无需额外依赖,原生支持 |
- 单向数据流 — 采集→存储→分析→信号→展示,每阶段独立运行
- 配置驱动 — 所有参数集中在
config.py,代码不硬编码
- 输入/输出标准化 — DataFrame/字典,方便测试和回测
- 渐进式复杂度 — 从 yfinance + DuckDB 起步,核心接口不变即可替换