3D Oscilator_v2





//+------------------------------------------------------------------+
//|                                                 3D Oscilator.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Author - Luis Damiani. Ramdass - Conversion only"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int D1RSIPer = 13;
extern int D2StochPer = 8;
extern int D3tunnelPer = 8;
extern double hot = 0.4;
extern int sigsmooth = 4;
//---- buffers
double sig1n[];
double sig2n[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    string short_name;
    //---- indicator line
    SetIndexStyle(0, DRAW_LINE);
    SetIndexStyle(1, DRAW_LINE);
    SetIndexBuffer(0, sig1n);
    SetIndexBuffer(1, sig2n);
    //----
    SetIndexDrawBegin(0, D1RSIPer + D2StochPer + D3tunnelPer + hot + sigsmooth);
    SetIndexDrawBegin(1, D1RSIPer + D2StochPer + D3tunnelPer + hot + sigsmooth);
    //----
    return(0);
  }
//+------------------------------------------------------------------+
//|   CCI_Woodies                                                    |
//+------------------------------------------------------------------+
int start()
  {
    int i, i2, counted_bars = IndicatorCounted();
    double rsi, maxrsi, minrsi, storsi, E3D, sig1, sig2, sk, ss, sk2;
    double cs;
    bool init = true;
    //----
    cs = D1RSIPer + D2StochPer + D3tunnelPer + hot + sigsmooth;
    if(Bars<=cs) 
        return(0);
    //if (init)
    //{
    ss = sigsmooth;
    if(ss < 2) 
        ss=2;
    sk = 2 / (ss + 1);
    sk2 = 2 / (ss*0.8 + 1);
    init=false;
    //---- initial zero
    if(counted_bars < 1)
      {
        for(i = 1; i <= cs; i++) 
            sig1n[Bars-i] = 0.0;
        for(i = 1; i <= cs; i++) 
            sig2n[Bars-i] = 0.0;
      }
    //----
    i = Bars - cs - 1;
    if(counted_bars >= cs) 
        i = Bars - counted_bars - 1;
    while(i >= 0)
      {
        rsi = iRSI(NULL, 0, D1RSIPer, PRICE_CLOSE, i);
        maxrsi = rsi;
        minrsi = rsi;
        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;
          }
        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];
        i--;
      }
    return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Relative strength index
Commodity channel index


Custom Indicators Used:

Order Management characteristics:

Other Features: