这是onbar事件代码:
for i=BarCount()-1 DownTo 0
{
print(text(date[i]));
if(Date==20200915 and i==0)
buy(1);
if(Date==20200916 and i==0)
sell(1);
if(Date==20200917 and i==0)
buy(1);
if(Date==20200918 and i==0)
sell(1);
}
运行结果:
把print一行注释掉:
//print(text(date[i]));
新的运行结果:
只要访问一下date[i],low[i]之类的回溯数据,交易指令、marketposition等全都乱了,为什么?
这是因为TB的机制中会对回溯需要的最大bar数进行判断,如果当前bar数不足时,产生的交易信号会被抹掉,这样可以确保交易信号的准确。举个例子,假如策略使用20周期均线,那K线根数不足20根时,所产生的交易信号都会抹掉,因为K线都没有20根,计算出来的均线也没意义,因此产生的交易信号肯定也不能用。
现在再看您的公式出现的问题,就不难理解了。print(text(date[i])); 这句,会让系统认为,公式需要回溯的最大BAR数是BarCount-1,那这样什么信号也产生不了,因为K线根数永远都是不足的