用 Docker Compose 搭一个本地量化数据看板:PostgreSQL + Grafana 入门
云上流水线负责产出数据,本地看板负责让人看清数据。这篇文章记录我把 A 股日线数据从一堆 CSV 变成一张可交互看板的过程。
一、为什么是 Docker Compose
做量化复盘一段时间后,本地会积累大量数据文件:日线行情 CSV、指标快照、策略信号表。文件一多就有三个老问题:查一次要写一次脚本、想看趋势得手动画图、换台电脑环境全要重装。
我的解法是用两个经典开源组件搭一个本地看板,并用 Docker Compose 一键拉起:
- PostgreSQL:把 CSV 统一入库,建好索引后按股票代码、日期区间查询都是毫秒级;
- Grafana:连上数据库就能画 K 线、成交量、指标曲线,还支持时间区间联动和变量筛选。
Docker Compose 的好处是整个环境写在一个 docker-compose.yml 里,docker compose up -d 一条命令跑起来,docker compose down 干净退场,不污染系统环境。
二、compose 文件怎么写
核心只需要两个服务:
services:
db:
image: postgres:16
environment:
POSTGRES_DB: market
POSTGRES_USER: quant
POSTGRES_PASSWORD: local_only
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
depends_on:
- db
volumes:
pgdata:
两个值得注意的细节:
- 数据落在 named volume(
pgdata)里,容器删了数据还在,升级镜像也不丢库; - Grafana 首次登录后先在 Data Sources 里添加 PostgreSQL,地址填
db:5432——Compose 网络里服务名就是主机名,不用写 localhost。
三、把 CSV 灌进库
建表语句按复盘需要设计,重点是把主键定好:
CREATE TABLE daily_kline (
code varchar(10) NOT NULL, -- 如 sh.600519
trade_date date NOT NULL,
open numeric, high numeric,
low numeric, close numeric,
volume bigint,
PRIMARY KEY (code, trade_date)
);
CREATE INDEX idx_kline_date ON daily_kline (trade_date);
主键 (code, trade_date) 天然防止重复导入,配合 COPY ... FROM csv 或 Python 的 to_sql,几千只股票几年的日线几分钟就能灌完。我的习惯是每天收盘后先删掉当天已有行再插入,保证幂等——脚本跑两遍结果也一样。
四、看板怎么配
Grafana 里我最常用的三个面板:
- 个股走势:用变量
$code做下拉筛选,SQL 里写WHERE code = '$code',一条 SQL 同时服务所有股票; - 市场宽度:统计每天上涨家数占比,
SELECT trade_date, avg(close > open)::int FROM daily_kline GROUP BY 1,一眼看出情绪冷暖; - 成交量异动:量比超过阈值的高亮显示,配合告警功能,数据一入库自动刷新。
时间范围选择器和面板联动是 Grafana 的强项:框选一段行情,所有面板同步切换,比在 Excel 里筛日期快得多。
五、小结
这套本地看板的意义不在于替代专业行情软件,而在于:自己的策略信号、自己的指标,能以自己舒服的方式呈现。数据在自己手里,回测和复盘才有一个可靠的底座。整套环境跑起来不超过十分钟,感兴趣的朋友可以照着上面的配置试一试,也欢迎在评论区交流你的看板设计。
- 点赞
- 收藏
- 关注作者
评论(0)