数据获取与清洗:行情数据获取、数据对齐与重采样、缺失值处理、异常值检测、数据存储

做套利交易,说白了就是跟数据打交道。我见过太多策略在回测时跑得飞起,一上实盘就崩,十有八九是数据环节出了问题。今天咱们就把这块硬骨头啃下来。

行情数据获取:你的数据源靠谱吗?

我个人习惯把数据源分成两类:一类是交易所直连,另一类是第三方聚合。交易所直连延迟低、数据准,但门槛高,你得有席位、有接口权限。第三方聚合方便,但要注意——不同平台对同一笔交易的撮合时间戳可能差几毫秒,这在套利里就是天壤之别。

我记得有一次做跨期套利,用A平台的数据回测年化30%,换到B平台的数据直接变负收益。查了半天,发现是B平台把最后一笔成交的时间戳记成了结算时间。嗯,这里要注意:一定要用逐笔成交数据,别用分钟线或Tick快照

核心原则: 数据源必须可追溯、可验证。建议至少保留两个独立数据源做交叉校验。

数据对齐与重采样:时间戳的战争

套利交易最怕什么?时间对不上。你这边看到A合约涨了,那边B合约还没动,结果你开仓了,B合约突然跳空——这就是数据没对齐的后果。

我常用的对齐方法是以交易所主时钟为基准,把所有数据的时间戳统一到毫秒级。具体做法:

  1. 获取交易所的行情快照时间戳(通常是整秒或整毫秒)
  2. 将各品种的Tick数据按时间戳排序
  3. 用前向填充法对齐到同一时间轴

重采样这块,我个人偏好用成交量加权平均价,而不是简单算术平均。为什么?因为大单成交更能反映真实市场。举个例子,1秒内成交了100手,其中90手在100元,10手在101元,算术平均是100.1,但加权平均是100.09——后者更接近真实交易成本。

小技巧: 重采样时保留最高价、最低价、成交量、持仓量四个字段。套利策略经常需要用到极值来判断突破。

缺失值处理:别让空值毁了你的策略

实盘中数据缺失太常见了。网络抖动、交易所维护、节假日……我见过最离谱的一次,某品种连续3秒没有Tick数据,结果策略直接报错,仓位暴露了5分钟才被发现。

处理缺失值,我的经验是分情况讨论:

缺失类型 处理方法 适用场景
单个Tick缺失 前向填充(用上一笔数据) 流动性好的品种
连续多个Tick缺失 线性插值 趋势明显的行情
长时间缺失(>1秒) 标记为无效,策略暂停 所有套利策略

我曾经踩过一个坑:用前向填充处理了连续5秒的缺失数据,结果策略在恢复交易后瞬间开仓,因为填充的价格和实际价格差了0.5%。从那以后,我规定连续缺失超过3个Tick,直接跳过该时段

警告: 不要用全局均值填充行情数据!套利交易对价格敏感,均值填充会抹平价差波动,导致策略失效。

异常值检测:揪出那些离谱的数据

行情数据里经常混着一些「怪物」——比如某笔成交价比当前市价高了10倍,或者成交量突然暴增100倍。这些异常值如果不处理,策略会做出疯狂决策。

我常用的检测方法有三种:

  • 阈值法: 设定价格和成交量的合理范围,超出即剔除。比如股指期货,单笔成交价偏离最新价超过1%就标记异常。
  • 移动平均法: 计算过去N笔的移动平均和标准差,当前值超过3倍标准差就剔除。这个方法对趋势行情比较友好。
  • 价差法: 套利交易的核心是价差,如果价差突然超出历史最大值的2倍,大概率是数据错误。

我记得有一次做跨品种套利,豆粕和菜粕的价差突然从200跳到800,策略差点开仓。我赶紧查了原始数据,发现是菜粕的一笔成交价格少了一个小数点——1000变成了10000。嗯,这种低级错误在实盘里其实很常见。

我的习惯: 异常值不直接删除,而是标记后人工复核。有时候异常值反而是市场异动的信号,比如乌龙指。

数据存储:选对工具,事半功倍

数据存得好不好,直接影响策略回测和实盘运行的效率。我试过CSV、HDF5、数据库三种方式,各有优劣。

CSV: 简单直接,适合小规模数据(百万行以内)。但读写慢,不支持压缩,而且容易损坏。我一般只用CSV做临时导出或人工查看。

HDF5: 我的主力存储格式。读写快,支持压缩,能存多维数据。一个文件就能装下所有品种的Tick数据。缺点是不支持并发写入,实盘时要注意。

数据库: 适合团队协作和复杂查询。我用过PostgreSQL和InfluxDB,前者适合结构化数据,后者适合时序数据。但数据库的维护成本高,个人做套利其实没必要。

建议: 个人做套利,用HDF5就够了。团队协作,上数据库。CSV?只用来做数据交换。

下面是我画的一张数据流程框架图,把今天讲的内容串起来:

数据获取与清洗流程框架 行情数据源 数据对齐与重采样 缺失值处理 异常值检测 数据存储(CSV/HDF5/DB) 策略调用 实盘运行 交易所直连 / 第三方聚合 时间戳统一 / 成交量加权 前向填充 / 线性插值 阈值法 / 移动平均 / 价差法

最后说一句:数据清洗不是一次性工作,而是持续的过程。我每周都会跑一遍数据质量检查脚本,看看有没有新的异常模式出现。你想想看,如果数据都不可靠,策略再牛有什么用?

总结: 数据获取要可靠,对齐要精确,缺失要谨慎,异常要揪出,存储要高效。这五步走扎实了,套利策略才能稳稳落地。

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