4、数据源合规验证:市场数据源授权检查、数据完整性校验、数据延迟与异常检测
数据源合规验证,说白了就是检查你用的行情数据「来路正不正、全不全、快不快」。我做了这么多年量化审计,见过太多团队在策略上花了大功夫,结果数据源出问题,整个交易系统直接崩盘。嗯,今天咱们就聊聊这块。
4.1 市场数据源授权检查
数据授权这事儿,很多人觉得就是签个合同、交个钱。其实没那么简单。我曾在一次审计中遇到一个团队,他们用了某交易所的 Level-2 数据,但合同里只买了 Level-1 的授权。结果被交易所发现,罚了半年收益。你说冤不冤?
授权检查的核心,我总结为三点:
- 授权范围核对:确认你拿到的数据品种、频率、深度是否在合同范围内。比如,你买的是沪深300的 tick 数据,就不能偷偷用中证500的。
- 授权期限验证:很多数据授权是按年签的。我建议在系统里设个自动提醒,到期前30天就报警。别等到数据断了才发现。
- 数据使用限制:有些数据源禁止用于回测,有些禁止用于实盘。你得搞清楚。我曾经见过一个团队,用免费数据做回测,结果实盘时数据格式完全不一样,策略直接失效。
我的小技巧:每次接入新数据源,我都会让法务和风控一起签一份《数据使用合规确认函》。白纸黑字,省得后面扯皮。
4.2 数据完整性校验
数据完整性,就是检查数据有没有缺胳膊少腿。你想想看,如果某天下午2点到3点的行情数据丢了,你的策略刚好在那段时间交易,后果是什么?
我常用的校验方法有这些:
- 时间戳连续性检查:逐笔检查数据的时间戳,看有没有跳秒、跳分钟。比如,tick 数据应该是每500毫秒一条,如果突然出现1秒的间隔,那就有问题。
- 字段完整性检查:每条数据必须包含必要的字段。比如,行情数据至少要有:时间戳、品种代码、最新价、成交量、买卖盘口。缺一个都不行。
- 数据量级校验:每天的数据量应该在一个合理范围内。比如,某只股票平时每天有10万条 tick 数据,突然某天只有1万条,那肯定有问题。
# 一个简单的数据完整性校验脚本(伪代码)
def check_data_integrity(data):
# 检查时间戳连续性
for i in range(1, len(data)):
if data[i].timestamp - data[i-1].timestamp > 1000: # 超过1秒
log_warning(f"时间戳跳变: {data[i-1].timestamp} -> {data[i].timestamp}")
# 检查字段完整性
required_fields = ['timestamp', 'symbol', 'price', 'volume']
for record in data:
for field in required_fields:
if field not in record:
log_error(f"缺少字段: {field}")
# 检查数据量级
if len(data) < expected_min_count or len(data) > expected_max_count:
log_warning(f"数据量异常: {len(data)} 条")
注意:数据完整性校验不能只做一次。我建议每天收盘后自动跑一遍,发现问题立即处理。别等到回测跑完了才发现数据有问题,那时间就白花了。
4.3 数据延迟与异常检测
数据延迟,是量化交易的头号杀手。你想想,你的策略比别人慢100毫秒,可能就错过了一波行情。我见过最夸张的一次,某数据源延迟了整整3秒,团队还浑然不知,结果当天亏损了200万。
延迟检测,我一般从两个维度入手:
- 绝对延迟:数据到达时间与交易所撮合时间的差值。这个需要和交易所的时钟同步。我建议用 NTP 协议,精度能到毫秒级。
- 相对延迟:不同数据源之间的时间差。比如,你同时接了 A 和 B 两个数据源,如果 A 比 B 慢了50毫秒,那就要查原因了。
异常检测,说白了就是找「不正常的点」。我常用的方法:
- 价格突变检测:如果某笔交易的价格比前一笔涨了10%以上,那大概率是异常数据。比如,某股票平时波动在1%以内,突然出现一笔涨了20%的成交,那可能是数据错误。
- 成交量异常检测:某只股票平时每分钟成交1000手,突然某分钟成交了10万手,那肯定有问题。可能是数据重复,也可能是撮合错误。
- 买卖盘口异常:如果买一价高于卖一价,那就是「倒挂」了。这种情况在正常市场里极少出现,一旦出现,基本可以判定数据异常。
核心原则:数据延迟和异常检测,必须做到实时。我建议在交易系统里嵌入一个独立的监控模块,每秒检查一次数据质量。发现问题立即切换备用数据源,或者暂停交易。
4.4 知识体系框架
下面这张图,是我自己总结的数据源合规验证的核心逻辑。你看一眼,基本就明白整个流程了。
4.5 实战中的避坑指南
最后,分享几个我踩过的坑:
- 别信「免费数据」:我曾经用过一个免费数据源,回测时表现完美,实盘时发现数据延迟了2秒。后来一查,对方是从另一个数据源转发的,中间多了好几层。免费的东西,往往最贵。
- 多数据源交叉验证:我建议至少接两个独立的数据源。一个做主数据,一个做备份。每天对比两者的差异,超过阈值就报警。这样能发现很多隐藏问题。
- 日志记录要详细:每次数据校验的结果,都要记录到日志里。出了问题,能快速定位。我习惯用 JSON 格式,方便后续分析。
我的习惯:每周一早上,我会花15分钟看一遍上周的数据质量报告。别小看这15分钟,它能帮你发现很多趋势性问题。比如,某个数据源最近延迟越来越大,那就要考虑换掉了。
数据源合规验证,听起来琐碎,但它是量化交易的基石。地基不稳,楼盖得再高也没用。嗯,今天就聊到这儿,希望对你有帮助。