关于跨周期情况下数组被循环赋值的问题

我在跨周期找形态的时候,想寻找顶底分型。我是通过数组弄的,用数组记录每个满足情况的分型的高低点,再去比较分型的高低。但这里遇到个问题。onbar里,每根bar程序运行一次,就导致小周期运行的时候,我的大周期数组被循环赋值。最后,大周期一个周期内,比如在一天之内,小周期运行了10遍,就把我数组里的数全部赋值成了同一个数。我已经设置了分图层运行(range),但还是解决不掉range[1:1]里的数组在每个小周期上都运行的问题 OnBar(ArrayRef<Integer> indexs) { range[0:0] { If( (c[2]>c[1] and c>c[1])) { for i = 0 to 3 { difenxing_arr[i] = difenxing_arr[i + 1]; } difenxing_arr[4]=data0.c[1]; } If(c[2]<c[1] and c<c[1]) { for i = 0 to 3 { dingfenxing_arr[i] = dingfenxing_arr[i + 1]; } dingfenxing_arr[4]=data0.c[1]; } } /////////////////////////////////////////////////// range[1:1] { If( (c[2]>c[1] and c>c[1])) { for i = 0 to 3 { upper_difenxing_arr[i] = upper_difenxing_arr[i + 1]; } upper_difenxing_arr[4]=data1.c[1]; } If(c[2]<c[1] and c<c[1]) { for i = 0 to 3 { upper_dingfenxing_arr[i] = upper_dingfenxing_arr[i + 1]; } upper_dingfenxing_arr[4]=data1.c[1]; } }请老师帮我看下如何解决

如果你的数组是global,每次驱动后保证不会清空,那其实可以试试用驱动参数indexes来限定一下,只有某个图层驱动才执行对应的代码驱动参数可以看看零基础里关于行情驱动onbar的介绍说明,简单来说就是这个indexes里存放了本次参与行情更新驱动的图层编号

回复:谢谢老师,经过修改可以用了。但还有个未来函数的问题。修订后的代码如下: OnBar(ArrayRef<Integer> indexs) { if(GetArraySize(indexs)==2) { Range[1:1] { If( (c[2]>c[1] and c>c[1])) { for i = 0 to 3 { upper_difenxing_arr[i] = upper_difenxing_arr[i + 1]; } upper_difenxing_arr[4]=c[1]; } If(c[2]<c[1] and c<c[1]) { for i = 0 to 3 { upper_dingfenxing_arr[i] = upper_dingfenxing_arr[i + 1]; } upper_dingfenxing_arr[4]=c[1]; } } } if(GetArraySize(indexs)==1) { If( (c[2]>c[1] and c>c[1])) { for i = 0 to 3 { difenxing_arr[i] = difenxing_arr[i + 1]; } difenxing_arr[4]=c[1]; } If(c[2]<c[1] and c<c[1]) { for i = 0 to 3 { dingfenxing_arr[i] = dingfenxing_arr[i + 1]; } dingfenxing_arr[4]=c[1]; } 但我发现这里有个未来函数的问题,比如index[0]是5min,index[1]是一天,我去定义大级别底分型的时候,其实当天的bar还没走完。但在回测中,当天的bar是在当晚00:00分生成的。有没有办法通过设置,让当天bar对齐15:00,这样避免了未来函数,回测也更准确。

回复:看不懂什么意思,日线bar不是当晚00:00生成的,你是怎么得出这个结论的历史bar的驱动是按k线一根一根走的,如果你是5min和1日,那么当天每一根5min都要一根一根走过去,对应的日线bar一直是同一根