main.py --stocks AAPL --ai --force-run
│
├─ 1. 初始化
│ ├─ Config 单例加载 .env(stocklens/config/settings.py)
│ ├─ DatabaseManager 初始化 SQLite + 注册 PRAGMA(WAL/mmap/cache=64MB)(stocklens/storage/engine.py)
│ ├─ DataFetcherManager 初始化 10 个 Fetcher(tickbridge/core/manager.py)
│ ├─ LiteLLM Router 初始化(stocklens/analyzer/llm_analyzer.py)
│ ├─ SearchService 初始化搜索引擎(stocklens/search/search_service.py)
│ └─ NotificationDispatcher 初始化推送渠道(stocklens/notification/dispatcher.py)
│
├─ Phase 1. 共享数据预取(线程池: PREFETCH,默认 4)
│ ├─ US Market Env → 四大指数快照(道琼斯/纳斯达克/标普500/纳指100)
│ ├─ US Macro Snapshot → 12 个宏观指标(利率/CPI/失业率/VIX/国债等)
│ ├─ Market News → 大盘新闻预取
│ └─ 金十数据快讯(Jin10)— 后续按股票关键字过滤
│
├─ Phase 2. 数据预采集(线程池: DATA_FETCH,默认 cpu_count)
│ ├─ DataCollector.fetch_and_save_stock_data()
│ │ ├─ DataFetcherManager.fetch_daily() → 按 {SOURCE}_PRIORITY 顺序尝试 10 Fetcher
│ │ │ ├─ YfinanceFetcher (P0) → fail 则下一个
│ │ │ ├─ XueqiuFetcher (P1)
│ │ │ ├─ ... 直到成功
│ │ │ └─ 返回标准化 DataFrame
│ │ ├─ StockRepo.save_dataframe() — SQLite ON CONFLICT 批量 upsert
│ │ └─ StockRepo.save_weekly_data() — 同样批量 upsert
│ └─ 结果: 每只股票的日线/周线数据已入库
│
├─ Phase 3. 数据增强 + LLM 流水线(两个线程池并行运行)
│ │
│ │ enrich 池 (PIPELINE) LLM 池 (PIPELINE)
│ │ ├─ stock_1 ├─ ←── enrich_done(stock_1)
│ │ ├─ stock_2 ├─ ←── enrich_done(stock_2)
│ │ ... ...
│ │
│ ├─ enrich 阶段(_prepare_stock_context)
│ │ ├─ 实时行情(RealtimeManager → tencent/sina/efinance/em)
│ │ ├─ 筹码分布(A 股专属,US/HK 跳过)
│ │ ├─ 基本面聚合(FundamentalManager)
│ │ ├─ stock_indicators.compute_trend_and_indicators()
│ │ │ ├─ 趋势分析(TrendAnalyzer → MA50/MA200/RSI/MACD/BB Squeeze)
│ │ │ ├─ 周线/月线 OHLC(来自 DB 或重采样)
│ │ │ └─ 多周期技术指标 + 斐波那契回撤
│ │ ├─ 情报搜索(SearchService.search_comprehensive_intel,3 个维度并行)
│ │ │ ├─ 最新消息 / 机构分析 / 风险排查
│ │ │ ├─ 新闻时间窗过滤 + 去重
│ │ │ └─ 写入 news_intel 表
│ │ ├─ Finviz(前瞻数据 / 同行对比 / 英文新闻,仅美股)
│ │ ├─ 社交情绪(仅美股)
│ │ ├─ enrich_us_hk_context(US/HK 补充:宏观/PE/板块 ETF,并行池 US_ENRICH)
│ │ ├─ ScoringService.evaluate() — 18 模型量化评分
│ │ │ ├─ Piotroski / Altman Z / Ohlson O
│ │ │ ├─ Rule of 40 / PEG / Magic Formula
│ │ │ ├─ Beneish M / DuPont / 盈余质量
│ │ │ ├─ 派息安全 / 机构持股 / 期权情绪 / 做空 / 动量 / 盈利惊喜
│ │ │ ├─ SCTR / 风险指标 / 宏观+市场状态
│ │ │ └─ 综合评分 0-100(确定性 Python 计算)
│ │ ├─ 元数据报告 → reports/{date}/{code}/{...}-元数据.md
│ │ └─ 通过 add_done_callback 立即提交 LLM 池
│ │
│ └─ LLM 阶段(_run_stock_llm)
│ ├─ PromptBuilder.build() — 组装 system + user prompt
│ │ ├─ 技术面数据 / 基本面数据 / 宏观环境
│ │ ├─ 新闻情报 / 量化评分总览表
│ │ └─ 决策仪表盘 schema
│ ├─ LiteLLM Router.completion() — 调用 LLM
│ ├─ ResponseParser.parse() — JSON 提取 + 修复
│ ├─ AnalysisResult 字段填充(chip / 价格位置)
│ ├─ analysis_repo.save() — 写入 analysis_results 表
│ └─ 单股推送(SINGLE_STOCK_NOTIFY=true 时)
│
├─ 4. 汇总 & 推送
│ ├─ ReportBuilder.generate_dashboard_report() — 日报汇总
│ ├─ Dispatcher.send() → 10 种渠道并行推送
│ │ ├─ wechat / feishu / telegram / email / discord
│ │ ├─ pushover / pushplus / serverchan3 / astrbot
│ │ └─ custom_webhook
│ └─ 飞书云文档(可选)
│
└─ 5. 自动回测(BACKTEST_ENABLED=true 时)
├─ BacktestService.run_backtest() — 对历史分析结果事后评估
└─ 写入 backtest_results 表
SQLite 表(核心 20 张,含 PRAGMA WAL)
表名
写入阶段
主要字段
用途
stock_daily
Phase 2
code, date, OHLCV, ma5/10/20, volume_ratio
日线行情
stock_weekly
Phase 2
同上(无 ma)
周线行情(resample)
stock_bars
Phase 2
code, interval {60m/1mo/1q/1y}, datetime, OHLCV
多周期 K 线(统一表,60m + 月/季/年)
stock_quote_snapshot
Phase 2
code, snapshot_date, 35 字段(价格/估值/股本/股息/交易元数据)
每日行情面板(离线回放用)
stock_info
Phase 2
code, name, market, sector
股票基本信息
news_intel
Phase 3 enrich
code, title, snippet, url, source, dimension
新闻情报
analysis_results
Phase 3 LLM
code, date, score, prediction, report_json
AI 分析结果
fundamental_*
Phase 3 enrich
code, period, revenue, net_income, roe
基本面快照
pe_history
Phase 3 enrich
code, date, pe, close
PE 历史(批量 upsert)
macro_data
Phase 1
indicator, value, date
宏观指标
backtest_results
Phase 5
code, analysis_date, accuracy, return_pct
回测结果
conversations
API/Bot
session_id, role, content
对话历史
llm_usage
Phase 3 LLM
model, tokens_in, tokens_out, cost
LLM 用量审计
portfolio_accounts
API
name, currency
组合账户
portfolio_transactions
API
account_id, code, action, shares, price
交易记录
portfolio_snapshots
API
account_id, snapshot_date, total_value
组合快照
system_config
API
key, value, category
系统配置
评分快照表
Phase 3 enrich
code, date, scoring_overview
量化评分历史
stocklens/reports/{YYYYMMDD}/
├── {CODE}-{NAME}/
│ ├── 美股-苹果-AAPL-20260518-元数据.md # 量化数据原始报告(Phase 3 enrich)
│ └── 美股-苹果-AAPL-20260518-报告.md # AI 分析报告(Phase 3 LLM)
└── report_{YYYYMMDD}.md # 日报汇总
缓存层
实现
TTL
用途
L1 内存
TTLCache(stocklens/utils/cache.py)
可配置
热数据(实时行情、基本面)
L2 SQLite
SQLiteCache(thread-local 连接)
可配置
跨进程持久化(宏观、搜索结果)
实时行情
REALTIME_CACHE_TTL
600s 默认
避免频繁请求数据源
基本面
FUNDAMENTAL_CACHE_TTL_SECONDS
120s
短期缓存基本面上下文
宏观慢指标
硬编码
24h
CPI/失业率等低频数据
阶段
池名
默认 worker
调节变量
Phase 1 预取
PREFETCH
4
STOCKLENS_PREFETCH_WORKERS
Phase 2 采集
DATA_FETCH
cpu_count
STOCKLENS_DATA_FETCH_WORKERS
Phase 3 enrich + LLM
PIPELINE
cpu_count
STOCKLENS_PIPELINE_WORKERS
US/HK 增强
US_ENRICH
cpu_count
STOCKLENS_US_ENRICH_WORKERS
搜索
SEARCH
5
STOCKLENS_SEARCH_WORKERS
全局 fallback
(任意)
-
STOCKLENS_DEFAULT_WORKERS
详见 modules/concurrency.md 。