使用全局bool变量,导致出现“信号闪烁”的问题求解。

策略单元的周期是tick,我想用一个全局bool变量,isSecondBreakEntry来避免重复开仓。但是不知道什么原因,开仓时总是提示 信号闪烁,但只要去掉 and !isSecondBreakEntry 这个条件就不报信号闪烁,推测是在buy之后,不该改变 isSecondBreakEntry的值,但是我应该在什么时候改变这个开仓判断条件的值,才不报信号闪烁的错误呢? 请老师指点一下,谢谢。

附关键代码:

Series<Numeric> tickPrice(0,10);  //当前tick成交价格

Global Bool isSecondBreakEntry(False);


OnBar(ArrayRef<Integer> indexs)

{

   GetTick(tickdata);

   tickPrice = tickdata.last;


   if( MarketPosition == 0

           and tickPrice > afterEntrySignHighest

           and !isSecondBreakEntry)

   {

       tickPrice = tickdata.bidask1.bidP + 1 * minPoint;

       Buy(Lots, tickPrice);

       isSecondBreakEntry = true;

   }


}


多周期策略出现信号闪烁问题。
全局变量跨域使用
全局变量的使用疑问
使用ma均线导致的信号闪烁如何处理
多图层导致的信号闪烁
全局变量的问题。
请教:TB自带的海归系统出现信号闪烁的问题
回测无信号闪烁,实盘中出现信号问题。
bool变量的代码问题
请教定时开平仓出现信号闪烁的问题

IF()块里面的条件内容只要有变化

必然闪烁


所以全局变量不能用在这里

如果是图表函数buy/sell之类的

也不需要用全局变量


底层逻辑已经确保了只交易一次

全局主要用来控制A函数操作账户

👍

补充一点:在tick周期,用MarketPosition == 0这个条件判断似乎不可靠,在下一个tick来的时候,即便前一个tick执行了buy,但MarketPosition此刻的值还是为0,有可能是0.5秒的间隔没反应过来,所以我必须用其它的方式来判断是否已经开仓了。

marketposition本来也不是global类型,它实质上是series类型。

我觉得你在提问前应该先看一下零基础课程把驱动机制,数据类型的特性都学清楚了再问。

你用global作为信号的条件,那当然是会报信号闪烁的...