4、高频数据基础:Tick数据、分钟级数据、数据频率选择、数据对齐与清洗、数据存储方案

做市商这行,说白了就是跟数据打交道。你策略再牛,底层数据是脏的、频率选错了、对齐没做好,那结果就是——亏钱。我见过太多团队,模型跑得飞起,一上实盘就崩,查到最后,往往是数据基础没打牢。

今天咱们就把这块地基夯实。我会从Tick数据讲起,一直聊到怎么存、怎么清洗。嗯,都是我在实盘里踩过的坑,你听听看。

4.1 Tick数据:最原始的市场心跳

Tick数据是什么?就是交易所每笔成交的原始记录。每一笔交易,都对应一条Tick。它记录了价格、数量、时间,有时候还有买卖方向。

举个例子,一条典型的Tick数据长这样:

时间戳: 2024-01-15 09:30:01.123456
价格: 100.25
数量: 200
方向: 买 (Bid触发)
交易所: Binance
交易对: BTC/USDT

你想想看,一秒钟可能产生几十甚至上百条Tick。高频交易的核心,就是在这毫秒级的波动里找机会。

核心要点:Tick数据是最高频、最原始的数据。它没有经过任何加工,是策略回测和实盘执行的「原材料」。

我个人习惯,在做市策略开发初期,一定会先拉一周的Tick数据,肉眼扫一遍。为什么?因为很多异常模式,你光看统计量是看不出来的。比如某个交易所的Tick时间戳经常出现「倒挂」,也就是后发生的交易时间戳反而更早。这种数据不处理,你的策略逻辑会直接乱掉。

4.2 分钟级数据:降频后的「中频」视角

Tick数据太密了,存起来贵,算起来慢。所以很多时候,我们会把Tick数据聚合成分钟级数据。比如1分钟K线,就是这一分钟内的开盘价、收盘价、最高价、最低价、成交量。

分钟级数据的好处是:

  • 存储成本低:一条分钟数据顶几百条Tick。
  • 计算速度快:回测时跑得动,策略迭代效率高。
  • 噪音少:过滤掉了微观层面的随机波动。

但要注意,降频是有代价的。你丢失了订单簿的微观结构信息。比如,一个巨大的买单在最后一秒把价格拉上去,然后瞬间撤单。在分钟K线上,你只看到一根长上影线,但Tick数据里,你能看到这个「虚假拉升」的全过程。

我的建议:策略开发初期,先用分钟级数据做快速验证。等逻辑跑通了,再切到Tick数据做精细回测。别一上来就搞Tick,否则你一天可能连一次回测都跑不完。

4.3 数据频率选择:不是越高越好

很多新手有个误区:频率越高,策略越赚钱。其实不是。

频率选择,取决于你的策略类型:

策略类型 推荐频率 原因
高频做市 Tick / 毫秒级 需要捕捉订单簿瞬间变化
日内趋势 1分钟 / 5分钟 过滤微观噪音,抓主要趋势
统计套利 1分钟 / 5分钟 需要稳定的相关性计算
中低频做市 1分钟 / 15分钟 降低交易成本,减少滑点影响

我在项目中遇到过一件事:有个团队做BTC永续合约的做市,用了Tick数据,结果策略在回测里年化300%,一上实盘就亏。后来发现,他们的Tick数据里包含了大量「闪电交易」——就是那种几毫秒内价格来回跳的极端行情。回测时这些交易都按理想价格成交了,但实盘根本吃不到。这就是频率选得太高,反而引入了「回测幻觉」。

避坑指南:我曾经因为数据频率选错,白费了两周时间。记住:频率越高,对数据质量的要求也越高。如果你的数据源本身就有延迟或丢包,高频数据反而会放大这些错误。

4.4 数据对齐与清洗:脏数据是策略杀手

数据对齐,说白了就是把不同来源、不同频率的数据,放到同一个时间轴上。比如,你要把Binance的Tick数据和OKX的Tick数据对齐,才能做套利。

对齐的核心难点在于:不同交易所的时间戳精度不一样。有的精确到毫秒,有的精确到微秒,有的甚至只有秒级。你直接按时间戳合并,会发现大量「错位」。

我的做法是:

  1. 统一时间基准:把所有时间戳都转成UTC纳秒级整数。
  2. 按时间窗口对齐:比如,对于Tick数据,设定一个1毫秒的容忍窗口。在这个窗口内的数据,视为「同时发生」。
  3. 填充缺失值:如果某个时间点没有数据,用前一条数据填充(forward fill),或者直接丢弃。

数据清洗就更关键了。常见的脏数据包括:

  • 价格异常:比如价格突然变成0,或者比前一秒翻了10倍。
  • 成交量异常:比如某条Tick的成交量是正常值的100倍。
  • 时间戳重复:多条数据的时间戳完全一样,但价格不同。
  • 数据缺失:某段时间内完全没有数据。

清洗原则:宁可丢掉可疑数据,也不要让脏数据进入策略。我曾经因为一条价格异常的Tick,导致整个做市策略在实盘里连续吃单,亏了6位数。从那以后,我的清洗逻辑里永远有一条:价格变动超过5%的Tick,直接标记为异常,人工复核。

4.5 数据存储方案:选对了,事半功倍

高频数据量巨大。一个交易所一天的Tick数据,可能就有几个GB。怎么存,是个大问题。

我推荐几种方案:

存储方案 适用场景 优点 缺点
CSV文件 小规模、临时分析 简单、通用 慢、占用空间大
Parquet 中等规模、列式分析 压缩率高、读取快 不支持实时写入
InfluxDB 时序数据、实时查询 专为时序设计、查询快 学习成本高
ClickHouse 大规模、复杂分析 极速查询、支持SQL 运维复杂

我个人习惯是:

  • 原始Tick数据:用Parquet存,按天分区。这样回测时按日期加载,速度快,空间省。
  • 分钟级数据:用ClickHouse存,方便做各种聚合查询和可视化。
  • 实时数据:用InfluxDB,专门给实盘策略提供低延迟的数据读取。

一个小技巧:不管用什么方案,一定要做数据校验。我每次存完数据,都会跑一个简单的脚本,检查数据条数、时间范围、价格范围是否合理。这一步花不了几分钟,但能避免「存了一堆坏数据」的悲剧。

知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个「数据决策地图」:

高频数据基础:数据驱动决策路径 原始数据源 Tick数据(毫秒级) 分钟级数据(1min/5min) 频率选择:策略类型决定频率 数据对齐:统一时间基准 数据清洗:去异常、补缺失 数据存储:Parquet/ClickHouse 高质量数据 → 策略决策

这张图的核心逻辑是:从原始数据源出发,根据策略类型选择Tick或分钟级数据,然后做对齐和清洗,最后存到合适的存储方案里。每一步都做扎实了,你的策略才能跑得稳。

好了,高频数据基础就聊到这儿。记住一句话:数据质量决定策略上限。你花在数据上的每一分钟,都会在策略收益上得到回报。


公众号:蓝海资料掘金营,微信deep3321