The project's README from github.com/shy3130/tick-stock-panel. As one markdown file: README.md.
本项目以个人开源为主进行开发维护,数据源插件化,可任意接入第三方数据源。仅供学习研究使用,严禁商业用途。
⚠️ 小白请绕路,本开源项目谨作为本地量化提供解决思路与方案,不作为投资软件或者看盘软件。
明确不做:不对标同花顺 / 通达信,不内置「AI 荐股 / 涨停预测」。
有任何项目问题可邮件联系 [email protected]。
觉得有用可以点个 Star
| 模块 | 一句话 | 详见 |
|---|---|---|
| 🔀 能力路由 | 多数据集(日K/除权/实时/分钟/盘口/财务,持续扩展)按源能力独立路由,任选组合 | custom-data-source.md |
| 🔍 选股引擎 | 25 个内置策略 + 分钟策略 + 自定义信号 + AI 生成,Polars 毫秒级扫全 A 股 | strategy.md |
| 📊 指标流水线 | MA/EMA/MACD/RSI/KDJ/布林/量比等 68 列指标与信号,一次扫表落盘 enriched Parquet | features.md |
| 🧪 回测研究 | 因子/策略/分钟回测 + 财务快照因子(点时口径),T+1/费用/滑点约束,评分策略附带因子归因 | features.md |
| 🔬 因子平台 | DSL 自定义因子(编辑器 25 算子点选/试算/版本) + 检验/组合,与策略双向联动(一键生成策略/触发器引用因子/回测归因) | factor-platform-plan.md |
| ⛏️ 因子挖掘 | 嵌套样本外搜索多因子排名组合,与自有策略对照,候选库显式发布、永不自动上线 | mining.md |
| 🌡️ 市场环境 | 情绪周期 6 阶段(连板梯队驱动)+ 概念/行业主线排名,与 5 档环境分并存 | market-phase.md |
| 🚨 异动监控 | 竞价/盘中/偏移三类异动一页覆盖:同花顺风向标 + 当日信号聚合 + 交易所偏离值口径 | — |
| 📡 监控中心 | 四类监控(策略/个股信号/价格/异动),多条件 AND/OR + 语音播报 + 飞书推送 | features.md |
| 📈 个股分析 | 9 类关键价位 + AI 四维分析(技术/基本面/财务/消息面) | features.md |
| 🏆 连板梯队 | 连板层级统计 + 概念涨幅轮动 + 盘后 AI 复盘(龙虎榜/盘前风向标注入) + 炸板/翘板预警 | features.md |
| 🧰 数据扩展 | 数据源插件化(TickFlow/fuyao/stock-sdk + YAML 自定义源),扩展字段配成一级页面同台分析;时序表(如人气排行)支持按日历史回补,接口配日期参数即可逐日补齐 | custom-data-source.md |
📊 行情总览
🔍 选股与回测
📈 个股与板块分析
🔔 监控与复盘
🗄️ 数据与扩展
| 看板 Dashboard | 策略 Screener |
![]() |
![]() |
| 回测 Backtest | 挖掘 Mining |
![]() |
![]() |
| 监控中心 Monitor | 连板梯队 Limit Ladder |
![]() |
![]() |
| 概念分析 Concept | 自选 Watchlist |
![]() |
![]() |
flowchart TB
subgraph DATA["数据源层 · 插件化"]
direction LR
D1["TickFlow SDK"] ~~~ D2["fuyao<br/>同花顺 REST"] ~~~ D3["stock-sdk"] ~~~ D4["YAML 自定义源"] ~~~ D5["+ 更多插件…"]
end
subgraph ROUTE["能力路由层"]
direction LR
R(["多数据集 · 按能力独立路由 · 档位探测"])
end
subgraph STORE["存储层"]
direction LR
ST1[("Parquet 分区表")] ~~~ ST2[("DuckDB")] ~~~ ST3[("JSON 按日缓存")]
end
subgraph CALC["计算层 · Polars"]
direction LR
C1["指标流水线"] ~~~ C2["复权与信号"]
end
subgraph RES["研究层"]
direction LR
G1["因子引擎"] ~~~ G2["回测引擎"] ~~~ G3["因子挖掘"]
end
subgraph SVC["应用层 · FastAPI"]
direction LR
S1["REST · SSE"] ~~~ S2["监控引擎"] ~~~ S3["任务调度"] ~~~ S4["交易日探针"]
end
subgraph FE["呈现层 · React 18"]
direction LR
F1["功能页面"] ~~~ F2["图表可视化"] ~~~ F3["实时推送"]
end
subgraph EXT["二次开发与扩展 · 贯穿各层的插槽"]
direction LR
X1["自定义策略"] ~~~ X2["自定义信号"] ~~~ X3["扩展分析页面"] ~~~ X4["AI 接口"]
end
DATA --- ROUTE
ROUTE --- STORE
STORE --- CALC
CALC --- RES
RES --- SVC
SVC --- FE
FE ~~~ EXT
classDef fe fill:#eef2ff,stroke:#6366f1,color:#312e81
classDef svc fill:#ecfeff,stroke:#06b6d4,color:#164e63
classDef res fill:#fff7ed,stroke:#f97316,color:#7c2d12
classDef calc fill:#f0f9ff,stroke:#0ea5e9,color:#0c4a6e
classDef store fill:#ecfdf5,stroke:#10b981,color:#064e3b
classDef data fill:#fdf2f8,stroke:#ec4899,color:#831843
classDef pluginSlot fill:#fdf2f8,stroke:#ec4899,color:#831843,stroke-dasharray:5 4
classDef route fill:#faf5ff,stroke:#8b5cf6,color:#6b21a8,stroke-width:2px
classDef ext fill:#f8fafc,stroke:#94a3b8,color:#334155,stroke-dasharray:5 4
class F1,F2,F3 fe
class S1,S2,S3,S4 svc
class G1,G2,G3 res
class C1,C2 calc
class ST1,ST2,ST3 store
class D1,D2,D3,D4 data
class D5 pluginSlot
class R route
class X1,X2,X3,X4 ext
style FE fill:#f5f3ff,stroke:#c7d2fe,color:#3730a3
style SVC fill:#ecfeff,stroke:#a5f3fc,color:#155e75
style RES fill:#fff7ed,stroke:#fed7aa,color:#9a3412
style CALC fill:#f0f9ff,stroke:#bae6fd,color:#075985
style STORE fill:#ecfdf5,stroke:#a7f3d0,color:#065f46
style ROUTE fill:#faf5ff,stroke:#ddd6fe,color:#6b21a8
style DATA fill:#fdf2f8,stroke:#fbcfe8,color:#9d174d
style EXT fill:#f8fafc,stroke:#94a3b8,color:#334155,stroke-dasharray:7 5
| 机制 | 说明 |
|---|---|
| 能力路由矩阵 | 各数据集按源声明能力独立路由,注册表集中定义、可扩展:TICKFLOW 档位探测(None/Free/Starter/Pro/Expert)+ 插件源能力声明,fail-closed(声明 pct_unit 未声明即拒)。同一数据集可随时换源,指标与回测口径不变 |
| 交易日探针 | fuyao 交易日历(确定性,含调休)→ tickflow 全市场行情时间戳探针(OR 语义)→ 工作日兜底;节假日自动停掉实时轮询与分钟增量,零无效请求 |
| 财务多源合并 | 按 (symbol, period_end) 报告期累积,多源取并集、逐列按公告日取最新(PIT);公告前一律空值,绝不填 0 |
| 非路由数据集直连 | 龙虎榜/盘前风向标/交易日历等 fuyao 专有能力不进路由矩阵,由独立服务直连消费——按日 JSON 缓存(历史不可变)、交易日回退、四态降级 |
| 回测执行隔离 | 回测在 spawn worker 子进程运行,持久 run ID,刷新/切页重连不丢任务;子进程结果消息经锁保护回传 |
| 分层缓存 | enriched 读取时现算指标(存储仅 15 列基础数据,现算 68 列指标与信号)+ 进程内快照缓存;扩展字段按日分区快照,页面即配即用 |
| 层 | 选型 |
|---|---|
| 后端 | FastAPI · Pydantic v2 · APScheduler · sse-starlette |
| 数据 | Polars(计算)· DuckDB(查询)· Parquet(存储) |
| 回测 | 自研仓位模拟引擎(T+1/费用/滑点/分钟回放)· vectorbt(部分路径) |
| 数据源 | TickFlow 官方 SDK · fuyao(同花顺 REST) · 插件化扩展(stock-sdk 示例插件 · YAML 自定义源) |
| AI(可选) | OpenAI 兼容接口(DeepSeek / 通义 / Ollama 等) |
| 前端 | React 18 · Vite · TypeScript · Tailwind · Tanstack Query · Lightweight Charts(TradingView 开源) · ECharts · dnd-kit |
| 部署 | Docker 两阶段构建,前端 dist 拷进后端镜像,单容器 |
前置依赖(仅方式 D 需要):Python ≥ 3.11 · Node ≥ 20 ·
uv·pnpm(npm i -g pnpm)有 Docker 直接看 方式 A,一条命令拉现成镜像;完全不想碰命令行:看 方式 C,让本机 AI 帮你部署
本项目每次推送都由 GitHub Actions 自动构建多架构镜像(linux/amd64 · arm64)并发布到 GHCR,拿来即用,本地无需装 Python / Node,也不用现场 build:
docker run -d --name tsp -p 3018:3018 -v ${PWD}/data:/app/data ghcr.io/shy3130/tick-stock-panel:latest
# 打开 http://localhost:3018
.env,命令里加 --env-file .env。ghcr.io/<你的用户名>/tick-stock-panel 用法相同。.env / tiers.yaml):参考 docker-compose.yml,把 build: 段换成 image: ghcr.io/shy3130/tick-stock-panel:latest。cp .env.example .env
docker compose up --build
# 打开 http://localhost:3018
Docker 镜像内置固定版本的 Codex CLI,Compose 会将主机 ${HOME}/.codex 只读挂载到容器,因此主机需先完成 Codex 登录。若主机 Codex 使用 loopback local-access provider,容器会保留实际端口并自动将主机名映射为 host.docker.internal。需要覆盖镜像内版本时可设置构建参数:
CODEX_CLI_VERSION=0.144.3 docker compose up --build
Windows 用户注意:纯 PowerShell / CMD 下
HOME环境变量通常未设置,会导致挂载路径解析失败、容器读不到 Codex 登录态。请在.env中显式指定主机 Codex 目录:# PowerShell 示例(实际路径以本机为准) echo "CODEX_HOME_HOST=C:\Users\你的用户名\.codex" >> .env
Codex CLI 模式允许 TickFlow 容器读取本机 Codex 登录凭据,仅应在受信任的本机环境启用。凭据目录以只读方式挂载,不会写入镜像。
镜像默认不含 stock-sdk 插件(合规考虑);确需启用执行 docker compose build --build-arg INCLUDE_STOCKSDK=1 后再 docker compose up -d,详见 docs/deployment.md。
📖 Docker 进阶、老 CPU 兼容、访问密码设置等见 docs/deployment.md。
装一个本机 AI 编程助手(Trae / Codex / OpenCode / ZCode / WorkBuddy 等,任选其一),新建一个空文件夹用助手打开,把下面这段话原样发给它:
帮我部署开源项目 https://github.com/shy3130/tick-stock-panel 到本机:
克隆到当前文件夹;有 Docker 优先拉 ghcr.io/shy3130/tick-stock-panel:latest 现成镜像,没有就走 Dev 模式;
缺少的依赖(Docker / Python / Node)帮我一起装好;
最后告诉我浏览器打开哪个地址、需要填哪些 Key。
AI 会自动完成克隆、装依赖、启动服务,完成后浏览器打开 http://localhost:3018 即可;TICKFLOW_API_KEY 等配置按 AI 提示填,详见 配置。
cp .env.example .env # 按需填 TICKFLOW_API_KEY(留空 = None 模式)
./dev.sh # Windows: .\dev.ps1
自动检�