关于一个跨周期的新均线交叉的显示问题

刘风老师有一期《跨周期内容专题答疑20211111》,是把data1的5周和10周线写入一个一维数组,然后用data0的1分钟小周期的K线high或low替换最新一个数组值,计算这个数组的均线,显示在data0上。但我照写后,data0写入的均线一直不对,请教下老师错误在哪里,我感觉数组写入错误,均线是错的。具体代码、自定义函数和K线图如下:Params Numeric length1(5); Numeric length2(10); Numeric lots(1);Vars Numeric ma1; Numeric ma2; Array<Numeric> myarray1; //对应ma1数值 Array<Numeric> myarray2; //对应ma2数值 Numeric price; Bool booll; Bool boolshort;Events OnInit() { SubscribeBar(data0.Symbol,"5m",data0.BeginDateTime); SubscribeBar(data0.Symbol,"10m",data0.BeginDateTime); } OnBar(ArrayRef<Integer> indexs) { Range[1:2] { ma1 = Average(close,length1); ma2 = Average(close,length2); PlotNumeric("ma1",ma1); PlotNumeric("ma2",ma2); } data1.Seriestoarray(data1.close,length1,data0.myarray1); data1.Seriestoarray(data2.close,length2,data0.myarray2); If(data1.ma1 > data1.ma2) { data0.myarray1[0] = low; data0.myarray2[0] = low; } If(data1.ma1 < data1.ma2) { data0.myarray1[0] = high; data0.myarray2[0] = high; } ma1 = AverageArray(myarray1); ma2 = AverageArray(myarray2); PlotNumeric("ma1",ma1); PlotNumeric("ma2",ma2); booll = CrossOver(data0.ma1,data0.ma2); boolshort = CrossUnder(data0.ma1,data0.ma2); //SummationArray(myarray2) - myarray2[0] + price = 2*(SummationArray(myarray1)-myarray1[0]+price) price = SummationArray(myarray2) - myarray2[0] - 2*(Summationarray(myarray1)-myarray1[0]); If(MarketPosition<>1 and booll) { buy(lots,price); } If(MarketPosition<>-1 and boolshort) { SellShort(lots,price); } } 其中Seriestoarray函数如下:Params series<Numeric> price(1);//close价 Numeric length(10);//默认往前回溯10个 ArrayRef<Numeric> result;//定义一个数组Begin Numeric i; for i = 0 to length-1;//定义个循环变量 { result[i] = price[i]; } Return True; //开始建的数值型函数,返回值0,错了EndK线图如下:两条均线应该一个把某close除了5,一个除了10,成两条直线,因为数值跨度大,把1分钟k线压缩在最上面非常感谢,困扰几天了!

因为三年前的课程内容了,没有找到当时的示例代码,所以直接复制你给的代码,没想到你的代码里面隐藏了深坑。使用你的代码确实会碰到非常多问题,我一度以为是研发人员做了机制更新没有通知我。后来我几乎每行代码都做了单步调试,终于发现了问题:你代码抄错了两个地方!!!内置函数seriestoarray,这里是没有分号的!直接导致转数组失败!其次这里的前缀是data1!直播的时候这里我写错了,后面我改过来了!希望以后抄代码要仔细,并且每句话先读懂意思,没读懂的就贴代码问清楚意思。不懂意思直接抄,抄错了,分析错误都很难。

回复:确实,我函数写错了!辛苦花费时间,刘老师。第二个是data1我自己写的时候意识到了,没改是因为跟这个问题不太相关,我知道当时你没时间写data2图层代码的时间了,那里只是data1图层两个均线的交叉。总之,太感谢了!

回复:再次感谢,明白每行代码单独调试的意味着时间上的很多花费,所以真是感谢。试着改了几次代码,只能猜到是数组写入有问题😅

很久远以前的课程内容了,我已经不太记得了,我先看看你的代码吧

回复:太感谢了刘老师!

回复:应该就是数组写入的问题,我打印了其中的一个数组,是这样……

回复:我打印出出来也是这样子,给我看懵了

回复:这个错误让我学到很多,这两天反复看你的跨周期的几个视频,琢磨问题出在哪,逐行把代码替换为其他形式看结果如何,虽然最后还是没解决,但有点接近了,看到你说多个分号的那一刻,顿时感觉啊呀通关了,像打通了经脉,有了啃更多代码的勇气,对代码的心里畏惧有点克服了啊