//------------------------------------------------------------------------
// 简称: KDJ
// 名称: 快速随机指数
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric Length(14);
Numeric SlowLength(3);
Numeric SmoothLength(3);
Vars
Series<Numeric> HighestValue;
Series<Numeric> LowestValue;
Series<Numeric> KValue;
Numeric SumHLValue;
Numeric SumCLValue;
Numeric DValue;
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);
SumCLValue = SummationFC(Close - LowestValue,SlowLength);
If(SumHLValue <> 0)
{
KValue = SumCLValue/SumHLValue*100;
}Else
{
KValue = 0;
}
DValue = AverageFC(KValue,SmoothLength);
PlotNumeric("K",KValue);
PlotNumeric("D",DValue);
PlotNumeric("J",3*KValue - 2*DValue);
PlotNumeric("Ref1",20);
PlotNumeric("Ref2",80);
}
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
我理解的KDJ意思是,先求出最高值,再求出最低值,就可以计算RSV(t)=100*(C(t)-L(t))/(H(t)-L(t))。
K(t)=(RSV(t)*SlowLength+RSV(t-1)(1-SlowLength))/SlowLength,也就是用了SMA,
但公式里为何有求和的计算?公式如下
SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);
SumCLValue = SummationFC(Close - LowestValue,SlowLength);
意思是求出最近SlowLength天的C-L,H-L,然后分别求和,再相除得到的K?不理解公式里的含义。
关于TB中KDJ指标与经典KDJ指标计算方法不同的分析:https://kdocs.cn/l/cgF3sA7ypa99
TB的KDJ公式和其他软件有点不一样,但总体结果相差不大。如果您觉得其他软件的计算公式更好,可以照着TB KDJ的样子改写一个。