使用全局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; }}

IF()块里面的条件内容只要有变化必然闪烁所以全局变量不能用在这里

回复:如果是图表函数buy/sell之类的也不需要用全局变量底层逻辑已经确保了只交易一次全局主要用来控制A函数操作账户

回复:👍

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

回复:marketposition本来也不是global类型,它实质上是series类型。我觉得你在提问前应该先看一下零基础课程把驱动机制,数据类型的特性都学清楚了再问。你用global作为信号的条件,那当然是会报信号闪烁的...