这是一个基于 Streamlit + OpenBB 的股票数据看板,入口是 src/app.py。
应用一方面提供基础面与新闻查询,另一方面把历史价格页做成了一个“机构支撑/阻力区”分析面板,支持:
- 历史价格回放
replay - 日线与高周期 volume profile
- Anchored VWAP 锚点
- ATR 带
- 支撑/阻力区打分与排序
整个应用围绕 src/app.py 展开,执行路径很清晰:
- 设置
Streamlit页面配置与标题。 - 调用 src/ui/sidebar.py 收集用户输入。
- 根据
TAB_NAMES创建 6 个标签页。 - 将“历史价格分析”交给 src/dashboard_page.py。
- 将财务报表、比率、新闻等交给 src/ui/panels.py 做通用展示。
也就是说,app.py 更像一个总控入口:
- 负责装配页面
- 负责路由 tab
- 不直接承载复杂业务计算
真正的核心分析流程在 dashboard_page.py。
应用当前包含 6 个标签页:
Historical PriceIncomeBalance SheetCash FlowRatiosNews
其中最核心的是 Historical Price:
- 加载历史 OHLCV
- 构造回放视角下的计算窗口
- 生成 AVWAP 特征
- 生成日线与高周期 volume profile
- 合并候选 zone
- 对支撑/阻力进行反应验证与排序
- 在图表和表格中展示最终 zone
Historical Price 页由 src/dashboard_page.py 驱动,大致流程如下。
- 拉取历史价格
- 归一化 OHLCV 字段
- 检查必需列是否完整
通过 src/engines/replay_engine.py:
- 划分图表展示数据
plot frame - 划分策略计算数据
calc frame - 支持把任意历史日期当作“今天”重新计算
通过 src/features/volume_profile.py:
- 生成 anchored VWAP 特征
- 当前 major high/low 已按“距离”分层,而不是按日线/周线概念分层
- 目前有两档:
20个交易日短期高低点60个交易日中期高低点
系统会构建两类 profile:
- 日线视角:最近若干交易日的
5m数据合成 profile - 高周期视角:最近若干周窗口的
1d数据合成 profile
然后提取高成交密度节点,生成候选价格带。
通过:
完成以下工作:
- 合并相近或重叠 zone
- 识别支撑 / 阻力
- 计算 reaction 指标
- 计算 institutional score
- 分别筛出最终展示的支撑区和阻力区
通过 src/plotting/chart_builder.py:
- 渲染 K 线
- 渲染成交量
- 渲染 zone 水平线
- 渲染 AVWAP 线
- 渲染 volume profile 侧边叠加层
侧边栏定义在 src/ui/sidebar.py,主要分为几组:
- 基础输入
SymbolPrice providerFundamentals providerNews providerPrice history range
- Institutional Zone Settings
- volume profile 分箱数
- 高周期回看窗口
- zone 扩展宽度
- 高成交量分位数
- zone 合并阈值
- 最大支撑/阻力显示数量
- ATR Overlay
- 是否显示 ATR 带
- ATR 倍数
- Reaction Validation
- lookahead bars
- strong reaction threshold
- minimum touch gap
- Bar Handling
- 是否排除最新未收盘 bar 参与计算
- 是否在图上显示最新 live bar
默认值定义在 src/config/settings.py。
以 src/app.py 为中心,可以把项目理解成下面几层:
src/
├─ app.py # 应用入口
├─ dashboard_page.py # 历史价格主页面
├─ config/ # 页面常量、默认参数
├─ data/ # OpenBB 数据拉取与清洗
├─ engines/ # 回放、验证、打分等流程引擎
├─ features/ # AVWAP、VP、边界特征
├─ plotting/ # 图表拼装与渲染
├─ ui/ # 侧边栏、面板、状态
├─ boundary_tester/ # 批量验证与研究工具
└─ run_boundary_tester.py # 研究/验证入口
项目当前依赖见 requirements.txt:
pip install -r requirements.txt核心依赖包括:
streamlitopenbbpandasplotlyPyYAMLstreamlit-lightweight-charts
在仓库根目录执行:
streamlit run src/app.py启动后可以在侧边栏输入证券代码,例如:
AAPLMSFT000300.SS
如果你主要关心价格结构,建议优先看 Historical Price 页:
- 输入
symbol - 选择足够长的
history range - 调整 VP / zone 参数
- 用
replay看历史某一天当下系统会给出哪些支撑阻力 - 结合下方表格检查 zone 来源、反应质量和分数
如果你主要关心公司基本面,则可以直接切到:
IncomeBalance SheetCash FlowRatiosNews
如果要继续扩展这个项目,建议从 src/app.py 往下读:
- 先看
app.py怎么组织 tab 和 sidebar。 - 再看
dashboard_page.py怎么串起价格分析流程。 - 接着看
features/和engines/,理解 zone 是怎么生成和排序的。 - 最后看
plotting/chart_builder.py,理解最终图表是怎么拼出来的。
这是目前最省力、也最接近真实运行路径的阅读顺序。
- 应用以
Streamlit交互体验为主,适合研究和可视化,不是交易执行系统。 - 多数数据能力依赖
OpenBB提供的数据接口。 - 高周期 zone 与日线 zone 会做合并和加权,所以最终结果是“结构化汇总”,不是简单罗列原始信号。
- 当前 README 以
src/app.py为主线,因此更偏“应用结构说明”,而不是研究方法论文式文档。