同一个跨周期macd计算公式,通过SubscribeBar订阅、设置日周k线,两种方式结果不同(后复权)?

Params Numeric MACDFastLength1(12); Numeric MACDSlowLength1(26); Numeric MACDLength1(9); Vars Series<Numeric> MACDDiff0; Series<Numeric> AvgMACD0; Series<Numeric> MACD0; Series<Numeric> MACDDiff1; Series<Numeric> AvgMACD1; Series<Numeric> MACD1; Series<Numeric> MACDDiff2; Series<Numeric> AvgMACD2; Series<Numeric> MACD2; Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBar(Data0.Symbol,"1D",Data0.BeginDateTime, 0, Enum_Data_RolloverBackWard); //增加日k线数据源 SubscribeBar(Data0.Symbol,"1W",Data0.BeginDateTime, 0, Enum_Data_RolloverBackWard); //增加周k线数据源 } OnBar(ArrayRef<Integer> indexs) { Range[2:2] { MACDDiff2 = XAverage(Close[1],MACDFastLength1) - XAverage(Close[1],MACDSlowLength1) ; AvgMACD2 = XAverage(MACDDiff2,MACDLength1); MACD2 = MACDDiff2 - AvgMACD2; } Range[1:1] { MACDDiff1 = XAverage(Close[1],MACDFastLength1) - XAverage(Close[1],MACDSlowLength1) ; AvgMACD1 = XAverage(MACDDiff1,MACDLength1); MACD1 = MACDDiff1 - AvgMACD1; } Range[0:0] { Commentary("data2.Close[1]:="+Text(data2.Close[1])); Commentary("MACDDiff2= "+Text(data2.MACDDiff2)); Commentary("AvgMACD2= "+Text(data2.AvgMACD2)); Commentary("MACD2= "+Text(data2.MACD2)); Commentary("data1.Close[1]:="+Text(data1.Close[1])); Commentary("MACDDiff1= "+Text(data1.MACDDiff1)); Commentary("AvgMACD1= "+Text(data1.AvgMACD1)); Commentary("MACD1= "+Text(data1.MACD1)); MACDDiff0 = XAverage(Close[1],MACDFastLength1) - XAverage(Close[1],MACDSlowLength1) ; AvgMACD0 = XAverage(MACDDiff0,MACDLength1); MACD0 = MACDDiff0 - AvgMACD0; Commentary("data0.Close[1]:="+Text(data0.Close[1])); Commentary("MACDDiff0= "+Text(MACDDiff0)); Commentary("AvgMACD0= "+Text(AvgMACD0)); Commentary("MACD0= "+Text(MACD0)); } } 通过SubscribeBar订阅计算结果有误,通过设置的数据源,结果与原始数据一样,请问是哪里出了错?

结果是各数据源起始日期忘记调一致,给您添麻烦了!

MACD指标的计算需要依靠bar的数量,如果bar数量不同,macd值也会不同,你工作区图层的bar数量设置是不同的,最后导致了MACD值不同

可以通过客服系统提交工作区文件来复查

回复:已发送至客服邮箱,谢谢!