Skip to content

Repository files navigation

StockLens

AI 驱动的多市场股票分析系统 · A 股 / 港股 / 美股全覆盖

10 个数据源容错抓取 → 18 个量化模型评分 → LLM 生成决策报告 → 10 种渠道推送

Python FastAPI LiteLLM License Code Style


这是什么

StockLens 是一个 AI 驱动的股票分析系统,覆盖 A 股 / 港股 / 美股,端到端自动化完成「数据抓取 → 量化评分 → LLM 解读 → 多渠道推送 → 事后回测」全链路。

一句话定位:把"机构级量化研究"压缩成"个人也能跑"的开源系统

它解决什么痛点

痛点 StockLens 做法
数据源单一,A/港/美 要装一堆 SDK 10 个数据源统一 API 接入,按优先级 failover + 熔断
量化指标散落在各种 Excel / 脚本 18 个学术模型固化成代码,结果可复现、可回测
AI 直接给买卖建议容易"胡说" 评分由 Python 确定性计算,LLM 只负责"解读"已算好的分数
多平台推送要写 10 套代码 1 个 Notifier 接口,10 个渠道并行扇出
历史决策没法事后复盘 每次分析自动入库,T+N 自动回测打分

核心特性

  • 🌏 三市场全覆盖 — A 股 / 港股 / 美股行情、基本面、筹码、宏观统一接入
  • 🧮 18 模型量化评分引擎 — Piotroski / Altman Z / Ohlson O / Rule of 40 / Magic Formula / Beneish M / DuPont / SCTR …,综合评分 0–100,确定性计算、LLM 不可篡改
  • 🤖 多 Agent 协作决策single(ReAct)/ multi(编排器协调 技术 / 情报 / 风控 / 策略 / 决策 5 个 Agent),风控 Agent 可一票否决
  • 📰 多源情报搜索 — 7 个搜索引擎 Provider 聚合新闻 / 机构观点 / 风险排查,3 维度并行
  • 📊 11 套自然语言策略 — 均线金叉、放量突破、缠论、波浪、龙头、情绪周期…(YAML 可自定义)
  • 🔌 10 渠道推送 — 微信企业 / 飞书 / Telegram / Email / Discord / Pushover / PushPlus / ServerChan3 / AstrBot / 自定义 Webhook
  • 🖥️ Web UI 行情热力图 — Jinja2 + 原生 JS,零打包步骤,开箱即用
  • 流水线并行编排 — 数据增强与 LLM 调用拆为双线程池,add_done_callback 消除空闲等待
  • 🗄️ SQLite 全速优化 — WAL / mmap 256MB / 64MB 页缓存 / 批量 upsert,单机即跑

系统架构

┌─────────────────────────────────────────────────────────────┐
│                      接入层 (Access)                         │
│   Web UI (热力图) · REST API (FastAPI) · Bot (钉钉/飞书)      │
├─────────────────────────────────────────────────────────────┤
│                     业务编排层 (stocklens)                    │
│  ┌─────────────────────────────────────────────────────┐    │
│  │   StockAnalysisPipeline (核心调度流水线)              │    │
│  │   共享预取 → 数据采集 → enrich+LLM 并行 → 推送 → 回测  │    │
│  └─────────────────────────────────────────────────────┘    │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────────────┐    │
│  │ Agent 编排│ │ LLM 分析器│ │ 评分引擎 (18 模型, 0-100) │    │
│  │ 5 Agent  │ │ Prompt 构建│ │ Piotroski/Altman/...     │    │
│  └──────────┘ └──────────┘ └──────────────────────────┘    │
├──────────────┬──────────────┬──────────────┬────────────────┤
│  quantcore   │  tickbridge  │   querybus   │    pulsefan    │
│  (纯算法)     │  (数据源)     │   (搜索)     │    (推送)       │
│  18 评分模型  │  10 Fetcher  │  7 Provider  │  10 渠道扇出    │
│  零 IO 零依赖 │  failover+熔断│  2 级缓存    │  单一 Notifier  │
├──────────────┴──────────────┴──────────────┴────────────────┤
│        4 个核心包互不引用 (单向依赖 stocklens) · kvcache 缓存  │
├─────────────────────────────────────────────────────────────┤
│   SQLite + SQLAlchemy ORM · WAL/mmap · 9 Repository         │
└─────────────────────────────────────────────────────────────┘

五个独立可发布的核心包(quantcore / tickbridge / querybus / pulsefan / kvcache)各自零回边依赖,可单独抽离复用。


分析流水线

触发 → Phase 1 共享预取(指数/宏观/新闻)
     → Phase 2 数据采集(10 Fetcher failover → SQLite upsert)
     → Phase 3 enrich + LLM 双线程池并行
        ├─ enrich: 实时行情 / 筹码 / 基本面 / 趋势指标 / 情报搜索 / 18 模型评分
        └─ LLM:   PromptBuilder → LiteLLM Router → JSON 解析 → 入库
     → Phase 4 汇总报告 → 10 渠道并行推送
     → Phase 5 自动回测(T+N 事后评估, 可选)

量化评分引擎(18 模型)

评分由 Python 确定性计算,LLM 不可修改,只负责解读。综合评分满分 100:

维度 权重 模型
宏观 + 市场状态 25 宏观周期 / 市场状态
基本面 20 Piotroski F-Score / Altman Z / Ohlson O / Beneish M / 盈余质量 / DuPont
估值 20 PEG / Rule of 40 / Magic Formula / 派息安全
技术 + 动量 15 SCTR / 动量 / 盈利惊喜
困境反转 10 Ohlson O / 困境指标
情绪 10 机构持股 / 期权情绪 / 做空 / 社交情绪

技术栈

选型
语言 Python 3.9+
Web FastAPI + Uvicorn(uvloop 加速)
数据库 SQLite + SQLAlchemy ORM(WAL / mmap / 64MB cache)
缓存 进程内 TTL(L1)+ SQLite 持久化(L2,thread-local)
LLM 路由 LiteLLM Router(OpenAI / Anthropic / Gemini / DeepSeek 多通道 + fallback)
高性能 orjson · msgspec · polars · zstandard · rapidfuzz
可靠性 tenacity 重试 · pybreaker 熔断 · slowapi 限流
测试 pytest(246+ 用例)· ruff · pre-commit
前端 Jinja2 模板 + 原生 JS(无 SPA,零打包)
部署 python main.py 一键启动 · Docker Compose

快速开始

1. 准备配置

git clone https://github.com/W-M-R/StockLens.git
cd StockLens
cp .env.example .env

编辑 .env至少填两项:

# 自选股(A 股 / 港股 / 美股混填)
STOCK_LIST=AAPL,NVDA,600519,hk00700

# 任选一种 LLM
LLM_CHANNELS=deepseek
LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com
LLM_DEEPSEEK_API_KEY=sk-xxx
LLM_DEEPSEEK_MODELS=deepseek-chat
LITELLM_MODEL=openai/deepseek-chat

2a. 本地运行(推荐快速体验)

pip install -e ".[all]"          # 安装依赖(含数据源/搜索/bot/extras/dev)
python main.py                   # 启动 Web 服务
# 浏览器打开 http://localhost:8000  (API 文档 /docs)

2b. Docker Compose(推荐生产部署)

docker compose up -d --build
docker compose logs -f stocklens

Compose 启动两个服务:tickbridge(行情数据守护进程,唯一写库)+ stocklens(API + 热力图 UI,经 HTTP 读数据)。


配置速览

StockLens 通过 .env 配置一切(详见 .env.example)。最常用的几类:

类别 关键变量 说明
自选股 STOCK_LIST 逗号分隔,支持 A/港/美
LLM LLM_CHANNELS / LITELLM_MODEL 多通道 + 主/备模型
数据源优先级 YFINANCE_PRIORITY 数字越小优先级越高
数据源 Token TUSHARE_TOKEN / TWELVEDATA_API_KEY 按需开启
搜索引擎 TAVILY_API_KEYS / BRAVE_API_KEYS 任选配置
推送渠道 WECHAT_WEBHOOK_URL / TELEGRAM_BOT_TOKEN 按需开启
Agent 模式 AGENT_MODE / AGENT_ARCH single(ReAct) / multi(编排器)
报告 REPORT_TYPE / REPORT_SUMMARY_ONLY simple / full / brief
Web 认证 ADMIN_AUTH_ENABLED / ADMIN_PASSWORD 可选

项目结构

StockLens/
├── main.py                # Web 服务入口 (FastAPI + 可选 Bot Stream)
├── api/                   # REST API 层 (FastAPI 路由 / 中间件 / 认证)
├── bot/                   # Bot 适配层 (钉钉 / 飞书 Stream)
├── stocklens/             # 业务编排层
│   ├── pipeline/          #   核心分析流水线
│   ├── agent/             #   多 Agent 编排 + 工具
│   ├── analyzer/          #   LLM 分析器 + Prompt 构建
│   ├── services/          #   评分/任务队列/配置/历史等服务
│   ├── search/            #   股票情报搜索服务
│   ├── notification/      #   报告编排 + 推送适配
│   ├── portfolio/         #   组合管理
│   ├── backtest/          #   事后回测
│   ├── storage/           #   SQLite ORM + Repository
│   ├── contracts/         #   跨层共享数据类
│   └── config/            #   配置 + 环境校验
├── strategies/            # 11 套自然语言策略 (YAML, 可自定义)
├── templates/             # 报告 Jinja2 模板
├── web/                   # 热力图 Web UI (Jinja2 + 原生 JS)
├── alembic/               # 数据库迁移
├── tests/                 # pytest 测试
├── docs/                  # 架构 / 数据流 / 模块文档 / ADR
├── docker-compose.yml
└── pyproject.toml

文档

完整文档位于 docs/,按任务查阅,无需扫描源码:


开发

pip install -e ".[all]"
pre-commit install           # 安装 git hooks (ruff + 文件大小守卫)

pytest tests/ -q             # 全量测试
pytest tests/ --cov --cov-report=term-missing   # 覆盖率
python scripts/check_file_size.py               # 文件大小检查

工程纪律(CI 强制):

  • 所有源码注释 / docstring / 日志 / 字符串字面量必须英文(开源面向全球)
  • 改代码必须同提交更新对应文档(Code → Doc 同步)
  • ORM 变更必须同提交 Alembic 迁移
  • 单文件硬上限 1500 行,新增模块 >800 行需说明
  • 每个 commit 以 Changelog: <摘要> 结尾

详见 CLAUDE.md


路线图

  • 更多数据源接入(Finnhub / Polygon / Tiingo)
  • 策略回测自动加权 (AGENT_STRATEGY_AUTOWEIGHT)
  • 事件驱动实时告警 (AGENT_EVENT_MONITOR_ENABLED)
  • 更多 K 线形态识别
  • 组合层面风险归因

License

MIT © 2024-2026 W-M-R


⭐ 觉得有用就点个 Star 吧 · PR / Issue 欢迎贡献

About

StockLens 是一个 AI 驱动的股票分析系统,覆盖 A 股 / 港股 / 美股,端到端自动化完成「数据抓取 → 量化评分 → LLM 解读 → 多渠道推送 → 事后回测」全链路。

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages