请问,如何在BAR数据产生空值的时候,跳过这根BAR不执行策略?
如下图一和图二:
图一和图二都是一个跨周期策略(大周期1分钟,小周期1秒钟)的1秒钟小周期。图一光标对应的时间是112557,图二光标对应的是122603,中间有一个空值BAR。之前留贴问过,之所以会产生一个空值BAR,是因为跨周期策略要强制大周期和小周期时间对齐,即使小周期没有数据,也要留一个空值BAR。 https://old.tbquant.net/forumDetail?cur=tbquan&id=13762
但因为我的策略在运行到这个空值BAR的时候,会产生奇怪的报单(类似于信号闪烁这种),原因很难排查。除了这种空值产生报单错误外,其它交易均没信号闪烁,因此可以判断代码里不存在常规意外下的那种信号闪烁BUG。
因此,有没有办法让策略在碰到这种BAR空值的情况下,跳过这根BAR,或者让策略在这种情况下不运行?可以用什么指标来过滤?
谢谢
也正是因为1秒线经常因为没有成交量就省略了画线,所以下面1分钟图的间隔,看起来有大有小。这就是因为1分钟只画了1根,而1秒线有成交量才画导致的
不是您那个意思。我上图跟您解释下。我说的并集的意思是,本来1分钟对应了60个1秒,所以正常来讲应该画60个变化的1分钟图来和1秒图对应。也就是说1秒和1分钟叠加后的并集,就是60个一一对应的关系图。但由于1分钟画那么多,就看不出本来的走势了,所以我们系统只在1分钟的第一个1秒画了一个K线。而你看到的11:26分1秒图的空白,是因为这个1秒图在这个时刻没有成交量,所以就没有画K线,导致看起来像个空白。但并不是所有的第一个1秒都是没成交量的,图中左边框出来的就是有成交量的1秒线。我说的意思,您看懂了吗?
1、你好,我看得明白,我本来的理解就是这样啊。最早发贴的时候我已经表述了我对这个空值的理解,李可能我之前的表述看起来不清楚,但就是你说的这个意思:
2、如果上述这个理解没问题。那接下来的问题就是这个1秒图空值(或者叫省略画线)其实是会对策略产生影响的,或者说是BUG。这个BUG会产生奇怪的报单,连PRINT都PRINT不出来是什么原因。所以我就想干脆试着跳过去,过滤掉算了。那么怎么样才能过滤呢?
你说用成交量是否大于0来判断是不行的,为什么呢?你上面不是说这个省略画线就是因为没有成交量的原因吗?
3、如果不能用成交量是否大于0来判断 ,还能用什么办法呢?
谢谢
OnBar(ArrayRef<Integer> indexs)
{
Integer i;
for i = 0 to GetArraySize(indexs)-1
{
If(indexs[i] == 0) //假定您的1秒是Data0
{
//这里写您的处理代码
}
}
}
@hyqh901097026
您好,我实际操作,复刻了一下您的应用场景,实际上那个不是空bar,而是1秒周期叠加1分钟周期产生的K线并集。通过Vol>0测试来看达不到想要的效果,只有通过indexs数组元素判断可以。但您说您1秒图只是报单,不会影响1分钟的信号,之前除了这种空值,其它都没信号闪烁,这个我还是没想明白是什么原理。
也就是说,您要过滤这个所谓的空白bar是能做到的,要通过indexs数组元素来判断,通过VOL>0是不行的。但我担心的就是通过Indexs数组判断跳过1秒图的这次执行,对您的信号是否会造成闪烁。因为,我对您说的1分钟产生信号,1秒图发单,还没完全弄清楚。您的发单是用BuySell还是函数,如果是Buysell那信号不就在1秒图吗?跳过一次运行也会造成信号闪烁的,所以,这个问题您要考虑下
你好,谢谢回复。
能再进一步解释一下,什么是1秒周期叠加1分钟周期产生的K线并集吗?这个我不理解,所以就没法理解你接下去说的用indexs数组元素的判断方法。
我的发单都是BUYSELL,没有用A函数。
我对您说的1分钟产生信号,1秒图发单,还没完全弄清楚。您的发单是用BuySell还是函数,如果是Buysell那信号不就在1秒图吗?跳过一次运行也会造成信号闪烁的,所以,这个问题您要考虑下--------我的意思是,空值那个BAR(或者按你说的并集那个BAR)本来按逻辑来说就没有发单信号(回测报告和图表上都没有信号,而是因为这个特殊的BAR产生了一笔奇怪的交易(实盘报单了)。所以跳过以后,我的理解是应该不会有信号闪烁
你说的K线并集,是不是说它是多个1秒钟并在一起的BAR呢?
比如说,有5秒钟没有数据,系统就把这5秒钟拼成一个BAR,但这个BAR没有价格也没有成交量,是指这个意思吗?
我没研究过这种非连续的情况,我想到的是在进行交易的代码条件中加入vol > 0 即当满足条件加上bar上出现成交量后才进行交易,不知道合不合理。
或者你当满足Time == (lastDateTime - date -0.000001),这样就能跳过空bar了。不过这是理论上看起来可行,不知道实际怎么样