Индикаторы: 3D Oscilator

 

3D Oscilator:

Осцилятор, подающий сигналы при смене тренда.

Author: Collector

 
судя по вашей картике следует обратоное: снизу вверх - покупаем, сверху вниз - продаем.
 

подскажите, как исправить такой недостаток- красная линия постоянно "зависает" на нулевой отметке.

 
aa-cc писал(а):

подскажите, как исправить такой недостаток- красная линия постоянно "зависает" на нулевой отметке.

Почему то, Collector, перед тем как переделать и выложить индикатор не тестирует его.

Ниже рабочая версия :

//+------------------------------------------------------------------+
//|                                                 3D Oscilator.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Author - Luis Damiani. Ramdass - Conversion only"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
 
extern int D1RSIPer=13;
extern int D2StochPer=8;
extern int D3tunnelPer=8;
extern double hot=0.4;
extern int sigsmooth=4;
extern int CountBars=300;
 
//---- buffers
double sig1n[];
double sig2n[];
 
double sk,sk2,ss;
int cs;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(2);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(0,sig1n);
   SetIndexBuffer(1,sig2n);
//----
   cs = MathMax(D1RSIPer,MathMax(D2StochPer,D3tunnelPer));
   ss=sigsmooth;
   if (ss<2) ss=2;
   sk = 2.0 / (ss + 1.0);
   sk2= 2.0 / (ss*0.8+1.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| 3D Oscilator                                                     |
//+------------------------------------------------------------------+
int start()
  {
   if(Bars<=cs) return(0);
   if (CountBars>Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+cs);
   SetIndexDrawBegin(1,Bars-CountBars+cs);
   int i,i2;//counted_bars=IndicatorCounted();
   double rsi,maxrsi,minrsi,storsi,E3D,sig1,sig2;
 
//----
for(i=CountBars; i>=0; i--)
{
      
   maxrsi=0;  
   minrsi=100;
 
   for (i2=i+D2StochPer;i2>=i; i2--)
      {
      rsi=iRSI(NULL,0,D1RSIPer,PRICE_CLOSE,i2);
      if (rsi>maxrsi) maxrsi=rsi;
      if (rsi<minrsi) minrsi=rsi;
      }
 
   if (maxrsi-minrsi!=0.0) storsi=((rsi-minrsi)/(maxrsi-minrsi)*200-100);
   E3D=hot*iCCI(NULL,0,D3tunnelPer,PRICE_TYPICAL,i)+(1-hot)*storsi;
   sig1n[i]=sk*E3D+(1-sk)*sig1;
   sig2n[i]=sk2*sig1+(1-sk2)*sig2;
   sig1=sig1n[i];
   sig2=sig2n[i];
 
}
   return(0);
  }
//+------------------------------------------------------------------+