一直想在vnpy上使用指数行情进行期货映射并交易主力合约,但CTPapi一直不提供指数行情合成服务,买服务商的实时数据又觉得太贵,就萌生了自己合成指数行情的想法。通过修改cpp文件及ctp_gateway,在c++层面实现了商品期货指数实时合成及推送,并可以根据持仓量自动判断该品种的主力合约的功能。
有感兴趣的可以私信或QQ联系,但因开发不易,使用需要收取一定的费用,望理解。

具体功能说明

  • 指数代码:指数代码统一用品种代码+"0000"表示,品种代码不同交易所的大小写不一致,具体以vnpy查询到的品种为主。
  • 主力合约:满足计算条件后,以前一日真实期货合约的持仓量作为判断条件,同时要求最大持仓量>次大持仓量*1.01;订阅指数时,每日仅计算一次
  • 指数订阅:在cpp层面上,并非订阅全市场tick数据,而是根据传入的指数品种,针对性订阅该品种对应的真实合约行情,提升性能
  • 计算条件:在所有真实合约的tick数据都获取到之后开始计算,如果某价格不存在则该品种的该价格不纳入计算
  • 驱动规则:满足计算条件后,以接收到主力合约tick行情作为驱动,计算加权价格及累加字段
  • 加权规则:以前一日真实期货合约的持仓量为权重,加权计算所有真实合约的对应价格
  • 加权计算:tick字段的当前价、今开、今高、今低、买1价、卖1价
  • 累加计算:当前持仓量、成交量、成交额、买1量、卖1量
  • 推送规则:从vnpy订阅指数时,cpp部分订阅该品种的全部合约,当满足驱动规则后,仅把指数合成后的tick推送回vnpy,其余品种不推送。同时,不影响真实合约的订阅和推送功能。

性能测试

使用1核2G的云服务器进行性能测试,订阅所有品种,共计79个合约,无性能瓶颈。因python版本的界面性能问题,同时推送70+的品种到界面,部分品种会又一点延迟,但并非cpp的延迟,详见下图。

description