系统设计:股票图表系统
介绍
在上一篇《系统设计:股票数据管理系统》中,解决了股票数据管理的问题,成功迈出第一步。有了数据,第二步是通过绘图的形式将其可视化。 绘图说简单也简单:Python 生态里的绘图库多到让人眼花缭乱,任选一个都能画出复杂的图表。
绘图说难也难:当有大量指标的时候,需要设计一个框架,支持不同图表的展示。同时,对于每种图表来说,又需要在同一张图上绘制多种类型的数据。因此,这又是一个系统设计问题。
在文本中,探索如何实际一个通用、可扩展的图表系统架构,用于支撑复杂的股票指标绘图场景。
技术选型
Python 生态里的绘图库多到让人眼花缭乱,任选一个都能画出复杂的图表。
这里我选择的是基于 ECharts 的 pyecharts。
为什么选择 pyecharts?
- 基于前端技术
- 能够较好与 PyQt 融合
- 也能够用于其它场景
- 交互体验比较好
- 功能强大,需求能够满足
- 相关资料比较重组
为什么不选 Matplotlib 等其它?
- 主要还是基于个人兴趣
- 我还会写前端,我希望这次的绘图经验,未来能够在写前端时复用
整体架构
整体可分为展示控件、布局、图表、指标、数据源等几部分:
其中:
- 数据源:《系统设计:股票数据管理系统》中设计的数据源,简单来说,通过
(Symbol, start, end)
三元组,就能够换回基本的行情数据 - 指标:基于行情基本数据,进行一系列运算,并生成一个新的时间序列
- 指标可以基于单一标的计算,也可基于多标的计算,可以是纯股票计算,也可以是融合其它数据计算
- 信号:指标指的是连续时间序列,信号指的是某个时间点的事件,比如常说的“金叉”、“死叉”等等
- 图表:对指标、信号、数据进行可视化展示。
- 布局:将多图表整合到一个统一的时间轴下,将每个图表元素都与对应的时间点严格对齐
- 展示控件:在 PyQt 中使用一个 WebView,对生成的图表 HTML 进行展示
值得一提的是,这里的指标与信号不仅在绘制指标图表中有用,对于策略回测、机器学习等功能模块,也是同样重要、核心的。
布局
布局的作用是将图表组装到一起。
因为图表库选型了 pyecharts?,因此布局主要指的是 Grid。