大伙帮忙看看代码的问题在哪

大家好,我想记录macd金叉跟死叉之间的最高价的值,但是我写的这段代码,记录下来的值是错误的,大伙帮忙看看哪里出了问题,谢谢Params Numeric FastLength(12); Numeric SlowLength(26); Numeric MACDLength(9);Vars Series<Numeric> MACDDiff; Series<Numeric> AvgMACD; Series<Numeric> MACDValue; Series<Bool> MAUP; Series<Bool> MADOWN; Series<Numeric> MKD; Series<Numeric> MKK; Series<Numeric> MAHIGH; Series<Numeric> i; Series<Numeric> MK;Events OnBar(ArrayRef<Integer> indexs) { MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ; AvgMACD = XAverage(MACDDiff,MACDLength); MACDValue = 2 * (MACDDiff - AvgMACD); PlotNumeric("MACDDiff",MACDDiff); PlotNumeric("MACDDEA",AvgMACD); If (MACDValue >= 0) PlotAuto("MACD",MACDValue,0,Red,Enum_Bar); Else PlotAuto("MACD",MACDValue,0,Green,Enum_Bar); PlotNumeric("零线",0); MAUP = CrossOver(MACDDiff,AvgMACD); MADOWN = CrossUnder(MACDDiff,AvgMACD); If(MAUP) { MKD = CurrentBar; } If(MADOWN) { MKK = CurrentBar; } For i = MKD To MKK { MAHIGH = Max(MAHIGH,High[i]); } If(MADOWN) { MAHIGH = 0; } Commentary("MAHIGH = " + Text(MAHIGH)); }

快速浏览一眼代码,然后简短说一下问题吧这个算法设计的就有问题,不知道你自己有没有验算过我举一个实例打比方说,现在图表第30根bar发生金叉,按照你的算法逻辑,那就是mkd记录未29然后第50根bar发生死叉,按照你的算法逻辑,mkk记录49假设现在是第51根bar,按照你的for循环算法,循环变量i从29到49执行的算法是,MAHIGH = Max(MAHIGH,High[i]);这里我就看不懂了也就是你会比较从high[29]到high[49]这20根k线的最高价。这对吗?你难道不是应该比较high[1]到high[21]这20根bar的最高价吗?站在第51根bar来看,难道不是回溯21根的第30根bar是金叉,回溯1根的第50根bar是死叉吗?怎么跑出来的29和49?这算法有仔细动脑想过吗??但凡自己带一个实例进去看看也都知道算出来的不对吧?

代码分析建议投稿。

回复:老兄,等到投稿回复,黄花菜都凉了😭

回复:代码分析本来就是要花费很多精力和时间去处理,实在是忙不过来。而且正常来说,代码诊断分析能力应该是要自己去养成的,要学会通过输出语句去打断点,做诊断,这些应该是自己要做的工作。

回复:谢谢老师,已经搞清楚了