分类
联系方式
  1. 新浪微博
  2. E-mail

系统设计:股票图表系统

介绍

在上一篇《系统设计:股票数据管理系统》中,解决了股票数据管理的问题,成功迈出第一步。有了数据,第二步是通过绘图的形式将其可视化。 绘图说简单也简单:Python 生态里的绘图库多到让人眼花缭乱,任选一个都能画出复杂的图表。

绘图说难也难:当有大量指标的时候,需要设计一个框架,支持不同图表的展示。同时,对于每种图表来说,又需要在同一张图上绘制多种类型的数据。因此,这又是一个系统设计问题。

在文本中,探索如何实际一个通用、可扩展的图表系统架构,用于支撑复杂的股票指标绘图场景。

技术选型

Python 生态里的绘图库多到让人眼花缭乱,任选一个都能画出复杂的图表。

这里我选择的是基于 ECharts 的 pyecharts

为什么选择 pyecharts

  • 基于前端技术
  • 能够较好与 PyQt 融合
  • 也能够用于其它场景
  • 交互体验比较好
  • 功能强大,需求能够满足
  • 相关资料比较重组

为什么不选 Matplotlib 等其它?

  • 主要还是基于个人兴趣
  • 我还会写前端,我希望这次的绘图经验,未来能够在写前端时复用

整体架构

整体可分为展示控件、布局、图表、指标、数据源等几部分:

其中:

  • 数据源:《系统设计:股票数据管理系统》中设计的数据源,简单来说,通过 (Symbol, start, end) 三元组,就能够换回基本的行情数据
  • 指标:基于行情基本数据,进行一系列运算,并生成一个新的时间序列
    • 指标可以基于单一标的计算,也可基于多标的计算,可以是纯股票计算,也可以是融合其它数据计算
  • 信号:指标指的是连续时间序列,信号指的是某个时间点的事件,比如常说的“金叉”、“死叉”等等
  • 图表:对指标、信号、数据进行可视化展示。
  • 布局:将多图表整合到一个统一的时间轴下,将每个图表元素都与对应的时间点严格对齐
  • 展示控件:在 PyQt 中使用一个 WebView,对生成的图表 HTML 进行展示

值得一提的是,这里的指标与信号不仅在绘制指标图表中有用,对于策略回测、机器学习等功能模块,也是同样重要、核心的。

布局

布局的作用是将图表组装到一起。

因为图表库选型了 pyecharts?,因此布局主要指的是 Grid。