跨周期kdj指标计算异常问题求助
Params
//此处添加参数
Numeric FastLength(12);
Numeric SlowLength(26);
Numeric MACDLength(9);
Numeric Length(9);
Numeric SlowLength_kdj(3);
Numeric SmoothLength(3);
Numeric Length_rsi_short(6);
Numeric Length_rsi_long(24);
Vars
//此处添加变量
Series<Numeric> MACDDiff;
Series<Numeric> AvgMACD;
Series<Numeric> MACDValue;
Plot pen1;
Plot pen2;
Global Numeric i1;
Global Numeric i2;
Numeric HighestValue ;
Numeric LowestValue ;
Numeric k;
Series<Numeric> kValue; // K值
Series<Numeric> DValue; // D值
Series<Numeric> JValue; // J值
Defs
//此处添加公式函数
Numeric SMAValue(Numeric Price,Numeric Length,Numeric Weight)
{
if(InvalidNumeric == Price || InvalidNumeric == Length || InvalidNumeric == Weight)
{
return InvalidNumeric;
}
return SMA(Price,Length,Weight);
}
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
i1= SubscribeBar(Symbol,"5m",BeginDateTime,0,Enum_Data_FullPeriod);
i2= SubscribeBar(Symbol,"30m",BeginDateTime,0,Enum_Data_FullPeriod);
Data[i1].AddDataFlag(Enum_Data_EndTime);
Data[i2].AddDataFlag(Enum_Data_EndTime);
}
OnReady()
{
SetBackBarMaxCount(1+Max(Max(Length,SlowLength),SmoothLength));
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
//5分钟周期图指标计算--kdj,
Range[i1:i1]
{
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
k = (Close - LowestValue)/(HighestValue-LowestValue)*100;
kValue = SMAValue(k,SlowLength,1);
DValue = SMAValue(KValue,SmoothLength,1);
JValue = 3*kValue - 2*DValue;
Commentary("HighestValue="+Text(HighestValue));
Commentary("LowestValue="+Text(LowestValue));
Commentary("k="+Text(k));
Commentary("KValue="+Text(KValue));
Commentary("DValue="+Text(DValue));
}
//30分钟周期指标计算
Range[i2:i2]
{
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
k = (Close - LowestValue)/(HighestValue-LowestValue)*100;
kValue = SMAValue(k,SlowLength,1);
DValue = SMAValue(KValue,SmoothLength,1);
Commentary("HighestValue="+Text(HighestValue));
Commentary("LowestValue="+Text(LowestValue));
Commentary("k="+Text(k));
Commentary("KValue="+Text(KValue));
Commentary("DValue="+Text(DValue));
}
}
老师您好,分别订阅了1分钟,5分钟,30分钟周期,然后在5分钟和30分钟周期计算kdj指标,但计算出来的kdj指标值与实际的kdj值存在较大差异,如下图所示,在5分钟周期图上,计算出来的kvalue是48.60,DValue是46.56,而通过加载系统的kdj公式可以看到k值是72.10,D值是55.45.在30分钟周期图上,计算出来的kvalue是59.54,DValue是60.61,而通过加载系统的kdj公式可以看到k值是47.18,D值是40.57。请老师帮忙看一下是哪里出现了问题,多谢!
//------------------------------------------------------------------------// 简称: KDJ_MACD// 名称: 多周期KDJ与MACD策略// 类别: 策略应用// 类型: 内建应用//------------------------------------------------------------------------Params Numeric FastLength(12); Numeric SlowLength(26); Numeric MACDLength(9); Numeric Length(9); // KDJ周期 Numeric SlowLength_kdj(3); // KDJ的K值平滑周期 Numeric SmoothLength(3); // KDJ的D值平滑周期 Numeric Length_rsi_short(6); Numeric Length_rsi_long(24); Vars Series<Numeric> MACDDiff; Series<Numeric> AvgMACD; Series<Numeric> MACDValue; Plot pen1; Plot pen2; Global Numeric i1; Global Numeric i2; // KDJ计算变量 - 5分钟周期 Series<Numeric> kValue_5m; // 5分钟K值 Series<Numeric> DValue_5m; // 5分钟D值 Series<Numeric> JValue_5m; // 5分钟J值 // KDJ计算变量 - 30分钟周期 Series<Numeric> kValue_30m; // 30分钟K值 Series<Numeric> DValue_30m; // 30分钟D值 Series<Numeric> JValue_30m; // 30分钟J值 // 中间计算值 Numeric HighestValue_5m; Numeric LowestValue_5m; Numeric k_5m; Numeric HighestValue_30m; Numeric LowestValue_30m; Numeric k_30m; Defs Numeric SMAValue(Numeric Price,Numeric Length,Numeric Weight) { if(InvalidNumeric == Price || InvalidNumeric == Length || InvalidNumeric == Weight) { return InvalidNumeric; } return SMA(Price,Length,Weight); }Events OnReady() { SetBackBarMaxCount(1+Max(Max(Length,SlowLength),SmoothLength)); Range[0:DataSourceSize() - 1] { // 设置KDJ指标显示选项 setPlotOption("K_5m", "begin-bar", SlowLength_kdj); setPlotOption("D_5m", "begin-bar", SmoothLength); setPlotOption("J_5m", "begin-bar", SmoothLength); setPlotOption("K_30m", "begin-bar", SlowLength_kdj); setPlotOption("D_30m", "begin-bar", SmoothLength); setPlotOption("J_30m", "begin-bar", SmoothLength); // 设置MACD指标显示选项 setPlotOption("MACD", "begin-bar", FastLength + MACDLength); setPlotOption("Signal", "begin-bar", FastLength + MACDLength); setPlotOption("Histogram", "begin-bar", FastLength + MACDLength); } } OnBar(ArrayRef<Integer> indexs) { // 5分钟周期图指标计算 Range[i1:i1] { // KDJ计算 HighestValue_5m = HighestFC(High, Length); LowestValue_5m = LowestFC(Low, Length); k_5m = (Close - LowestValue_5m)/(HighestValue_5m-LowestValue_5m)*100; kValue_5m = SMAValue(k_5m, SlowLength_kdj, 1); DValue_5m = SMAValue(kValue_5m, SmoothLength, 1); JValue_5m = 3*kValue_5m - 2*DValue_5m; // 绘制KDJ指标 PlotNumeric("K_5m", kValue_5m); PlotNumeric("D_5m", DValue_5m); PlotNumeric("J_5m", JValue_5m); PlotNumeric("Ref1_5m", 20); PlotNumeric("Ref2_5m", 80); // 输出计算过程 Commentary("5分钟周期:"); Commentary("HighestValue_5m="+Text(HighestValue_5m)); Commentary("LowestValue_5m="+Text(LowestValue_5m)); Commentary("k_5m="+Text(k_5m)); Commentary("kValue_5m="+Text(kValue_5m)); Commentary("DValue_5m="+Text(DValue_5m)); Commentary("JValue_5m="+Text(JValue_5m)); // MACD计算 MACDDiff = EMA(Close, FastLength) - EMA(Close, SlowLength); AvgMACD = EMA(MACDDiff, MACDLength); MACDValue = MACDDiff - AvgMACD; // 绘制MACD指标 PlotNumeric("MACD", MACDDiff); PlotNumeric("Signal", AvgMACD); PlotNumeric("Histogram", MACDValue); } // 30分钟周期指标计算 Range[i2:i2] { // KDJ计算 HighestValue_30m = HighestFC(High, Length); LowestValue_30m = LowestFC(Low, Length); k_30m = (Close - LowestValue_30m)/(HighestValue_30m-LowestValue_30m)*100; kValue_30m = SMAValue(k_30m, SlowLength_kdj, 1); DValue_30m = SMAValue(kValue_30m, SmoothLength, 1); JValue_30m = 3*kValue_30m - 2*DValue_30m; // 绘制KDJ指标 PlotNumeric("K_30m", kValue_30m); PlotNumeric("D_30m", DValue_30m); PlotNumeric("J_30m", JValue_30m); PlotNumeric("Ref1_30m", 20); PlotNumeric("Ref2_30m", 80); // 输出计算过程 Commentary("30分钟周期:"); Commentary("HighestValue_30m="+Text(HighestValue_30m)); Commentary("LowestValue_30m="+Text(LowestValue_30m)); Commentary("k_30m="+Text(k_30m)); Commentary("kValue_30m="+Text(kValue_30m)); Commentary("DValue_30m="+Text(DValue_30m)); Commentary("JValue_30m="+Text(JValue_30m)); } } //------------------------------------------------------------------------// 编译版本 GS2010.12.08// 版权所有 TradeBlazer Software 2003-2025// 更改声明 TradeBlazer Software保留对TradeBlazer平// 台每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------