第1章:数据可视化——让做市系统“看得见”

做市交易系统跑起来之后,你最先想看到什么?

我个人觉得,不是策略赚了多少钱,而是数据长什么样。K线、资金曲线、风险指标、实时行情——这些可视化组件,就是系统的“仪表盘”。没有它们,你就像在黑暗中开车。

1.1 K线图绘制:最基础的行情语言

K线图,说白了就是价格波动的“心电图”。每一根K线包含四个价格:开盘、收盘、最高、最低。我刚开始做量化时,觉得K线图太简单了,直到有一次策略回测跑偏,才发现是K线数据的时间戳对齐出了问题。

核心要点:K线图的数据结构必须精确到毫秒,尤其是高频做市场景。

绘制K线图,我习惯用轻量级的Canvas库,比如Lightweight Charts。它比ECharts快得多,适合实时刷新。

// 伪代码示例:K线数据格式
{
  time: '2024-01-15 09:30:00.000',
  open: 100.50,
  high: 101.20,
  low: 99.80,
  close: 100.90,
  volume: 12500
}

嗯,这里要注意:实时行情推送时,最后一根K线是“未闭合”的。它的收盘价会不断变化,直到下一根K线开始。我曾经因为没处理好这个细节,导致回测和实盘的K线形态不一致,亏了不少手续费。

1.2 资金曲线:你的“成绩单”

资金曲线,就是账户净值的走势图。它比K线图更敏感——K线图反映市场,资金曲线反映你的操作。

我建议至少画三条线:

  • 净值曲线:账户总价值的变化
  • 基准曲线:比如BTC/USD的价格走势,用来对比
  • 超额收益曲线:净值减去基准,看看你跑赢了没有

个人经验:资金曲线的纵轴用对数刻度。为什么?因为线性刻度下,早期的小波动会被后期的大波动淹没,看不清细节。对数刻度能让你同时看到“起步阶段”和“爆发阶段”的表现。

我在项目中遇到过一个问题:资金曲线突然断崖式下跌,吓得我赶紧查日志。结果发现是交易所的API返回了错误余额,把挂单冻结资金也算成了亏损。所以,数据源的清洗比绘图本身更重要。

1.3 风险指标仪表盘:别等爆仓才后悔

做市交易最怕什么?不是亏钱,是亏到无法控制。风险仪表盘就是你的“安全带”。

我常用的风险指标有这几个:

指标 含义 预警阈值
最大回撤 从最高点到最低点的跌幅 > 5% 警告,> 10% 暂停
夏普比率 风险调整后的收益 < 1.0 需要优化
持仓集中度 单一币种占总资金比例 > 30% 警告
挂单深度 买卖盘口价差与厚度 价差 > 0.1% 需调整

避坑指南:我曾经把夏普比率算错了,因为用了日收益率,但策略是分钟级别的。夏普比率的计算周期必须和交易频率匹配,否则数值会严重失真。

仪表盘的布局,我建议用“红绿灯”配色:绿色表示安全,黄色表示预警,红色表示危险。一眼扫过去就能知道系统状态。

1.4 实时行情看板:做市商的“雷达”

实时行情看板,就是你的“战场地图”。它需要展示:

  • 买卖盘口:当前最优买价和卖价,以及深度
  • 最新成交:最近几笔交易的价格和数量
  • 市场波动率:比如过去1分钟的涨跌幅
  • 订单状态:你的挂单是否被成交

我习惯把看板放在屏幕右侧,K线图在左侧。这样左眼看趋势,右眼看细节,效率最高。

你想想看,如果行情看板延迟超过100毫秒,做市策略就可能吃到“过时”的价差。所以,数据推送必须走WebSocket,不能用轮询。

1.5 知识体系结构图

下面这张图,概括了本章的核心逻辑:

数据可视化 K线图绘制 资金曲线 风险指标仪表盘 实时行情看板 时间戳对齐 对数刻度 红绿灯配色 WebSocket推送 四个核心模块 + 关键实现细节

这张图展示了四个核心模块的关联。K线图和实时行情看板是“输入”,资金曲线和风险仪表盘是“输出”。没有好的输入,输出就是垃圾。

1.6 实现中的几个坑

最后,分享几个我踩过的坑:

  1. 数据对齐:不同交易所的K线时间戳可能差几秒,必须统一校准到同一个时钟源。
  2. 性能优化:实时绘图时,不要每笔成交都重绘整个图表。用增量更新,只刷新变化的部分。
  3. 异常处理:行情断流时,图表不能卡死。要显示“数据中断”的提示,而不是留一个空白区域。

一个小技巧:在开发阶段,可以用模拟数据来测试可视化组件。我写了一个简单的数据生成器,能模拟各种极端行情——比如闪崩、流动性枯竭。这样不用等实盘出问题,就能提前发现bug。

数据可视化,说白了就是让系统“开口说话”。你不需要盯着日志一行行看,扫一眼仪表盘就知道哪里不对劲。嗯,这一章的内容就到这里。记住:可视化不是装饰,是工具。


无相订单流研究社 微信Lucian808555