如何突破行情Tick接收的限制.-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

如何突破行情Tick接收的限制.

如何突破行情Tick接收的限制.

发布:littleDreamX | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

在商品期货高频交易策略中,Tick行情的接收速度对策略的盈利结果有着决定性的影响但市面上大多数交易框架,都是采用回调模式的机制,onBar/onTick,Tick不漏掉就不错了,为什么呢?因为onBar/onTick函数里面,你要处理一 ...
扫码加入金融交流群


在商品期货高频交易策略中, Tick行情的接收速度对策略的盈利结果有着决定性的影响但市面上大多数交易框架,都是采用回调模式的机制, onBar/onTick, Tick不漏掉就不错了, 为什么呢?因为onBar/onTick函数里面,你要处理一整遍代码逻辑,很浪费时间, 不管你愿不愿意,你的策略逻辑必须被打断,必须采用状态机的模式,比如:

  1. var state = STATE_IDLE;
  2. function onTick() {
  3. if (state == STATE_IDLE) {
  4. // do something...
  5. } else if (state == ....) {
  6. // do something
  7. }
  8. }
复制代码

BotVS没有采用这种落后的回调机制, 而是采用了不打断策略逻辑的main函数入口机制, 让用户可以更自然的控制策略流程,
用C++与Golang做为稳定的策略低层,策略上层用Javascript/Python处理逻辑问题, 不要说脚本语言速度慢,
除非你用它来做神经网络训练, 就算用神经网络训练, 加入Jit热编译后,他在任何场合都够用的了, Chrome秒IE十条街就是例子.
结合事件触发机制,同样的也能使策略在第一时间最快的速度处理行情, 入门级的策略这里就不再写了, 就以期货高频Tick的合成来说,
比如我们连接一个期货公司, 只能收到这个期货公司的行情, 我们接收行情的速度跟质量也跟自己的网络有关系,
跟期货公司前置机的负载也有关系,那么,怎么样才能做到更快的获取更准确的期货Tick数据呢。

在BotVS的策略模型下,你很容易就能操作N家不同期货公司的账户,并把他们的行情,融合处理,以最快的速度下单,
正常情况下,我们最多可以从期货公司拿到两个Tick每秒, 但通过融合行情的技术,以MA801为例,我们可以拿到最多一秒6次不重复的Tick

图1

https://dn-filebox.qbox.me/ad8d05fd9ee8d07520da2b1c54bf2472f8faae0f.jpg

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

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

https://dn-filebox.qbox.me/44e29e2665f08bac4bd832b3c7fd7cee4c67d57c.jpg

代码如下:


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

效果如下:

https://dn-filebox.qbox.me/39f988517ea29a3dc49af044da3e7cc62f75948a.jpg

可以看到21:24:44秒的时候第一个期货公司的数据比第二个先到, 添加两个期货公司就看出来效果了,如果添加5个以上期货公司一起融合
那么你基本上没有漏Tick的可能, 如果用来开发高频交易策略,你已经解决了很重要也是决定性的一步,Tick接收的速度以及稳定性.

经测试,郑商所的tick 1秒内是可有多个数据的,上期和大商限制在了固定2个。所以郑商所的品种是可以拿到1秒2个以上的tick 数据的。


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-6089873-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。