指标KDJ的KD值后半时间段无输出问题

//=====KDJ=====

   Numeric FastLength(9);     // KDJ快速线参数

   Numeric SlowLength(3);     // KDJ慢速线参数

   Numeric SmoothLength(3);   // KDJ慢速线参数      

Vars

 

   //============ 指标变量 ============

   Series<Numeric> MA1;        // 快速MA

   Series<Numeric> MA2;        // 慢速MA

   Series<Numeric> MA3;        // 方向MA

   Series<Numeric> TR;          // 真实波幅

   Series<Numeric> atrValue;    // ATR值

   Series<Numeric> TPLineH;      //高突破进场线

   Series<Numeric> TPLineL;      //低突破进场线

   Series<Numeric> kValue;            //KDJ K值

   Series<Numeric> DValue;            //KDJ D值

   Series<Numeric> JValue;            //KDJ J值

   Series<Numeric> RSV;               //KDJ RSV值

.....

   // 计算KDJ指标

       RSV = (Close - Lowest(Low, FastLength)) / (Highest(High, FastLength) - Lowest(Low, FastLength)) * 100;

       KValue = SMA(RSV, SlowLength, 1);

       DValue = SMA(KValue, SmoothLength, 1);

       JValue = 3 * KValue - 2 * DValue;

           

            Commentary("kValue:"+Text(kValue)); //BAR输出K值信息

            Commentary("DValue:"+Text(DValue)); //BAR输出D值信息  

5分钟,15分周期,只有部分时间段有K,D值输出,后面时间段无输出。但30分钟又有全部输出(2年),是有数据数量限制?

KDJ指标计算输出时有时没有问题
KD指标的不统一问题
KD值的同一
怎么引用系统技术指标的指标值比如kdj指标的k、d、j值
跨周期kdj指标计算异常问题求助
可以将指标计算的值输出到文件吗?
同周期,但不同数据源的KD指标中的D值不一样
跨周期KD指标
有个公式同时有ma指标和macd或KDJ指标(怎么画图)
多图层 KD 指标 随时间变化出现错误

请提供能够复现的部分代码或者全部代码,你上面的代码是有内容的

您好

是不是忘记做除数为0的异常处理了

对比标准KDJ指标代码,没有写下面的代码,是因为这个导致?

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));

   }

是,没有做无效值的异常处理

加上KDJ指标完整代码后(未用回溯最大数代码,影响均线计算),KD值还是只有一半时间有输出,一半时间无(时间共2年多)。

策略需要KD金叉死叉条件开仓。原油加权000指数。数据源0为5分钟,数据源1为1天(K图背景画出日线高低框柱)

策略完整代码如下,请老师看看问题在哪?


Params
	
    Numeric N1(20);     // 均线周期N1
    Numeric N2(80);     // 均线周期N2
    Numeric N3(420);     
    Numeric M(4);  //波峰波谷确认前后距离
    Numeric M2(150); //计算周期                   
      //============ ATR参数 =============
    Numeric ATRLength(14);        // ATR计算周期
    Numeric MB(2);//目标ART倍数
	Numeric ZS(2);//止损ART倍数
	Numeric ZY(4);//止盈ART倍数
    //============ 仓位参数 ============
    Numeric Lots(1);//手数
    Numeric RiskRatio(0.02);      // 单笔风险比例(2%)
    Numeric ContractMultiplier(10); // 合约乘数(示例为螺纹钢)
    
    //============ 过滤参数 ============
    Numeric VolN(5);     // 成交量过滤天数
    //=====KDJ=====
    Numeric FastLength(9);     // KDJ快速线参数
    Numeric SlowLength(3);     // KDJ慢速线参数
    Numeric SmoothLength(3);   // KDJ慢速线参数      
Vars
   
    //============ 指标变量 ============
    Series<Numeric> MA1;        // 快速MA
    Series<Numeric> MA2;        // 慢速MA
    Series<Numeric> MA3;        // 方向MA
    Series<Numeric> TR;          // 真实波幅
    Series<Numeric> atrValue;    // ATR值
    Series<Numeric> TPLineH;      //高突破进场线
    Series<Numeric> TPLineL;      //低突破进场线
    Series<Numeric> kValue;            //KDJ K值
    Series<Numeric> DValue;            //KDJ D值
    Series<Numeric> JValue;            //KDJ J值
    Series<Numeric> RSV;               //KDJ RSV值
    
    Series<Numeric> SwingHigh_0;     //最近波峰价
    Series<Numeric> SwingLow_0;      //最近波谷价
    Series<Numeric> SwingHigh_1;     //前一波峰价
    Series<Numeric> SwingLow_1;      //前一波谷价  
    Series<Numeric> DayH;            //日线最高价
    Series<Numeric> DayL;            //日线最低价
    Series<Numeric>H60H;             //小时线最高价
    Series<Numeric>H60L;             //小时线最低价
    Series<Bool> UpTrend;        // 上升趋势标志
    Series<Bool> DnTrend;        // 下降趋势标志
    Series<Bool> UpTrend1;        //趋势上1
    Series<Bool> DnTrend1;       //趋势下1
    Series<Bool> UpTrend2;       //趋势上2
    Series<Bool> DnTrend2;        //趋势下2
    
    
  
    //============ 交易信号 ============
    Series<Bool> trendLong;         // 多头趋势条件
    Series<Bool> trendShort;        // 空头趋势条件
    Series<Bool> KDOver; 
    Series<Bool> KDUnder;
    //============ 仓位管理 ============
    Numeric positionSize;         // 计算手数
    Numeric totalCapital(1000000); // 总资金(需根据实盘修改)
    //============划线显示==============
    Plot  plt1;
	Plot  plt2;
	Plot  plt3;
    Plot  plt4;
    Plot  plt5;
    Plot  plt6;
    Plot  plt7;
    Plot  plt8;
    Plot  plt9;
    Plot  plt10;
    Plot  plt11;
Defs
    Numeric SMAValue(Numeric Price,Numeric FastLength,Numeric Weight)
    {
        if(InvalidNumeric == Price || InvalidNumeric == FastLength || InvalidNumeric == Weight)
        {
            return InvalidNumeric;
        }
        return SMA(Price,FastLength,Weight);
    }
Events
	//此处实现事件函数
//OnReady()
    //{
    //    SetBackBarMaxCount(1+Max(Max(Length,SlowLength),SmoothLength));//影响均线计算,忽略
    //}
OnInit()
{  		
	
		plt3.setOption("MA1","color",White());
			
		plt4.setOption("MA2","color",LightBrown());
	    
	    	
	    plt7.setOption("MA3","color",LightBlue());
	    
	    plt8.setOption("SwingHigh","color",Gray());
	
		plt8.setOption("SwingHigh","line-display","interval");
		 
		plt8.setOption("SwingHigh","style",Enum_Dash);
		 
	    plt9.setOption("SwingLow","color",Brown());	    
	    
		plt9.setOption("SwingLow","line-display","interval");
		
		plt9.setOption("SwingLow","style",Enum_Dash);
	   
	    plt10.setOption("dayH","color",Gray());
	
		plt10.setOption("dayH","line-display","interval");
		
		plt10.setOption("dayH","style",Enum_Dash);
		
	    plt11.setOption("dayL","color",Gray());
	
		plt11.setOption("dayL","line-display","interval");
		
		plt11.setOption("dayL","style",Enum_Dash);
	
}	 	
     
	//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
	OnBar(ArrayRef<Integer> indexs)
{
    {//====== 指标计算 ====== 
       //画出日线K的高低价柱线 (data[1]为日线) 
         DayH=Data[1].high;
		 DayL=Data[1].Low;
		 //plt11.barv("DayL",date+time,DayH,DayL);
		 PlotAuto("DayL",DayH,DayL,Rgb(60,60,60),Enum_BAR,Enum_Hollow);
		   
       
       //均线MA1,MA2 MA3画线
	   {
	   	MA1 = Average(Close,N1);    //小周期均线	   	
	    MA2 = Average(Close,N2);	//大周期均线   
	    MA3 = Average(Close,N3);    //方向周期
       
        plt3.line("MA1",MA1);//画线小周期
	    plt4.line("MA2",MA2);//画线大周期  
	    plt7.line("MA3",MA3);//画线方向周期  
	   
       }
    
      // 计算真实波幅TR
      if (CurrentBar == 0) 
        {
         TR = High - Low;
        }else 
        {
        Numeric tr1 = High - Low;
        Numeric tr2 = Abs(High - Close[1]);
        Numeric tr3 = Abs(Low - Close[1]);
        TR = Max(tr1, Max(tr2, tr3));
        }	
       //计算ATR
       atrValue = Average(TR, ATRLength);
      
	   //仓位计算 
        //positionSize = IntPart(totalCapital * RiskRatio / (atrValue * ContractMultiplier));
        //positionSize = IIF(positionSize < 1, 1, positionSize); // 至少1手	
        
       //高低突破线计算
       TPLineH=Highest(High[1],2);
       TPLineL=Lowest(Low[1],2);
       
        // 计算KDJ指标
        RSV = (Close - Lowest(Low, FastLength)) / (Highest(High, FastLength) - Lowest(Low, FastLength)) * 100;
        KValue = SMA(RSV, SlowLength, 1);
        DValue = SMA(KValue, SmoothLength, 1);
        JValue = 3 * KValue - 2 * DValue;
            
             Commentary("kValue:"+Text(kValue)); //BAR输出K值信息 
             Commentary("DValue:"+Text(DValue)); //BAR输出D值信息 
             
             KDOver = CrossOver(KValue, DValue);
             Commentary(" KDOver:" + IIFString(KDOver, "1", "0"));//金叉,BAR输出
             KDUnder = CrossUnder(KValue,DValue);
             Commentary(" KDUnder:" + IIFString(KDUnder, "1", "0"));//死叉,BAR输出       
       //最近一个及前一波峰波谷
     
         SwingHigh_0=SwingHigh(1,High,M,M2);    //最近的波峰
         SwingLow_0=SwingLow(1,Low,M,M2);       //最近的波谷
         SwingHigh_1=SwingHigh(2,High,M,M2); //前1波峰
         SwingLow_1=SwingLow(2,Low,M,M2);    //前1波谷
             
          Print("SwingHigh_1:"+Text(SwingHigh_1));//前1波峰控制台输出
          Print("SwingLow_1:"+Text(SwingLow_1));  //前1波谷控制台输出
          
          
       //画出波峰波谷
            IF(SwingHigh_0>0)// && SwingHigh_0==SwingHigh_0[1])
            plt8.line("SwingHigh",SwingHigh_0);//画波峰 
            IF(SwingLow_0>0)//&& SwingLow_0==SwingLow_0[1])             
            plt9.line("SwingLow",SwingLow_0);//画波谷
        
        // 判断趋势方向
         //UpTrend1= SwingLow_0 >= SwingLow_1 && High > SwingHigh_0  ;   // 低点不创新低,突破前高点抬高
        // DnTrend1= SwingHigh_0 <=SwingHigh_1 && Low < SwingLow_0 ;   // 高点不创新高,跌破前低点
         UpTrend2= MA2>MA2[1] Or MA1>=MA2 ;    //MA2 向上。或20-80多方结构;
         DnTrend2= MA2<MA2[1] Or MA1<MA2 ;     //MA2 向下。或20-80空方结构;
         UpTrend=UpTrend1 Or UpTrend2;                 //趋势上;
         DnTrend=DnTrend1 Or DnTrend2;                 //趋势下;
         Commentary(" UpTrend:" + IIFString(UpTrend, "1", "0"));//趋势上,BAR输出;
         Commentary(" DnTrend:" + IIFString(DnTrend, "1", "0"));//趋势下,BAR输出;
    }
    { //波峰波谷突破交易策略----------
     
     // 开多条件
        if (MarketPosition <>1 
            //&& Close[1] > MA2[1]     //前K站上MA2
            && MA1[1]> MA1[2]       //MA1是上升的
            && Close[1] > MA1[1]     //前K站上MA1     
            && Close[1] > MA3[1]     //前K站上MA3           
            && UpTrend[1]             //趋势上           
            && ( Close[1]>SwingHigh_0[1] Or CrossOver(KValue[1],DValue[1])))     //前K收盘价突破波峰 或 KDJ指标K,D金叉
           
         {
          Buy(Lots, Max(Close[1],Open));
         }
        
     // 开空条件
        if (MarketPosition <>-1
            //&& Close[1] < MA2[1] //前K站MA2下,
            && MA1[1] < MA1[2]       //MA1是下降的
            && Close[1] < MA1[1]  //前K站MA1下  
            && Close[1] < MA3[1]  //前K站MA3下                    
            && DnTrend[1]           //趋势下          
            && (Close[1]<SwingLow_0[1] or CrossUnder(KValue[1],DValue[1])))     //前K收盘价跌破波谷 或 KDJ指标K,D死叉
        {
        SellShort(Lots, Min(Close[1],Open));
        }
    
    // 多单止损止盈
        if (MarketPosition == 1 
            && CrossUnder(Low,SwingLow_0))
           
        {
        Sell(0, SwingLow_0);
        }
    
    // 空单止损止盈
    if (MarketPosition == -1
            && CrossOver(High,SwingHigh_0))
            
        {
        BuyToCover(0, SwingHigh_0);
        }
    } 
 }



"加上KDJ指标完整代码后"——你这句话是认真的吗???

谢谢提醒。已加完整处理无效数据代码,解决了。😀👍

解决了那我就不多说了