刘风老师有一期《跨周期内容专题答疑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线压缩在最上面
非常感谢,困扰几天了!
因为三年前的课程内容了,没有找到当时的示例代码,所以直接复制你给的代码,没想到你的代码里面隐藏了深坑。
使用你的代码确实会碰到非常多问题,我一度以为是研发人员做了机制更新没有通知我。
后来我几乎每行代码都做了单步调试,终于发现了问题:
你代码抄错了两个地方!!!
内置函数seriestoarray,这里是没有分号的!直接导致转数组失败!
其次
这里的前缀是data1!直播的时候这里我写错了,后面我改过来了!
希望以后抄代码要仔细,并且每句话先读懂意思,没读懂的就贴代码问清楚意思。
不懂意思直接抄,抄错了,分析错误都很难。
确实,我函数写错了!辛苦花费时间,刘老师。第二个是data1我自己写的时候意识到了,没改是因为跟这个问题不太相关,我知道当时你没时间写data2图层代码的时间了,那里只是data1图层两个均线的交叉。总之,太感谢了!
再次感谢,明白每行代码单独调试的意味着时间上的很多花费,所以真是感谢。试着改了几次代码,只能猜到是数组写入有问题😅
很久远以前的课程内容了,我已经不太记得了,我先看看你的代码吧
太感谢了刘老师!
应该就是数组写入的问题,我打印了其中的一个数组,是这样……
我打印出出来也是这样子,给我看懵了
这个错误让我学到很多,这两天反复看你的跨周期的几个视频,琢磨问题出在哪,逐行把代码替换为其他形式看结果如何,虽然最后还是没解决,但有点接近了,看到你说多个分号的那一刻,顿时感觉啊呀通关了,像打通了经脉,有了啃更多代码的勇气,对代码的心里畏惧有点克服了啊