Nthcon在多图层运行问题

我订阅日线和3分钟周期的数据,在日线运行Nthcon发现数据有问题,比如a=NthCon(hipoint120,1),有一段时间,如在2020/11/28和2020/11/27的数据分别是184,182,间隔2个数,而不是像184,183间隔1个数/bar。而在其它时间如2019/5/24的数据却是间隔1个数-合常规。 还有我订阅把3分钟改成1分钟,好像所有的间隔2个数都消失,我只验证有限数据。 请问这是啥原因,如何解决?注我替身处理了序列数。 证据照片和复现代码如下: Params array<string> mysymbol(["ni888.SHFE"]); Vars Series<Numeric> sma120; Numeric Nth_hi120; Numeric Nth_lo120; Numeric i; Numeric d(2); bool hipoint120; bool lopoint120; Events OnInit() { SubscribeBar(mysymbol[i],"1d",20170101); SubscribeBar(mysymbol[i],"3m",20190801); } OnBarOpen(ArrayRef<Integer> indexs) { for i = 0 to GetArraySize(mysymbol)-1// { if(data[d*i+0].CurrentBar>0) { data[d*i+0].sma120 = data[d*i+0].SAverage(TrueRange,90)/data[d*i+0].XAverage(c,90); data[d*i+0].sma120 = data[d*i+0].SAverage(sma120,30); data[d*i+0].PlotNumeric("TUema120=",sma120[1]*10000*500,c,DarkBrown); data[d*i+0].hipoint120 = data[d*i+0].sma120[1] < data[d*i+0].sma120[2] and data[d*i+0].sma120[2] >= data[d*i+0].sma120[3]; data[d*i+0].lopoint120 = data[d*i+0].sma120[1] > data[d*i+0].sma120[2] and data[d*i+0].sma120[2] <= data[d*i+0].sma120[3]; data[d*i+0].Nth_hi120 = data[d*i+0].NthCon(hipoint120,1);//第一远高点距离当前bar的K线数 data[d*i+0].Nth_lo120 = data[d*i+0].NthCon(lopoint120,1);//第一低点距离K线数 data[d*i+0].PlotNumeric("Nth_hi120=", Nth_hi120,c,green); data[d*i+0].PlotNumeric("Nth_lo120=", Nth_lo120,c,green); } } }

谢谢您的答复,初步验证单品多周期可行,后续将验证稍复杂点的。谢谢!

Params array<string> mysymbol(["ni888.SHFE"]); Vars Series<Numeric> sma120; Numeric Nth_hi120; Numeric Nth_lo120; Numeric i; Numeric d(2); bool hipoint120; bool lopoint120; Events OnInit() { SubscribeBar(mysymbol[i],"1d",20170101); SubscribeBar(mysymbol[i],"3m",20190801); } OnBarOpen(ArrayRef<Integer> indexs) { for i = 0 to GetArraySize(indexs)-1// { if(data[indexs[i]].CurrentBar>0) { data[indexs[i]].sma120 = data[indexs[i]].SAverage(TrueRange,90)/data[indexs[i]].XAverage(c,90); data[indexs[i]].sma120 = data[indexs[i]].SAverage(sma120,30); data[indexs[i]].PlotNumeric("TUema120=",sma120[1]*10000*500,c,DarkBrown); data[indexs[i]].hipoint120 = data[indexs[i]].sma120[1] < data[indexs[i]].sma120[2] and data[indexs[i]].sma120[2] >= data[indexs[i]].sma120[3]; data[indexs[i]].lopoint120 = data[indexs[i]].sma120[1] > data[indexs[i]].sma120[2] and data[indexs[i]].sma120[2] <= data[indexs[i]].sma120[3]; data[indexs[i]].Nth_hi120 = data[indexs[i]].NthCon(hipoint120,1);//第一远高点距离当前bar的K线数 data[indexs[i]].Nth_lo120 = data[indexs[i]].NthCon(lopoint120,1);//第一低点距离K线数 data[indexs[i]].PlotNumeric("Nth_hi120=", Nth_hi120,c,green); data[indexs[i]].PlotNumeric("Nth_lo120=", Nth_lo120,c,green); } } } 改成这样试试 主要原因是onbaropen和onbar的重置机制不一样,onBarOpen事件一定要严格按照indexs参数处理,因为onBarOpen每根Bar只会触发一次,第二次进入函数的时候是不会回退的,不按触发图层处理的话,自己图层触发的执行会和其他图层触发的执行结果都会保存,相当于执行两次

正在整理代码