RT
官方文档
中有这么一句"订阅tick行情,……,可以通过GetTick获取行情快照。该函数可用来获取非当前数据源的最新行情快照,若不订阅,获取的是过期行情。"
正是因为这一句话,让我不敢单独使用GetTick了,因为怕获取的是过期行情。但为了性能,又确实不想多余订阅。
所以想找官方确认一下:在没有SubScribeTick的前提下,单独用GetTick,能够确保获取到的是最新行情么?
你对你当前的品种获取就是最新的。。除非你获取别的品种
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
SubscribeTick("rb2505.SHFE");
SubscribeTick("rb2504.SHFE");
SubscribeTick("rb2506.SHFE");
}
OnTick(TickRef evtTick)
{
print("evtt="+(evtTick.symbol));
print("ttt="+text(evtTick.dateTime));
print("---------------------------");
}
//------------------------------------------------------------------------
// 编译版本 2025/3/6 151627
// 版权所有 wangkaiming
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------
简单一试就知道了哦
我想强调一下,不管你用没用subcribetick函数,你都是可以用gettick来获取 当前图层合约的最新数据的。用subscribetick解决的需求是想获取非图层合约的tick数据,
我解释一下,不知道能不能看明白
首先,在没有任何订阅的情况下,盘中onbar是tick驱动的,你gettick写在onbar里
,是可以获取当前图层合约的最新tick的。
但是有些用户说,那我如果我想获取其他合约的数据怎么办呢?
那就只能用subcribebar来添加图层数据,然后获取。
用户又说了,我需要的合约数据很多啊,全都加载太多了,而且我不需要历史数据,我只要最新的tick数据,加载历史数据很浪费啊。
过去,碰到这个问题就没办法解决了,因为不订阅合约就获取不到合约数据。
为了解决这个问题,工程师就推出了subscribetick这个函数。这个函数也是订阅数据,但是不订阅历史数据。有了这个函数,使用gettick函数,里面就可以填写已订阅的合约数据来获取最新的tick数据了。
原来如此!谢谢!
懂了50%。
还有50%的疑问——如果我不新增图层,可以在0图层的情况下,先在OnInit中subscribetick、再在哪里调用getTick么?
举例:
无图表交易、0图层。假设要在6个品种上作交易,于是OnInit中subscribetick了这6个品种,嗯,现在还剩下一个关键问题,因为是0图层(除了creatTimer并Ontimer之外),有什么办法(或者事件域)可以用来触发GetTick么?Onbar与onbaropen我试了好像没反应?ontick可以么?(顺便官方文档中貌似没有ontick的介绍网页)
没有图层就没办法驱动事件域,就没有接下来的gettick操作了