商品期货高频交易如何突破行情Tick接收的限制

栏目: 数据库 · 发布时间: 5年前

内容简介:原帖地址:在商品期货高频交易策略中, Tick行情的接收速度对策略的盈利结果有着决定性的影响但市面上大多数交易框架,都是采用回调模式的机制, onBar/onTick, Tick不漏掉就不错了, 为什么呢

原帖地址: https://www.fmz.com/bbs-topic/1184

在商品期货高频交易策略中, Tick行情的接收速度对策略的盈利结果有着决定性的影响

但市面上大多数交易框架,都是采用回调模式的机制, onBar/onTick, Tick不漏掉就不错了, 为什么呢

因为onBar/onTick函数里面,你要处理一整遍代码逻辑,很浪费时间, 不管你愿不愿意,你的策略逻辑必须被打断,必须采用状态机的模式,比如

var state = STATE_IDLE;
function onTick() {
  if (state == STATE_IDLE) {
    // do something...
  } else if (state == ....) {
    // do something
  }
}

BotVS没有采用这种落后的回调机制, 而是采用了不打断策略逻辑的main函数入口机制, 让用户可以更自然的控制策略流程,

用C++与Golang做为稳定的策略底层,策略上层用Javascript/Python处理逻辑问题, 不要说脚本语言速度慢,

除非你用它来做神经网络训练, 就算用神经网络训练, 加入Jit热编译后,他在任何场合都够用的了, Chrome秒IE十条街就是例子.

结合事件触发机制,同样的也能使策略在第一时间最快的速度处理行情, 入门级的策略这里就不再写了, 就以期货高频Tick的合成来说,

比如我们连接一个期货公司, 只能收到这个期货公司的行情, 我们接收行情的速度跟质量也跟自己的网络有关系,

跟期货公司前置机的负载也有关系,那么,怎么样才能做到更快的获取更准确的期货Tick数据呢。

在BotVS的策略模型下,你很容易就能操作N家不同期货公司的账户,并把他们的行情,融合处理,以最快的速度下单,

正常情况下,我们最多可以从期货公司拿到两个Tick每秒, 但通过融合行情的技术,以MA801为例,我们可以拿到最多一秒6次不重复的Tick

商品期货高频交易如何突破行情Tick接收的限制

ad8d05fd9ee8d07520da2b1c54bf2472f8faae0f.jpg

废话不多说,直接上代码(此代码只能实盘,不能回测, 如果您不用BotVS可以只参考原理):

实盘添加交易所时,可以添加N个期货公司,进行行情的并发融合处理. 这里暂时添加两个, 演示说明:

代码如下:

function main() {
    Log("准备连接交易所并订阅行情")
    // Step 1: 全部期货前置机都开始订阅品种
    _.each(exchanges, function(e) {
        // 等待连接上交易所, 是的, 策略是 365 天不间断运行的, 休盘了也可以运行, 而且不是事件回调的逻辑
        while (!e.IO("status")) Sleep(1000);
        // 利用_C重试函数排除网络错误, 刚刚连上交易所就订阅行情, 可能会出现CTP未准备好的错误
        _C(e.SetContractType, "MA801")
        // 切换行情接收模式为立即返回模式而非事件触发模式, 可参考API文档
        e.IO("mode", 0)
    })
    Log("开始融合数据...")
    // Step 2: 重要的地方开始了
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        // 任何一个交易所有tick事件发生时就返回
        var ret = exchange.IO("wait_any")
        // 合适的时间重置Volume
        if (ret.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }
        // 定位到发生事件的交易所
        var e = exchanges[ret.Index]
        // 获取行情, 之前切换过事件模式为立即返回, 所以这里返回的是刚更新的行情, 而且GetTicker不会失败
        // 只显示成交量递增的Tick, 实际过程,不用比较,只用处理就可以了.
        var ticker = e.GetTicker()
        if (ticker.Volume >= preVolume) {
            Log(ret, ticker.Last, ticker.Volume)
            preVolume = ticker.Volume
        }
    }
}

效果如下:

商品期货高频交易如何突破行情Tick接收的限制

39f988517ea29a3dc49af044da3e7cc62f75948a.jpg

可以看到21:24:44秒的时候第一个期货公司的数据比第二个先到, 添加两个期货公司就看出来效果了,如果添加5个以上期货公司一起融合

那么你基本上没有漏Tick的可能, 如果用来开发高频交易策略,你已经解决了很重要也是决定性的一步,Tick接收的速度以及稳定可靠性.

FMZ是专门为对策略的稳定性以及速度有挑剔级别的要求的开发者打造的一个平台. CTP低层协议技术自主研发, 可以在Linux/Windows/Mac/ARM单片机, 甚至手机下运行, 下单速度极快. 对行情反应速度快, 是做高频策略的不二之选.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

时间的朋友2018

时间的朋友2018

罗振宇 / 中信出版集团 / 2019-1

2018年,有点不一样。 从年头到现在,各种信息扑面而来。不管你怎么研判这些信息的深意,有一点是有共识的:2018,我们站在了一个时代的门槛上,陌生,崭新。就像一个少年长大了,有些艰困必须承当,有些道路只能独行。 用经济学家的话说,2018年,我们面对的是一次巨大的“不确定性”。 所谓“不确定性”,就是无法用过去的经验判断未来事情发生的概率。所以,此时轻言乐观、悲观,都没有什么意......一起来看看 《时间的朋友2018》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器