2、数据源获取:国内主流期货数据源介绍(CTP、飞马、易盛)

做量化交易,第一步就是搞定数据。没有数据,再牛的策略也是空中楼阁。

国内期货市场的数据源,说白了就那么几家。我这些年折腾下来,接触最多的就是CTP、飞马和易盛。这三家各有各的脾气,今天咱们就好好聊聊。

2.1 CTP(综合交易平台)—— 市场占有率最高

CTP是上海期货信息技术有限公司开发的。国内大部分期货公司都用它。我个人习惯把它叫做「行业标配」。

为什么这么说?你想想看,CTP的接口是开放的,文档也相对齐全。很多第三方交易软件,比如文华、交易开拓者,底层对接的都是CTP。

核心特点:

  • 支持国内四大期货交易所(上期所、郑商所、大商所、中金所)
  • 提供Tick级行情和交易接口
  • 采用「交易前置 + 行情前置」的架构
  • 数据传输采用FIX协议简化版

我在项目中遇到过一个问题:CTP的行情推送频率是500毫秒一次。也就是说,每秒钟最多推送2笔Tick数据。对于高频交易来说,这个频率其实有点低。但大多数CTA策略,这个频率完全够用。

避坑指南:

我曾经在对接CTP时,忽略了「交易日」这个字段。结果回测数据里混入了隔夜数据,导致策略参数全部偏移。嗯,这里要注意:CTP的行情数据里,每个Tick都带有一个TradingDay字段,一定要用它来过滤数据。

2.2 飞马(Femas)—— 速度优先

飞马是盛立科技的产品。如果你做高频交易,飞马可能是更好的选择。

为什么?因为飞马的行情推送频率可以做到100毫秒一次。比CTP快了5倍。说白了,就是更「细腻」。

对比项 CTP 飞马
行情推送频率 500ms 100ms
交易延迟 约5ms 约1ms
支持的交易所 四大交易所 上期所、中金所为主
接口复杂度 中等 较高

飞马的接口设计更底层。你需要自己处理更多的细节,比如会话管理、心跳维护。我刚开始用飞马时,光心跳超时的问题就折腾了两天。后来发现是防火墙把UDP包给拦截了。

注意:

飞马的行情数据是UDP组播方式传输的。这意味着你的服务器必须支持组播,而且网络环境要稳定。我曾经在云服务器上部署飞马客户端,结果发现云厂商默认禁用了组播。折腾了半天才搞定。

2.3 易盛(Esunny)—— 境外期货首选

易盛是郑州易盛信息技术有限公司的产品。它最大的特点是支持境外期货交易所。

如果你做内外盘套利,易盛几乎是唯一的选择。它支持CME、ICE、LME等境外交易所。我有个朋友做原油跨市场套利,用的就是易盛。

易盛的接口风格和CTP有点像。但有几个关键区别:

  • 行情数据是压缩传输的,需要解压
  • 交易指令支持更多类型(比如冰山订单)
  • 账户体系更复杂(支持子账户)

我的建议:

如果你是新手,先从CTP入手。等熟悉了行情对接的流程,再考虑飞马或易盛。一口吃不成胖子,做量化也一样。

2.4 数据订阅与行情接口对接

搞清楚了数据源,接下来就是怎么把数据「拿」到手。

行情接口对接,说白了就是三步:

  1. 建立连接:登录行情服务器,验证身份
  2. 订阅合约:告诉服务器你要哪些品种的数据
  3. 接收数据:处理推送过来的Tick数据

下面是一个CTP行情订阅的简化示例:

// C++ 伪代码示例
// 1. 创建行情实例
CThostFtdcMdApi* pMdApi = CThostFtdcMdApi::CreateFtdcMdApi();

// 2. 注册回调
pMdApi->RegisterSpi(new CMdSpi());

// 3. 连接前置机
pMdApi->RegisterFront("tcp://180.168.146.187:10010");
pMdApi->Init();

// 4. 登录(在OnFrontConnected回调中)
CThostFtdcReqUserLoginField loginReq;
strcpy(loginReq.BrokerID, "9999");
strcpy(loginReq.UserID, "your_user_id");
strcpy(loginReq.Password, "your_password");
pMdApi->ReqUserLogin(&loginReq, 0);

// 5. 订阅合约(在OnRspUserLogin回调中)
char* instruments[] = {"rb2401", "cu2401"};
pMdApi->SubscribeMarketData(instruments, 2);

这段代码看着简单,但实际跑起来坑不少。我遇到过最典型的问题:

  • 登录超时:网络延迟导致登录请求没发出去
  • 订阅失败:合约代码写错了(比如大小写问题)
  • 数据断流:行情服务器重启,需要重新订阅

经验之谈:

我建议在代码里加一个「心跳检测」机制。比如每10秒检查一次,如果超过30秒没收到行情数据,就自动重连。这个机制救过我很多次。

2.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个「地图」,方便以后查阅。

国内期货数据源知识体系 数据源 CTP(上期技术) 飞马(盛立科技) 易盛(郑商所) 行情接口对接核心流程 ① 建立连接 ② 订阅合约 ③ 接收数据 ⚠ 常见坑点:登录超时、订阅失败、数据断流、心跳维护

这张图把数据源和对接流程的关系讲清楚了。你以后做数据清洗时,可以对照着这张图,看看自己卡在哪一步。

最后说一句:

数据源的选择,没有绝对的好坏。关键看你的策略需求。做中低频,CTP够用。做高频,飞马更合适。做内外盘,易盛是首选。别盲目追求「最快」或「最全」,适合的才是最好的。

专注资料整理