事件驱动框架建议
2021-11-18 08:55
onbaropen, onbar, onbarclose, 这么多回调函数, 还是做不了高频, 还有未来函数, 信号闪烁等问题
建议用这两个:
ontick: 订单薄回调 (回测可禁用, 毕竟tick数据量太大)
onbar: 历史K线回调 (回测和实盘计算的指标都是历史数据)
ontick就可以计算一些因子, 比如订单薄不平衡, 流动性变化, 深度变化等, 如果能用python计算回传, 甚至可以做机器学习策略.
为什么这么建议? 很简单, tb的onbar搞了三个, 不迷糊么? 实用性也不是很强.
很方便, 要啥有啥, 啥都能做, 连自己写撤单重发, 拆单逻辑都是可行的.
流行的开源平台VNPY就是这个设计, MT5是onTick事件驱动, onTick里可以获取bar数据, 也算是有onbar, ontick的.
你确定你搞懂了tb的事件域么?
请具体说明ontick和onbar这两个驱动机制的驱动条件及返回的数据结构。
引用:ontick: 订单薄回调 请说明订单薄是哪些数据,什么时候驱动
引用:onbar 历史K线回调 回调是什么意思,什么时候驱动
如果没有能力说清楚,可以具体举一个例子来说明
正常来说,onbar,onbaropen,onbarclose属于行情驱动,基本已经囊括了所有的行情驱动需求。
onorder,onposition,onfill属于订单驱动,囊括了所有的订单驱动需求。
如果不够,还有ontimer的定时驱动
不太清楚你说的策略需求无法实现到底是因为缺了驱动域还是你没搞懂各个事件域的用法?
这个人就是不懂装懂
挺有意思的, 我之前参与中国外汇交易中心的回测和实盘系统落地和测试的时候, 他们的系统也是订单薄marketdata和bar分开回调. 现在开始用的MT5, 也全球最流行的外汇交易平台, 用的是onTick, 但是在onTick里面可以用主动API访问Bar数据. 还有目前最流行的开源量化框架之一的VNPY也是onbar, ontick, 我还用它做了大半年的数字货币, 现货跑下来大约翻了3倍, 远超HODL的收益. 您说我不懂装懂, 我看你是井底之蛙吧
说你不懂装懂还不服气,国内交易所没有订单本数据只发切片数据这种常识问题都不知道还扯什么外盘虚拟货币,你也就靠这种杂七杂八的东西唬唬人了
我知道是返回切片数据, 而且巧了我一直还都能拿到.
订单薄(OrderBook): N档, 一般是五档或者十档挂单价量数据;
OnTick(或者OnReceiveMarketData), 订单薄更新时候触发, 返回五档或十档挂单价量数据
OnBar, Bar结束后返回上根Bar的开高收低等数据
回调是一个广泛使用的概念, 不清楚请自查, 反倒事件域是贵司独创的说法
请问:
1. 挂单在对手方或者己方第二档价格 -/+ 2跳怎么写?
2. 计算 (五档量加权Ask平均价 / 五档量加权Bid平均价) 怎么写?
....
1, 2及其类似的用到OrderBooK的需求, 现有的事件驱动能实现?
可是 国内的多档行情都只是展示行情,是无法通过接口调取的,这个您了解过吗?
高频行情确实没有主动访问的api接口, 都是通过websocket订阅的. 新浪财经好像可以订阅, 我一个哥们一直在用, 可能他写了爬虫的代码获取的
另外 回调这个概念我搜索了不少,程序化回调 交易回调,都没搜出来您说的这个概念,不知道您说的这个普遍概念从何而来啊?
事件驱动是软件开发里比较成熟的概念,这个应该不难理解吧。
如果您按您说的这个bar结束的时候返回前一根bar的bar数据,完全可以通过onbarclose结合bar'数据回溯来实现
另外,bar结束这个概念其实在技术上很难实现,因为你很难判断当前这tick数据是不是当前bar的最后一跳。您如果有成熟精妙的判断算法可以启发一下,谢谢
可能是跨语言的称呼不同吧. 之前接触的事件驱动系统基本都是Python平台, 事件触发后, 被调用的函数也就是所谓的回调函数, 和TB的事件域类似
1.事件域与三方的有一点差别,TB的行情事件域是包括历史的,如OnBar是会把历史回放一根一根的走一遍,历史播放完, 再播放实时。
2.您说的其他平台,事件驱动是实时数据,历史数据通过函数获取。
3.二者都可以完成计算,计算思路上有差别。特别对py方面经验的人非常不习惯,他们习惯获取所有数据,再进行矩阵运算,毕竟py计算方面支持比较好。
4.TB在播放过程中,逐步积累数据,逐步完成计算。当然也可以在历史播放完,再统一计算,这个灵活性也是有的。
1. TB的onbar运行方式, VNPY的OnBar也是如此(它也没有主动访问数据的api), 区别只是它不推送盘中bar, 推送的都是已经完成的bar(不过它确定Bar跑完的算法有一点问题)
确定Bar结束确实是难题, 我没解决这个的本事, 自己做没太在意这个, 公司交易是同时订阅3个以上数据源确保无误
你的这个需求,并不是事件驱动的问题,而是现在就不提供多档行情数据。抛开现有的数据问题,如果你只使用现有的一行行情,完全是可以做到的。
顺便说一句,如果只是想获取多档行情里的价格,只要用一档的价格依次逐跳累计上去就行了,只不过获取不了盘口委托量而已。看你的策略,好像也不用考虑这个盘口量,我觉得就用onbar就能实现。你确实对tb的事件域机制不太了解。
TB的onbar在每个历史bar上运行一次, 在实时行情上是每次行情变化 (或者说交易所返回一次数据) 运行一次onbar, 直到这个bar走完变成历史bar, 我记得文档里大概是这个意思.
用最优档逐级加1跳, 是一种拟合的方法, 流动性变化比较大的时候差距可能就很大. 至于挂单量, 很多指标都会用到. 您有兴趣可以关注orderbook imbalance类的指标.
我自己写代码只接过外盘部分资产还有转债, 股票的挂单数据, 如果交易所或者券商不给推送, 基本都是爬虫获取, 拿这些数据基本上也是研究为主, 或者写一些拆单方案. 没有接过CTP, 如果商品数据不支持, 那确实没办法. 我之前的言语可能过激, 并不是想和官方杠什么, 只是在自己的认知里觉得有比较全能的方案, 给TB提个建议, 贵司觉得有用就参考, 没用也不必顾及. 感谢各位回复.