1. 时序数据基础:从零认识金融时序
大家好,我是你们这门课的老朋友。今天咱们聊聊最基础的东西——时序数据。
说实话,我入行那会儿,对时序数据的理解特别肤浅。就觉得,不就是带时间戳的数据嘛,有啥好研究的?后来在量化交易系统里栽了几个跟头,才明白这东西的门道有多深。
嗯,咱们从头说起。
1.1 什么是时序数据?
时序数据,说白了就是带时间戳的数据序列。每个数据点都对应一个时间点,按时间顺序排列。
举个例子:
- 你每天早晨称体重,记录下日期和体重值——这就是时序数据
- 股票每秒钟的成交价——这也是时序数据
- 传感器每隔100毫秒采集的温度——还是时序数据
我习惯用一个公式来理解:
时序数据 = 时间戳 + 观测值 + 标签(可选)
就这么简单。但简单背后,藏着不少坑。
1.2 时序数据的三大特点
做金融数据库这些年,我总结时序数据有三个核心特点。你想想看,理解了这三点,后面学啥都顺。
1.2.1 时间戳——数据的灵魂
每个时序数据点,都必须有一个时间戳。没有时间戳的数据,就像没有身份证的人——没法用。
但这里有个坑:时间戳的精度。
我曾经在项目中遇到过一个问题:两个系统记录同一笔交易,一个用毫秒级时间戳,一个用微秒级。结果数据对不上,排查了整整两天。后来我定了个规矩:金融场景下,时间戳精度统一用微秒,必要时用纳秒。
1.2.2 有序性——不能乱
时序数据天然有序。先发生的在前,后发生的在后。这个顺序一旦乱了,很多分析就废了。
举个例子:计算移动平均线,如果数据顺序乱了,算出来的指标全是错的。
我刚开始做行情系统时,就犯过这个错。数据从多个源进来,没做排序就直接入库。结果回测时发现策略收益曲线特别诡异——后来才发现,是数据顺序乱了。
嗯,从那以后,我所有时序数据的写入都强制按时间戳排序。
1.2.3 海量性——数据爆炸
金融时序数据有多海量?我给你算笔账:
| 数据类型 | 单日数据量(一只股票) | 全市场(约4000只股票) |
|---|---|---|
| K线数据(1分钟) | 约240条 | 约96万条 |
| 逐笔成交 | 约10万条 | 约4亿条 |
| Level2行情 | 约500万条 | 约200亿条 |
看清楚了吗?光是逐笔成交,全市场一天就4亿条。一年下来,上千亿条数据。
传统的关系型数据库,面对这个量级基本就跪了。这也是为什么我们需要专门的时序数据库。
1.3 金融领域典型时序数据场景
咱们做金融的,天天跟这几类数据打交道。我挑三个最典型的说说。
1.3.1 K线数据——最熟悉的陌生人
K线数据,做交易的人天天看。但作为数据库工程师,你得知道它背后的存储逻辑。
一条K线数据包含:
- 时间戳(通常是分钟级或日级)
- 开盘价、收盘价、最高价、最低价
- 成交量、成交额
存储上,我建议按时间+标的做分区。比如:
-- 伪代码示例
CREATE TABLE kline_1min (
ts TIMESTAMP, -- 时间戳
symbol VARCHAR(10), -- 股票代码
open DOUBLE, -- 开盘价
high DOUBLE, -- 最高价
low DOUBLE, -- 最低价
close DOUBLE, -- 收盘价
volume BIGINT, -- 成交量
PRIMARY KEY (ts, symbol)
);
这里要注意:时间戳和股票代码要联合做主键。我见过有人只用时间戳做主键,结果不同股票的数据互相覆盖,那叫一个惨。
1.3.2 逐笔成交——最细粒度的数据
逐笔成交,就是每一笔真实的成交记录。它比K线数据细得多。
一条逐笔成交记录包含:
- 成交时间(精确到微秒)
- 成交价格
- 成交数量
- 成交方向(买/卖)
- 成交编号
逐笔成交的数据量特别大。我做过一个项目,单只股票一天的逐笔成交就有几十万条。全市场的话,你想想看。
1.3.3 Level2行情——快人一步的秘密
Level2行情,比普通行情多了很多东西。比如:
- 十档买卖盘口(普通行情只有五档)
- 逐笔成交明细
- 委托队列
- 成交统计
Level2行情的数据量,是普通行情的几十倍。而且它要求低延迟——数据从交易所出来到入库,延迟不能超过毫秒级。
我曾经帮一家券商优化Level2行情系统。他们原来的方案是用Kafka+MySQL,结果延迟经常飙到几百毫秒。后来换成时序数据库+内存计算,延迟降到了5毫秒以内。
嗯,这就是专业时序数据库的价值所在。
1.4 本章知识体系总览
说了这么多,咱们用一张图来总结一下本章的核心内容:
这张图把咱们今天讲的内容串起来了。你仔细看看,是不是清晰多了?
- 时序数据 = 时间戳 + 观测值 + 标签
- 三大特点:时间戳、有序性、海量性
- 三大场景:K线、逐笔成交、Level2行情
- 选对存储方案,比盲目优化更重要
好了,第一章就到这里。记住我今天说的这些基础,后面咱们会反复用到。尤其是那个时间戳精度的问题——嗯,你以后一定会遇到的。