【问题描述】
在交易时段,最后一根 bar 上,OnBar 中,用 BarStatus==2 进行判断,然后下单,发现实盘中会有信号闪烁的情况。
经跟踪排查,发现 OnBar 中 BarStatus 会不定时出现值为 1 的情况,似乎加载的公式越多,代码逻辑越复杂,出现频率越高。
问在线客服,客服说我对 BarStatus 理解有误,不能这么写,让我到论坛询问。
那么问题来了,请问: BarStatus==2 是否能作为实盘交易判断条件?
【测试方式】
交易时,当 BarStatus 值不为 2 时,控制台输出当前 bar索引,时间和 BarStatus 值。
测试代码如下:
OnBar(ArrayRef<Integer> indexs)
{
If(BarStatus!=2)
Print(Text(CurrentBar)+","+TimeToString(CurrentTime,True)+",BarStatus="+text(BarStatus));
}
【测试截图】
图中已清除加载历史数据时值为1的输出。
如图控制台输出,10s 一根bar,在 14:20:22 和 14:24:22 秒各出现值为1的情况,之后直到收盘值都为2。
旗舰版是@kyover描述的那样,tbquant已经不在每个bar从2变成1了,但tbquant还有一个问题,如果有2个tick同时到,分别属于2个bar,上个bar会出现1,不过,这个问题会在下个版本完善,不会出现1了。
现在解决你的问题,可以换个函数QuoteStatus表示是不是实时行情触发的。参考文档http://www.tbquant.net/dist/index.html#/?navigate=&cid=1949&position=0
谢谢你的回答,这个回答很专业。
感觉 TB 不适合编程小白,很容易被过时的文档和不专业的客服带坑里去。
盘中的每根bar都是由实时到历史转变过来的,所以barstatus都会经历从2变成1的过程
你如果用的是buysell的命令,那么bar是盘中状态,会出现信号,一旦新bar出现这根老bar变成历史bar,条件不就不满足了么