1. 时序数据基础:从零认识金融时序

大家好,我是你们这门课的老朋友。今天咱们聊聊最基础的东西——时序数据。

说实话,我入行那会儿,对时序数据的理解特别肤浅。就觉得,不就是带时间戳的数据嘛,有啥好研究的?后来在量化交易系统里栽了几个跟头,才明白这东西的门道有多深。

嗯,咱们从头说起。

1.1 什么是时序数据?

时序数据,说白了就是带时间戳的数据序列。每个数据点都对应一个时间点,按时间顺序排列。

举个例子:

  • 你每天早晨称体重,记录下日期和体重值——这就是时序数据
  • 股票每秒钟的成交价——这也是时序数据
  • 传感器每隔100毫秒采集的温度——还是时序数据

我习惯用一个公式来理解:

时序数据 = 时间戳 + 观测值 + 标签(可选)

就这么简单。但简单背后,藏着不少坑。

1.2 时序数据的三大特点

做金融数据库这些年,我总结时序数据有三个核心特点。你想想看,理解了这三点,后面学啥都顺。

1.2.1 时间戳——数据的灵魂

每个时序数据点,都必须有一个时间戳。没有时间戳的数据,就像没有身份证的人——没法用。

但这里有个坑:时间戳的精度

我曾经在项目中遇到过一个问题:两个系统记录同一笔交易,一个用毫秒级时间戳,一个用微秒级。结果数据对不上,排查了整整两天。后来我定了个规矩:金融场景下,时间戳精度统一用微秒,必要时用纳秒。

⚠️ 避坑指南: 我曾经见过有人把时间戳存成字符串,查询性能直接崩了。记住:时间戳一定要用数值类型(如Unix时间戳),别用字符串!

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/5左右。

1.3.3 Level2行情——快人一步的秘密

Level2行情,比普通行情多了很多东西。比如:

  • 十档买卖盘口(普通行情只有五档)
  • 逐笔成交明细
  • 委托队列
  • 成交统计

Level2行情的数据量,是普通行情的几十倍。而且它要求低延迟——数据从交易所出来到入库,延迟不能超过毫秒级。

我曾经帮一家券商优化Level2行情系统。他们原来的方案是用Kafka+MySQL,结果延迟经常飙到几百毫秒。后来换成时序数据库+内存计算,延迟降到了5毫秒以内。

嗯,这就是专业时序数据库的价值所在。

1.4 本章知识体系总览

说了这么多,咱们用一张图来总结一下本章的核心内容:

时序数据基础 - 知识体系 时序数据 时间戳 有序性 海量性 K线数据 逐笔成交 Level2行情 K线数据特点 • 时间+标的联合主键 • 分钟级/日级聚合 • 数据量相对较小 • 适合技术分析 逐笔成交特点 • 微秒级时间精度 • 数据量极大 • 需要数据压缩 • 适合高频分析 Level2行情特点 • 十档盘口数据 • 毫秒级延迟要求 • 数据量最大 • 需要内存计算 理解基础 → 选对工具 → 避免踩坑

这张图把咱们今天讲的内容串起来了。你仔细看看,是不是清晰多了?

📌 核心要点回顾:
  • 时序数据 = 时间戳 + 观测值 + 标签
  • 三大特点:时间戳、有序性、海量性
  • 三大场景:K线、逐笔成交、Level2行情
  • 选对存储方案,比盲目优化更重要

好了,第一章就到这里。记住我今天说的这些基础,后面咱们会反复用到。尤其是那个时间戳精度的问题——嗯,你以后一定会遇到的。

专注资料整理