多图层 KD 指标 随时间变化出现错误

老师好,遇到一个多图层的问题,在程序中有两个图层,data0 是一分钟,显示数据量为1000,data1是tick,我想在data0里面计算kd值,然后再结合tick里面的计算结果来使用。问题是,在程序开始运动的时候,kd值没有问题(下图,左边是一个参考图),大概过了两分钟后,kd值开始不一致了(图3),kd 的计算方法是参考例子(图4),我怀疑是多图层使用上的问题,请帮忙解答一下,多谢了

我发现如果把 tick数据去掉(SubscribeBar(Symbol, \\\"tick\\\", SystemDateTime);),换成其他周期,计算结果就没有问题。只要加上tick的数据,计算数值就在1分钟后开始减小。老师能复现这个问题吗?

Params //此处添加参数 Numeric Length_kd(5); //KD周期 Numeric SlowLength_kd(2); //KD慢线 Numeric SmoothLength_kd(2); //KD平滑周期 Numeric kd_upper(80); //KD上沿 Numeric kd_middle(50); //KD中线 Numeric kd_lower(20); //KD下沿 Vars //此处添加变量 //---kd Series<Numeric> HighestValue_kd; Series<Numeric> LowestValue_kd; Series<Numeric> KValue_kd; Numeric SumHLValue_kd; Numeric SumCLValue_kd; Series<Numeric> DValue_kd; Numeric KD_LongShort(0); //KD看多看空指标 0:没有方向,1:看多,2:看空 Tick my_tick;Defs //此处添加公式函数 Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBar(Symbol, \"tick\", SystemDateTime); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[0:0] //在 1 分钟图上 { //---计算KD,得出看多看空方向 HighestValue_kd = HighestFC(High, Length_kd); LowestValue_kd = LowestFC(Low, Length_kd); SumHLValue_kd = SummationFC(HighestValue_kd - LowestValue_kd, SlowLength_kd); SumCLValue_kd = SummationFC(Close - LowestValue_kd, SlowLength_kd); If(SumHLValue_kd <> 0) { KValue_kd = SumCLValue_kd / SumHLValue_kd*100; }Else { KValue_kd = 0; } //DValue_kd = AverageFC(KValue_kd,SmoothLength_kd); Commentary(\"K=\"+Text(KValue_kd)); //Print(\"D=\"+Text(DValue_kd)); //if(KValue_kd[0] > kd_lower && CrossOver(KValue_kd[1],kd_lower)) if(KValue_kd[0] <= kd_lower) { KD_LongShort =1; //kd看多 //}Else If(KValue_kd[0] < kd_upper && CrossUnder(KValue_kd[1],kd_upper)) }Else If(KValue_kd[0] >= kd_upper) { KD_LongShort =2; // kd看空 }Else{ KD_LongShort =0; // kd无方向 } } Range[1:1] //在tick图上 { GetTick(my_tick); //获取tick数据 Print(\"提示:K=\"+Text(data0.KValue_kd)); } }

下面是代码,老师帮忙看看是什么原因造成kd值不一样的?

麻烦代码用复制的方法,我们复现一下