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

老师好,

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

data-href=data-href=data-href=data-href=

多图层多周期中CurrentBar的变化及全局变量的值的变化规律研究
多图表时指标存储错误
跨周期KD指标
多图层onBar(),各品种bar的时间对齐问题
KD指标的不统一问题
多图层出现信号闪烁
多图层选股
多图层
请教!多品种,跨周期,多图层,RANGE下获取当前品种交易结束时间。
求助跨周期,指标变化时出现信号闪烁

我发现如果把 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值不一样的?

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