onbar 跟ontick的驱动频率似乎并不相同

用tbq做了个测试,发现onbar跟ontick的驱动频率实际上并不相同。

如果是活跃的品种,每时每刻都有成交的,那么二者是一致的

但是如果是不活跃品种,onbar的驱动次数要小于ontick

当数据图层(比如data0)不是在tick级别,比如选择10秒或者1分钟的时候,似乎只有在bar数据更新(有成交)时onbar才会被驱动

如果只是买卖盘口价格变动了,但是没有成交,就不会驱动onbar

但是ontick是每秒钟都在驱动的

不太理解背后的逻辑,安理来说onbar也是每个tick更新才对

请教下老师这个问题怎么解释🤔

请问ontick和onbar被触发的频率是一样的吗
Onbar OnTick谁先更新的问题?
关于ONTICK事件的错误
Ontick这个方法是不是空的?
定时器/onbar和ontimer
怎么降低高频交易频率
事件驱动框架建议
希望可以“修复多数据源开盘时间不一致时,onbar多次驱动的问题”
《事件驱动的案例讲解》
ontick用法对吗,为什么没触发,代码已附上

我们并没有发布ontick驱动域

那只是个废案。

你一定要用的话可以自己研究

主要问题是,onbar不是按每个tick驱动,而是有成交了才会驱动

但我看咱在别的帖子的回答,说onbar是按tick更新进行驱动的

似乎跟咱们这个说法有些不一致

你说的那个是onfill

onorder就是按收到tick驱动的。

如果你质疑这个说法,请提出完整的证据证明这个说法是错的。

这里可能表达不清晰,是onbar只有在bar里面有新的成交了才会驱动,不是我自己账户有成交了驱动

我晚点把测试的代码放上来

什么叫onbar只有在bar里面有新的成交?完全听不懂了

Vars
	global Integer n(0);
	global Integer m(0);
	global bool button(true);


	
Events


	OnInit()
	{
			PrintClear;
			subscribetick("ag2604.SHFE");
	}

	OnTick(TickRef evtTick)
	{
			m=m+1;
			print("m:"+text(m));
	}
	


	OnBar(ArrayRef<Integer> indexs)
	{
			if(BarStatus==2 and button) 	//用来确保ontick和onbar同时开始计数,避免历史bar对n的干扰
			{
					n=0;
					button=false;
			}
			n=n+1;
			print("n:"+text(n));
	}
	

例如:

data0加载"au2612.SHFE"这个相对不活跃品种

插入以上代码的公式

按理来说,onbar是按tick更新进行驱动,最终在控制台输出的m和n数值应该一致(或者是固定的差额比如固定差1这样)才对

但是实际结果会发现,只有当bar发生变动时,才会驱动n的计算

最终输出结果会出现m远大于n的情况

实际结果如这个图片,m已经到568了,n才到313

.......

你这个demo只能证明onbar和ontick的驱动源事件是不同的,如何证明onbar在实盘的时候不是按tick驱动?

这个就是实盘运行中测试的

n和m就是对实盘驱动的简化,有驱动才有运行n和m的加1算法

在onbar里面运行的n+1的结果,最终小于ontick运行的m+1结果,不就说明onbar不是每个tick都驱动运算吗

Vars

	global integer n;
	

Defs

	
Events

	OnInit()
	{
			PrintClear;
	}



	OnBar(ArrayRef<Integer> indexs)
	{
			if (time==0.1055)
			{
					n=n+1;
					print("n:"+text(n));
			}
	}

或者,data0加载 au2702.SHFE的1分钟K线,插入以上公式

按500ms一个tick,1分钟应该有120个tick

如果onbar是按tick驱动,

上述代码1分钟之后n应该等于120

但是实际中结果会不到120,只有100出头

你如果真的想测试,很简单,就完整测试一根一分钟k线盘中会驱动多少次,然后再把tick图调出来,数一数有多少tick。

上面的所有所谓的demo,全都有漏洞。之前的只能说明onbar和ontick驱动事件不一样。

第二个demo也没有考虑到,一个合约一分钟的tick只是最多120,并不是一定是120,如果没有成交,交易所就不推送tick,那就是小于120,你凭什么说一分钟一定应该是120跳?你查了这一分钟的tick数有多少根了吗?