基于 n8n + MySQL + Streamlit 的全栈实践
前言
作为一名价值投资者,我一直希望有一个工具能帮我自动计算个股在 3年、5年、10年 周期内的价格偏离度,从而量化判断当前的买卖点。
市面上的行情软件大多只看当下,缺乏基于长周期历史数据的策略分析。于是,我利用手头的 Oracle 服务器,配合 1Panel 面板,使用 n8n 做数据流自动化,MySQL 做存储,Streamlit 做可视化看板,历时数天,终于完成了 V1.0 版本的开发。
这篇文章将完整复盘整个系统的搭建过程、踩坑经验以及核心逻辑实现。
一、 系统架构设计
为了保证系统的轻量化和易维护性,我采用了纯 Docker 容器化的部署方案:
基础设施:Oracle Server + 1Panel 运维面板
数据源:AkShare (开源财经数据接口)
ETL 流程:n8n (工作流自动化)
数据库:MySQL 8.0 (存储基础信息、日线、年度数据、策略结果)
前端展示:Streamlit (Python 快速构建数据看板)
二、 核心数据流建设 (ETL)
1. 数据库设计
系统核心围绕四张表展开:
stock_basic: 基础表(代码、名称、行业、上市日期),作为全系统的白名单。stock_daily: 日线表(存每天的开高低收量额)。stock_yearly: 年度表(存每年的最高价、最低价,用于计算长线策略)。stock_strategy: 策略表(存 3/5/10 年的买卖点位、当前偏离度)。
2. n8n 工作流的进化
最开始,我只是简单地拉取 API 数据写入数据库,但很快遇到了脏数据问题。经过优化,最终的 ETL 逻辑采用了**“白名单清洗模式”**:
Extract (抽取):
线程 A:从
stock_basic读取所有合规股票代码(白名单)。线程 B:从 AkShare 接口拉取全市场实时行情。
Transform (清洗):
代码比对:只保留在白名单中的股票,剔除指数、B股及退市股。
时间修正:智能判断当前时间,若是凌晨执行则归档为昨日数据,若是盘后执行则归档为今日。
脏数据过滤:剔除成交量为 0 或价格为空的无效数据。
Load (加载):
使用
INSERT ... ON DUPLICATE KEY UPDATE确保数据幂等性,支持反复重跑。

三、 策略逻辑实现
这是系统的灵魂。为了避免“刚刚上市的新股因为数据少而被误判为严重低估”,我重新定义了计算逻辑:
10年周期:
卖点:过去 10 个年度最高价中,从高到低取第 5 位。
买点:过去 10 个年度最低价中,从低到高取第 5 位。
低点:过去 10 年的绝对最低价。
注:上市不足 10 年的数据置空,不参与排名。
5年/3年周期:逻辑同上,分别取第 3 位和第 2 位。
偏离度计算:
(现价 - 历史最低) / 历史最低。
通过 Python 脚本 recalc_strategy.py,系统可以基于 stock_yearly 表自动计算出全市场 5000+ 只股票的所有关键点位,并更新到策略表中。
四、 前端看板开发 (Streamlit)
为了让数据不仅“有用”而且“好看”,我选择了 Streamlit。
1. 偏离度排行榜
热力图:使用 Pandas Styler 对“偏离度”列进行背景着色。采用
RdYlGn_r色阶,绿色代表负偏离(低估),红色代表正偏离(高估),一眼识别机会与风险。交互:支持按 3/5/10 年周期筛选,支持按“最被低估”或“最被高估”排序。
一键直达:点击股票代码,可直接跳转东方财富详情页。
2. 个股深度分析页
多周期 Tabs:将 3/5/10 年的数据分 Tab 展示,清晰对比长短线逻辑。
嵌入式 K 线:利用
iframe嵌入了东方财富的概念版行情页面。视觉黑科技:通过 CSS
overflow: hidden和top: -160px的技巧,裁剪掉了外部网页原本繁杂的顶部导航栏,只保留 K 线和盘口信息,实现了与看板的完美融合。

五、 数据治理与踩坑记录
在开发过程中,数据的准确性校验花费了最多时间:
退市股清理:发现排行榜上有很多早已退市的股票干扰视线。
解决:编写
clean_delisted.py,级联删除basic表中无行业信息的股票及其关联数据。
新股补录:发现
stock_strategy表比stock_basic少了 100 多只,原来是年内新股。解决:执行 SQL 补录新股,虽然它们暂时没有策略数据,但保证了能被搜到。
数量对齐:为了强迫症般的精准,我编写了
align_market.py,实时拉取交易所名录,将数据库与 5473 只(含停牌)A股完全对齐,不多一只,不少一只。年终结算准备:编写了
year_end_settlement.py,用于在年底自动聚合当年日线生成年度数据,并刷新来年策略。
六、 总结与展望
至此,A 股价值偏离度策略看板 V1.0 正式完结。
它现在具备了:
✅ 全自动每日数据更新 (n8n)
✅ 全市场估值水位监测 (Streamlit 排行榜)
✅ 个股长线买卖点透视
✅ 完美的无头浏览器 K 线体验
接下来的计划:
引入“基本面数据” (PE/PB/ROE),结合技术偏离度做双重筛选。
增加“通知推送”,当关注的个股触及买点时通过钉钉或微信通知。
如果你也有一台闲置服务器,不妨也动手试试,让数据为投资护航。
(本文技术栈:Python, SQL, Docker, Streamlit, n8n)
评论