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

刘风老师有一期《跨周期内容专题答疑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,错了

End

K线图如下:两条均线应该一个把某close除了5,一个除了10,成两条直线,因为数值跨度大,把1分钟k线压缩在最上面


非常感谢,困扰几天了!

关于均线交叉的问题
跨周期均线策略
关于跨周期的问题
跨周期均线
关于跨周期的问题
SubscribeBar订阅数据跨周期的时候怎么能让不显示其他周期的K线,只显示其中一个或者几个
quant3关于跨周期引用的问题
关于跨周期报错的问题
均线交叉区域画色带
双均线开仓平仓,求出满足交叉的价格的方法

因为三年前的课程内容了,没有找到当时的示例代码,所以直接复制你给的代码,没想到你的代码里面隐藏了深坑。

使用你的代码确实会碰到非常多问题,我一度以为是研发人员做了机制更新没有通知我。

后来我几乎每行代码都做了单步调试,终于发现了问题:

你代码抄错了两个地方!!!

内置函数seriestoarray,这里是没有分号的!直接导致转数组失败!

其次

这里的前缀是data1!直播的时候这里我写错了,后面我改过来了!

希望以后抄代码要仔细,并且每句话先读懂意思,没读懂的就贴代码问清楚意思。

不懂意思直接抄,抄错了,分析错误都很难。

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

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

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

太感谢了刘老师!

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

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

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