策略单元的周期是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作为信号的条件,那当然是会报信号闪烁的...