商品期货高频交易策略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
}
}
FMZ没有采用这种落后的回调机制, 而是采用了不打断策略逻辑的main函数入口机制, 让用户可以更自然的控制策略流程,
用C++与Golang做为稳定的策略底层,策略上层用Javascript/Python处理逻辑问题, 不要说脚本语言速度慢,
除非你用它来做神经网络训练, 就算用神经网络训练, 加入Jit热编译后,他在任何场合都够用的了, Chrome秒IE十条街就是例子.
结合事件触发机制,同样的也能使策略在第一时间最快的速度处理行情, 入门级的策略这里就不再写了, 就以期货高频Tick的合成来说,
比如我们连接一个期货公司, 只能收到这个期货公司的行情, 我们接收行情的速度跟质量也跟自己的网络有关系,
跟期货公司前置机的负载也有关系,那么,怎么样才能做到更快的获取更准确的期货Tick数据呢。
在FMZ的策略模型下,你很容易就能操作N家不同期货公司的账户,并把他们的行情,融合处理,以最快的速度下单,
正常情况下,我们最多可以从期货公司拿到两个Tick每秒, 但通过融合行情的技术,以MA801为例,我们可以拿到最多一秒6次不重复的Tick。
废话不多说,直接上代码(此代码只能实盘,不能回测, 如果您不用FMZ可以只参考原理):
实盘添加交易所时,可以添加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
}
}
}
效果如下:
可以看到21:24:44秒的时候第一个期货公司的数据比第二个先到, 添加两个期货公司就看出来效果了,如果添加5个以上期货公司一起融合
那么你基本上没有漏Tick的可能, 如果用来开发高频交易策略,你已经解决了很重要也是决定性的一步,Tick接收的速度以及稳定可靠性.
FMZ是专门为对策略的稳定性以及速度有挑剔级别的要求的开发者打造的一个平台. CTP低层协议技术自主研发, 可以在Linux/Windows/Mac/ARM单片机, 甚至手机下运行, 下单速度极快. 对行情反应速度快, 是做高频策略的不二之选.
商品期货高频交易策略Tick框架的更多相关文章
- 高频交易策略之Penny Jump[z]
高频交易策略之Penny Jump 今天假设有一个笨笨的大型机构投资人(共同基金,银行,退休基金....),他想要买进一只股票,但又不想挂市价买进,所以就在市场里面挂了一张要买进的大单.这时候所有市场 ...
- 高频交易策略[z]
Market Order以最高速下市价单(market order)是买方最基本的策略 Looking for Price Discrepancies 这个就是高频统计套利(high frequenc ...
- 金融量化分析【day112】:量化交易策略基本框架
摘要 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕竟就像学游泳,有些东西讲是 ...
- 高频交易策略之Penny Jump
今天假设有一个笨笨的大型机构投资人(共同基金,银行,退休基金....),他想要买进一只股票,但又不想挂市价买进,所以就在市场里面挂了一张要买进的大单.这时候所有市场里面的人都会看的到limit ord ...
- 高频交易[z]
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:袁浩瀚链接:https://www.zhihu.com/question/21789812/answer/22178178来源 ...
- 【海龟汤策略】反趋势交易策略源代码分享(基于BOTVS)
策略介绍: 海龟之汤,简称“龟汤”,是个与海龟交易法则相反的交易策略,它利用了跟势交易(特别是海龟方式)在很多假突破方面的缺陷来获利(把海龟做成汤吃掉).上世纪八十年代早期,有个非常著名的交易员团体— ...
- 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架
年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...
- AMA指标原作者Perry Kaufman 100+套交易策略源码分享
更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 AMA技术指标与原作者 Kaufman 说起 Perry Kaufman 这个名字,不少读者会 ...
- 3. 量化交易策略 - https://github.com/3123958139/blog-3123958139/README.md
3. 量化交易策略 * 输入数据 - 只取最原始可靠的,如 * date * open * high * low * close * volume * 输出数据 - 根据数理统计取权重,把 o, h, ...
随机推荐
- 2018/3/14 Hadoop学习笔记(一)
首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈) Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数 ...
- 新vim配置文件
"******************************************************特殊设置************************************ ...
- Bad Luck Island-CodeForce(dp)
链接:http://codeforces.com/problemset/problem/540/D 题目大意: 这个岛上有三种生物 r石头 s剪刀 p布 求最后只剩一种生物的概率 用dp[i][ ...
- 洛谷 U41572 Portal2
U41572 Portal2 题目背景 某地ENLIGHTENED的XM研究所正在研究Portal的处理法则,想要揭示XM能量的来源以及应用XM能量.ENLIGHTENED的首席科学家Jacks发现其 ...
- 程序猿是如何解决SQLServer占CPU100%的--马非码
http://www.cnblogs.com/marvin/p/ASolutionForSQLServerCauseHighCPU.html
- NA远程
远程网络按照L1分类: 租用专线(Leased Line):一般采用同步串行链路,使用HDLC/PPP封装: 线路交换(Circuit-Switched):一般采用异步串行链路,使用H ...
- bzoj3190【JLOI2013】赛车
3190: [JLOI2013]赛车 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1445 Solved: 454 [Submit][Statu ...
- 『GCD』详解
2. GCD 任务和队列 学习 GCD 之前,先来了解 GCD 中两个核心概念:任务和队列. 任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码.在 GCD 中是放在 block 中的.执 ...
- 工作总结 string数组 排序 string数组 比较
用到 工具类 Array 创建.处理.搜索数组并对数组进行排序 Enumerable 提供一组用于查询实现 System.Collections.Generic.IEnumerable<T ...
- react-color 颜色选择器组件
demo链接:github demo 安装: npm install react-color --save 有一下几种类型组件 <AlphaPicker /> <BlockPicke ...