Jump to content

Ocean Theory indis from TSD elite


udc

Recommended Posts

UDC,

 

Brilliant job with Metatrader Ocean Indicators!!

I am sure in the not to distant future a lot of us on this forum will be thanking you a lot more after we've done some demo/real trading!

Any luck with Ocn STX yet? :D

 

Thank you. I can't give you ETA on STX, it depends when I get time (and mood) for it. I may finish some work sooner, get ahead of the deadline and STX is here, but I really can't predict these things. Even when it looks like something like that is going to happen some other urgent task may appear and if it's business it will have a priority. Stop the clock for 1 day and STX is done 8-) All I can somewhat promise is that I want to finish all Ocean related programming this year, next year I will focus on different thing in my spare time.

 

I see that it is not in the TSD elite upload.......?

 

I didn't get this question, what is not in TSD elite?

Link to comment
Share on other sites

  • Replies 332
  • Created
  • Last Reply

Top Posters In This Topic

Ocn_FastNMAvsNMA

 

This is a little indi I wanted to make for a while. All what it does is showing a relative position of FastNMA compared to NMA.

 

It may be useful for those who want to quickly see whether FastNMA is above or below NMA but for some reason don't want to have them in their main chart. For the lack of a better name I named it "FastNMAvsNMA". For BB maniacs I added the SD bands with typical features as previously seen on TV, you know, all the jazz.

 

The following picture shows NMA and FastNMA (Ocn_NMAx indi, that is) in the main chart and 3x Ocn_FastNMAvsNMA indi with various settings.

 

http://img819.imageshack.us/img819/3299/ocnfastnmavsnma.png

 

// Ocn_FastNMAvsNMA version 1.00
#property  copyright "NMA algorithm © jim sloman, for metatrader programmed by udc"
#property  link      "[email protected]"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Magenta
#property indicator_color2 Silver
#property indicator_color3 Silver
#property indicator_color4 Silver
#property indicator_level1 0
#property indicator_levelcolor Gray
#property indicator_levelstyle 2

extern int    NMA_period         = 40;
extern int    FastNMA_period     = 40;
extern int    FastNMA_LB_min     = 8;
extern bool   Show_SD            = false;
extern int    SD_len             = 30;
extern double SD_up              = 2;
extern double SD_dn              = 2;
extern bool   Show_SD_1line_only = false;
extern bool   Show_SD_3lines_up  = true;
extern bool   Show_SD_3lines_dn  = true;
extern bool   Show_SD_3lines_md  = true;

double FastNMAvsNMA[];
double SD[];
double SD2[];
double SD3[];
double NMA[];
double FastNMA[];

int init()
{
 string name = "FastNMAvsNMA(" + NMA_period + ", " + FastNMA_period + ", " + FastNMA_LB_min + ")";
 IndicatorShortName(name);
 IndicatorBuffers(6);
 SetIndexBuffer(0, FastNMAvsNMA);
 SetIndexLabel(0, name);
 SetIndexBuffer(1, SD);
 SetIndexBuffer(2, SD2);
 SetIndexBuffer(3, SD3);
 if(Show_SD_1line_only)
   {
   SetIndexLabel(1, "FastNMAvsNMA_SD(" + SD_len + ")");
   SetIndexLabel(2, "unused");
   SetIndexLabel(3, "unused");
   }
 else
   {
   if(Show_SD_3lines_up) SetIndexLabel(1, "FastNMAvsNMA_SD_up(" + SD_len + ")");
   else                  SetIndexLabel(1, "unused");
   if(Show_SD_3lines_dn) SetIndexLabel(2, "FastNMAvsNMA_SD_dn(" + SD_len + ")");
   else                  SetIndexLabel(2, "unused");
   if(Show_SD_3lines_md) SetIndexLabel(3, "FastNMAvsNMA_SD_md(" + SD_len + ")");
   else                  SetIndexLabel(3, "unused");
   }
 SetIndexBuffer(4, NMA);
 SetIndexBuffer(5, FastNMA);
 return(0);
}

int start()
{
 int limit, i, ii, counted_bars = IndicatorCounted()-1;
 int max = MathMax(NMA_period, FastNMA_period);
 double nmasum, nmaabssum, nmaratio, nmmnum, maxnmm, fastnmasum, fastnmaabssum, fastnmaratio, temp;
 bool nmadone, fastnmadone;

 if(Bars <= max) return(0);
 if(counted_bars < 0) counted_bars = 0;
 if(counted_bars > max) limit = Bars - counted_bars;
 else                   limit = Bars - max - 1;

 for(i = limit; i >= 0; i--)
   {
   if(i == Bars - max - 1) { NMA[i+1] = Close[i+1]; FastNMA[i+1] = Close[i+1]; }
   nmaratio = 0; maxnmm = 0; fastnmaratio = 0;
   int NMA_LB_max;
   for(ii = 1; ii <= FastNMA_period; ii++)
     {
     nmmnum = (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
     if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
     }
   if(NMA_LB_max < FastNMA_LB_min) NMA_LB_max = FastNMA_LB_min;
   nmasum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
   fastnmasum = nmasum;
   nmadone = false; fastnmadone = false; ii = 2;
   while( !(nmadone) || !(fastnmadone) )
     {
     temp = (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
     if(ii >= NMA_period) nmadone=true;
     else                 nmasum += temp;
     if(ii >= NMA_LB_max) fastnmadone=true;
     else                 fastnmasum += temp;
     ii++;
     }
   nmaabssum = MathAbs(nmasum);
   fastnmaabssum = MathAbs(fastnmasum);
   nmasum = 0; fastnmasum = 0;
   nmadone = false; fastnmadone = false; ii = 0;
   while( !(nmadone) || !(fastnmadone) )
     {
     temp = MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
     if(ii >= NMA_period) nmadone=true;
     else                 nmasum += temp;
     if(ii >= NMA_LB_max) fastnmadone=true;
     else                 fastnmasum += temp;
     ii++;
     }
   if(nmasum != 0) nmaratio = nmaabssum / nmasum;
   if(fastnmasum != 0) fastnmaratio = fastnmaabssum / fastnmasum;
   NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * nmaratio;
   FastNMA[i] = FastNMA[i+1] + (Close[i] - FastNMA[i+1]) * fastnmaratio;
   FastNMAvsNMA[i] = FastNMA[i] - NMA[i];
   }

 if(Show_SD)
   for(i = limit; i >= 0; i--)
     if(i < Bars - max - 1 - SD_len)
       {
       if(Show_SD_1line_only)
         {
         if(FastNMAvsNMA[i] == 0)     SD[i] = 0;
         else if(FastNMAvsNMA[i] > 0) SD[i] = iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_up, 0, MODE_UPPER, i);
         else if(FastNMAvsNMA[i] < 0) SD[i] = iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
         }
       else
         {
         if(Show_SD_3lines_up) SD[i] = iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_up, 0, MODE_UPPER, i);
         if(Show_SD_3lines_dn) SD2[i] = iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
         if(Show_SD_3lines_md) SD3[i] = (iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_up, 0, MODE_UPPER, i)+
                                         iBandsOnArray(FastNMAvsNMA, 0, SD_len, SD_dn, 0, MODE_LOWER, i) ) / 2;
         }
       }

 return(0);
}

 

Source code:

http://pastebin.com/Yt7EkFbH

 

 

Hopefully someone will find it useful.

Link to comment
Share on other sites

Ocn_FastNMAvsNMA_NMS

 

Now those who would prefer seeing FastNMA's slope towards NMA, regardless of its position, may find useful a version of Ocn_FastNMAvsNMA with NMS (natural market slope) internally applied onto it: Ocn_FastNMAvsNMA_NMS. The screenshot should hint its function:

 

http://img525.imageshack.us/img525/668/ocnfastnmavsnmanms.png

 

// Ocn_FastNMAvsNMA_NMS version 1.00
#property  copyright "NMA & NMS algorithms © jim sloman, for metatrader programmed by udc"
#property  link      "[email protected]"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Magenta
#property indicator_color2 Lime
#property indicator_color3 Silver
#property indicator_color4 Silver
#property indicator_color5 Silver
#property indicator_level1 0
#property indicator_levelcolor Gray
#property indicator_levelstyle 2

extern int    NMA_period           = 40;
extern int    FastNMA_period       = 40;
extern int    FastNMA_LB_min       = 8;
extern int    NMS_period           = 40;
extern bool   Show_ZH              = true;
extern double ZH_displacement      = 0;
extern int    ZH_symbol            = 119;
extern bool   HistogramInsteadLine = false;
extern bool   Show_SD              = false;
extern int    SD_len               = 30;
extern double SD_up                = 2;
extern double SD_dn                = 2;
extern bool   Show_SD_1line_only   = false;
extern bool   Show_SD_3lines_up    = true;
extern bool   Show_SD_3lines_dn    = true;
extern bool   Show_SD_3lines_md    = true;
extern bool   Zero_SD_3lines_when_ZH = false;

double FastNMAvsNMA_NMS[];
double ZH[];
double SD[];
double SD2[];
double SD3[];
double NMA[];
double FastNMA[];
double FastNMAvsNMA[];

int init()
{
 string name = "FastNMAvsNMA_NMS(" + NMA_period + ", " + FastNMA_period + ", " + FastNMA_LB_min + ", " + NMS_period + ")";
 IndicatorShortName(name);
 IndicatorBuffers(8);
 SetIndexBuffer(0, FastNMAvsNMA_NMS);
 SetIndexLabel(0, name);
 if(HistogramInsteadLine) SetIndexStyle(0, DRAW_HISTOGRAM);
 else                     SetIndexStyle(0, DRAW_LINE);
 SetIndexBuffer(1, ZH);
 SetIndexLabel(1, "FastNMAvsNMA_NMS_ZH");
 SetIndexStyle(1, DRAW_ARROW);
 SetIndexArrow(1, ZH_symbol);
 SetIndexBuffer(2, SD);
 SetIndexBuffer(3, SD2);
 SetIndexBuffer(4, SD3);
 if(Show_SD_1line_only)
   {
   SetIndexLabel(2, "FastNMAvsNMA_NMS_SD(" + SD_len + ")");
   SetIndexLabel(3, "unused");
   SetIndexLabel(4, "unused");
   }
 else
   {
   if(Show_SD_3lines_up) SetIndexLabel(2, "FastNMAvsNMA_NMS_SD_up(" + SD_len + ")");
   else                  SetIndexLabel(2, "unused");
   if(Show_SD_3lines_dn) SetIndexLabel(3, "FastNMAvsNMA_NMS_SD_dn(" + SD_len + ")");
   else                  SetIndexLabel(3, "unused");
   if(Show_SD_3lines_md) SetIndexLabel(4, "FastNMAvsNMA_NMS_SD_md(" + SD_len + ")");
   else                  SetIndexLabel(4, "unused");
   }
 SetIndexBuffer(5, NMA);
 SetIndexBuffer(6, FastNMA);
 SetIndexBuffer(7, FastNMAvsNMA);
 return(0);
}

int start()
{
 int limit, i, ii, counted_bars = IndicatorCounted()-1;
 int max = MathMax(NMA_period, FastNMA_period);
 double nmasum, nmaabssum, nmaratio, nmmnum, maxnmm, fastnmasum, fastnmaabssum, fastnmaratio, temp, nms2;
 bool nmadone, fastnmadone;

 if(Bars <= max+NMS_period) return(0);
 if(counted_bars < 0) counted_bars = 0;
 if(counted_bars > max) limit = Bars - counted_bars;
 else                   limit = Bars - max - 1;

 for(i = limit; i >= 0; i--)
   {
   if(i == Bars - max - 1) { NMA[i+1] = Close[i+1]; FastNMA[i+1] = Close[i+1]; }
   nmaratio = 0; maxnmm = 0; fastnmaratio = 0;
   int NMA_LB_max;
   for(ii = 1; ii <= FastNMA_period; ii++)
     {
     nmmnum = (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
     if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
     }
   if(NMA_LB_max < FastNMA_LB_min) NMA_LB_max = FastNMA_LB_min;
   nmasum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
   fastnmasum = nmasum;
   nmadone = false; fastnmadone = false; ii = 2;
   while( !(nmadone) || !(fastnmadone) )
     {
     temp = (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
     if(ii >= NMA_period) nmadone=true;
     else                 nmasum += temp;
     if(ii >= NMA_LB_max) fastnmadone=true;
     else                 fastnmasum += temp;
     ii++;
     }
   nmaabssum = MathAbs(nmasum);
   fastnmaabssum = MathAbs(fastnmasum);
   nmasum = 0; fastnmasum = 0;
   nmadone = false; fastnmadone = false; ii = 0;
   while( !(nmadone) || !(fastnmadone) )
     {
     temp = MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
     if(ii >= NMA_period) nmadone=true;
     else                 nmasum += temp;
     if(ii >= NMA_LB_max) fastnmadone=true;
     else                 fastnmasum += temp;
     ii++;
     }
   if(nmasum != 0) nmaratio = nmaabssum / nmasum;
   if(fastnmasum != 0) fastnmaratio = fastnmaabssum / fastnmasum;
   NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * nmaratio;
   FastNMA[i] = FastNMA[i+1] + (Close[i] - FastNMA[i+1]) * fastnmaratio;
   FastNMAvsNMA[i] = FastNMA[i] - NMA[i];
   }

 for(i = limit; i >= 0; i--)
   if(i < Bars - max - 1 - NMS_period)
     {
     nms2 = 0;
     for(ii = 1; ii <= NMS_period; ii++)
       {
       double oLRSlope = 0, SumXY = 0, SumY = 0, SumX, SumXSqr, Divisor;
       if(ii > 1)
         {
         SumX = ii * (ii - 1) * 0.5;
         SumXSqr = ii * (ii - 1) * (2 * ii - 1) * 1/6;
         Divisor = (SumX * SumX) - ii * SumXSqr;
         for(int iii = 0; iii < ii; iii++)
           {
           SumXY += iii * FastNMAvsNMA[i+iii];
           SumY += FastNMAvsNMA[i+iii];
           }
         oLRSlope = (ii * SumXY - SumX * SumY) / Divisor;
         }
       nms2 += oLRSlope * MathSqrt(ii);
       }
     FastNMAvsNMA_NMS[i] = nms2 * 100;
     if(Show_ZH) { if(FastNMAvsNMA_NMS[i] == 0) ZH[i] = ZH_displacement; else ZH[i] = EMPTY_VALUE; }
     }

 if(Show_SD)
   for(i = limit; i >= 0; i--)
     if(i < Bars - max - 1 - NMS_period - SD_len)
       {
       if(Show_SD_1line_only)
         {
         if(FastNMAvsNMA_NMS[i] == 0)     SD[i] = 0;
         else if(FastNMAvsNMA_NMS[i] > 0) SD[i] = iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_up, 0, MODE_UPPER, i);
         else if(FastNMAvsNMA_NMS[i] < 0) SD[i] = iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
         }
       else
         {
         if((Zero_SD_3lines_when_ZH) && (FastNMAvsNMA_NMS[i] == 0))
           {
           if(Show_SD_3lines_up) SD[i] = 0;
           if(Show_SD_3lines_dn) SD2[i] = 0;
           if(Show_SD_3lines_md) SD3[i] = 0;
           }
         else
           {
           if(Show_SD_3lines_up) SD[i] = iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_up, 0, MODE_UPPER, i);
           if(Show_SD_3lines_dn) SD2[i] = iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
           if(Show_SD_3lines_md) SD3[i] = (iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_up, 0, MODE_UPPER, i)+
                                           iBandsOnArray(FastNMAvsNMA_NMS, 0, SD_len, SD_dn, 0, MODE_LOWER, i) ) / 2;
           }
         }
       }

 return(0);
}

 

Source code:

http://pastebin.com/KQNRSwY2

 

 

Also a version 1.01 of Ocn_FastNMAvsNMA with a new switch "ValuesInPips" added (turned on in the picture above):

http://pastebin.com/gZJMNn2W

Link to comment
Share on other sites

The Derived Indicator is fine to be included in a trading Arsenal provided it has a trade initiation indicator

 

I can think of two such which you may care to include (Again, I do not believe in reading patterns through a program as I believe in human judgement)

 

1. Maximum number of cumulative consecutive failures in favour of such swings ( it may be directional, in which case you have the trade direction or non-directional in case of which you have a Breakout on either side)

2. A failure just at the completion of a Wave5 after completion of a larger TF Wave4 ( to add more cream, you can add one more completion of a Mega TF Wave4)

Link to comment
Share on other sites

Ocn_FastNMAvsNMA_MTF

 

Those who are interested in FastNMAvsNMA crossovers on multiple timeframes may find useful the multi-timeframe version: "Ocn_FastNMAvsNMA_MTF". This allows you to stack up several FastNMAvsNMA indicators each showing data from a different timeframe and this all in a single chart window.

 

To specify of which timeframe you want to display FastNMAvsNMA, simply set the "TF" variable. You can choose any timeframe you want (values 1, 5, 15, 30, 60, 240, 1440, 10080 and 43200), if there is enough data available it will be calculated and displayed no matter what timeframe is the current chart. If you want to use chart's timeframe you can either set TF appropriately or leave it at 0 (default value).

 

The following screenshot shows M5 chart with FastNMAvsNMA from M1 (yellow), M5 (orange) and M15 (red).

http://img842.imageshack.us/img842/2306/ocnfastnmavsnmamtf2.png

 

Another example shows M15 chart with FastNMAvsNMA from M1 (white), M5 (yellow), M15 (orange), M30 (red) and H1 (purple).

http://img338.imageshack.us/img338/2016/ocnfastnmavsnmamtf.png

 

And of course you can use the multi-timeframe SD bands as well:

http://img27.imageshack.us/img27/4687/ocnfastnmavsnmamtfsd.png

 

 

// Ocn_FastNMAvsNMA_MTF version 1.10
#property  copyright "NMA algorithm © jim sloman, for metatrader programmed by udc"
#property  link      "[email protected]"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Magenta
#property indicator_color2 Silver
#property indicator_color3 Silver
#property indicator_color4 Silver
#property indicator_level1 0
#property indicator_levelcolor Gray
#property indicator_levelstyle 2

extern int    TF                 = 0;
extern int    NMA_period         = 40;
extern int    FastNMA_period     = 40;
extern int    FastNMA_LB_min     = 8;
extern bool   Show_SD            = false;
extern int    SD_len             = 30;
extern double SD_up              = 2;
extern double SD_dn              = 2;
extern bool   Show_SD_1line_only = false;
extern bool   Show_SD_3lines_up  = true;
extern bool   Show_SD_3lines_dn  = true;
extern bool   Show_SD_3lines_md  = true;
extern bool   ValuesInPips       = false;
extern int    MaxBars            = 0;

double FastNMAvsNMA[];
double SD[];
double SD2[];
double SD3[];

int    NMAmtfbars;
double NMAmtf[][3];
double FastNMAvsNMAmtf[];
double point;

int init()
{
 string tf = "";
      if(TF == PERIOD_M1)  tf = "_M1";
 else if(TF == PERIOD_M5)  tf = "_M5";
 else if(TF == PERIOD_M15) tf = "_M15";
 else if(TF == PERIOD_M30) tf = "_M30";
 else if(TF == PERIOD_H1)  tf = "_H1";
 else if(TF == PERIOD_H4)  tf = "_H4";
 else if(TF == PERIOD_D1)  tf = "_D1";
 else if(TF == PERIOD_W1)  tf = "_W1";
 else if(TF == PERIOD_MN1) tf = "_MN1";
 else TF = Period();
 string indiname = "FastNMAvsNMA" + tf;
 string name = indiname + "(" + NMA_period + ", " + FastNMA_period + ", " + FastNMA_LB_min + ")";
 IndicatorShortName(name);
 IndicatorBuffers(4);
 SetIndexBuffer(0, FastNMAvsNMA);
 SetIndexLabel(0, name);
 SetIndexBuffer(1, SD);
 SetIndexBuffer(2, SD2);
 SetIndexBuffer(3, SD3);
 if(Show_SD_1line_only)
   {
   SetIndexLabel(1, indiname + "_SD(" + SD_len + ")");
   SetIndexLabel(2, "unused");
   SetIndexLabel(3, "unused");
   }
 else
   {
   if(Show_SD_3lines_up) SetIndexLabel(1, indiname + "_SD_up(" + SD_len + ")");
   else                  SetIndexLabel(1, "unused");
   if(Show_SD_3lines_dn) SetIndexLabel(2, indiname + "_SD_dn(" + SD_len + ")");
   else                  SetIndexLabel(2, "unused");
   if(Show_SD_3lines_md) SetIndexLabel(3, indiname + "_SD_md(" + SD_len + ")");
   else                  SetIndexLabel(3, "unused");
   }
 point = Point;
 if(MarketInfo("EURUSD", MODE_POINT) == 0.00001) point *= 10;

 int bars = Bars;
 if( (MaxBars > 0) && (MaxBars < bars) ) bars = MaxBars;
 NMAmtfbars = MathMin(bars * Period() / TF, iBars(NULL, TF));
 ArrayResize(NMAmtf, NMAmtfbars); ArrayInitialize(NMAmtf, 0);
 ArrayResize(FastNMAvsNMAmtf, NMAmtfbars); ArrayInitialize(FastNMAvsNMAmtf, 0); ArraySetAsSeries(FastNMAvsNMAmtf, true);
 return(0);
}

int start()
{
 int limit, i, ii, counted_bars = IndicatorCounted()-1, bars = Bars, nearestbar;
 double nmasum, nmaabssum, nmaratio, nmmnum, maxnmm, fastnmasum, fastnmaabssum, fastnmaratio, temp;
 bool nmadone, fastnmadone;

 if( (MaxBars > 0) && (MaxBars < bars) ) bars = MaxBars;
 if(counted_bars <= 1) limit = bars - 1;
 else                  limit = bars - counted_bars;
 if(limit < 1)         limit = 1;

 NMAmtfcalc();

 for(i = limit; i >= 0; i--)
   {
   nearestbar = iBarShift(NULL, TF, Time[i]);
   if(nearestbar < iBars(NULL, TF) - MathMax(NMA_period, FastNMA_period))
     {
     FastNMAvsNMA[i] = FastNMAvsNMAmtf[nearestbar];
     if( (Show_SD) && (nearestbar < iBars(NULL, TF) - MathMax(NMA_period, FastNMA_period) - SD_len) )
       {
       if(Show_SD_1line_only)
         {
         if(FastNMAvsNMAmtf[nearestbar] == 0)     SD[i] = 0;
         else if(FastNMAvsNMAmtf[nearestbar] > 0) SD[i] = iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_up, 0, MODE_UPPER, nearestbar);
         else if(FastNMAvsNMAmtf[nearestbar] < 0) SD[i] = iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_dn, 0, MODE_LOWER, nearestbar);
         }
       else
         {
         if(Show_SD_3lines_up)  SD[i] = iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_up, 0, MODE_UPPER, nearestbar);
         if(Show_SD_3lines_dn) SD2[i] = iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_dn, 0, MODE_LOWER, nearestbar);
         if(Show_SD_3lines_md) SD3[i] = (iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_up, 0, MODE_UPPER, nearestbar)+
                                         iBandsOnArray(FastNMAvsNMAmtf, 0, SD_len, SD_dn, 0, MODE_LOWER, nearestbar) ) / 2;
         }
       }
     }
   }

 return(0);
}

void NMAmtfcalc()
{
 int i, ii, iii, NMAoldestbar = NMAmtfbars-1 - MathMax(NMA_period, FastNMA_period);
 bool found;

 for(i = NMAoldestbar; i >= 2; i--)
   if(NMAmtf[i][0] != iTime(NULL, TF, i))
     {
     if(i == NMAoldestbar)
       {
       found = false; ii = 1;
       while( !(found) && (i-ii >= 0) )
         if(NMAmtf[i-ii][0] == iTime(NULL, TF, i)) found = true;
         else ii++;
       if(found)
         {
         for(iii = i; iii >= 0; iii--)
           if(iii-ii >= 0)
             {
             NMAmtf[iii][0] = NMAmtf[iii-ii][0];
             NMAmtf[iii][1] = NMAmtf[iii-ii][1];
             NMAmtf[iii][2] = NMAmtf[iii-ii][2];
             FastNMAvsNMAmtf[iii] = FastNMAvsNMAmtf[iii-ii];
             }
           else
             {
             NMAmtf[iii][0] = 0;
             NMAmtf[iii][1] = 0;
             NMAmtf[iii][2] = 0;
             FastNMAvsNMAmtf[iii] = 0;
             }
         }
       else
         {
         NMAmtf[i+1][1] = iClose(NULL, TF, i+1);
         NMAmtf[i+1][2] = iClose(NULL, TF, i+1);
         NMAmtf[i][0] = iTime(NULL, TF, i); NMAcalc(i);
         }
       }
     else
       {
       NMAmtf[i][0] = iTime(NULL, TF, i); NMAcalc(i);
       }
     }

 NMAmtf[1][0] = iTime(NULL, TF, 1); NMAcalc(1);
 NMAmtf[0][0] = iTime(NULL, TF, 0); NMAcalc(0);
}

void NMAcalc(int i)
{
 int ii;
 double nmasum, nmaabssum, nmaratio, nmmnum, maxnmm, fastnmasum, fastnmaabssum, fastnmaratio, temp;
 bool nmadone, fastnmadone;

 nmaratio = 0; maxnmm = 0; fastnmaratio = 0;
 int NMA_LB_max;
 for(ii = 1; ii <= FastNMA_period; ii++)
   {
   nmmnum = (MathLog(iClose(NULL, TF, i)) - MathLog(iClose(NULL, TF, i+ii))) / MathSqrt(ii);
   if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
   }
 if(NMA_LB_max < FastNMA_LB_min) NMA_LB_max = FastNMA_LB_min;
 nmasum = (MathLog(iClose(NULL, TF, i)) - MathLog(iClose(NULL, TF, i+1))) + (MathLog(iClose(NULL, TF, i+1)) - MathLog(iClose(NULL, TF, i+2))) * (MathSqrt(2)-1);
 fastnmasum = nmasum;
 nmadone = false; fastnmadone = false; ii = 2;
 while( !(nmadone) || !(fastnmadone) )
   {
   temp = (MathLog(iClose(NULL, TF, i+ii)) - MathLog(iClose(NULL, TF, i+ii+1))) * (MathSqrt(ii+1) - MathSqrt(ii));
   if(ii >= NMA_period) nmadone=true;
   else                 nmasum += temp;
   if(ii >= NMA_LB_max) fastnmadone=true;
   else                 fastnmasum += temp;
   ii++;
   }
 nmaabssum = MathAbs(nmasum);
 fastnmaabssum = MathAbs(fastnmasum);
 nmasum = 0; fastnmasum = 0;
 nmadone = false; fastnmadone = false; ii = 0;
 while( !(nmadone) || !(fastnmadone) )
   {
   temp = MathAbs(MathLog(iClose(NULL, TF, i+ii)) - MathLog(iClose(NULL, TF, i+ii+1)));
   if(ii >= NMA_period) nmadone=true;
   else                 nmasum += temp;
   if(ii >= NMA_LB_max) fastnmadone=true;
   else                 fastnmasum += temp;
   ii++;
   }
 if(nmasum != 0) nmaratio = nmaabssum / nmasum;
 if(fastnmasum != 0) fastnmaratio = fastnmaabssum / fastnmasum;
 NMAmtf[i][1] = NMAmtf[i+1][1] + (iClose(NULL, TF, i) - NMAmtf[i+1][1]) * nmaratio;
 NMAmtf[i][2] = NMAmtf[i+1][2] + (iClose(NULL, TF, i) - NMAmtf[i+1][2]) * fastnmaratio;
 FastNMAvsNMAmtf[i] = NMAmtf[i][2] - NMAmtf[i][1]; if(ValuesInPips) FastNMAvsNMAmtf[i] = FastNMAvsNMAmtf[i] / point;
}

 

Source code:

http://pastebin.com/cyTPMeih

 

 

P.S.: when stacking indicators onto each other don't forget to manually set the same fixed minimum and maximum to make sure all indicators align.

Link to comment
Share on other sites

  • 2 weeks later...

At Last-----

 

The TRIPLE STX------- it is a combination of the STX with differing dials ( one following markets very fast, the other very slow)

 

The Rainbow ----- NST, NXC and NDX in same frame----- There is a trick of involving the NST and NDX to deliver the MA, which i am yet to decipher

 

The Customised rainbow ( to show trend exhaustion)----- same with the inputs as false

 

Remaining ones----- 1.The Shadow line ( is it the ZURICH or the TEMA?)

2. STX7

3.BTX 4 with their SD and MA

 

Anyone got hold of the Ocean Plus Webinars and the Professional Ocean Webinars that Patt came out with? They are a marvel as they show how to pick stocks using Ocean Indicators ( completely untouched earlier)

Link to comment
Share on other sites

  • 4 weeks later...
Can someone pls mirror the TSD elite indies, the links not working anymore.

 

It would be a good idea to specify what links you are referring to. Anyway, I am trying to reference all important links in the opening post of this thread, so just head there and you will find what you need. Links posted by me are working.

Link to comment
Share on other sites

New mirrors

 

More of those mirrors still work, not only one. But the truth is some are really dead, unfortunately the multi-uploaders I am using don't check the hosters for subsequently broken links. I wonder who is behind those deletions.

Here is a new bunch of mirrors then, it should last for a little while.

 

ocean_theory.rar (ocean indis by mladen from TSD elite)

 

http://www.directmirror.com/files/ROH0Q0HT

http://mir.cr/0PMDJDCO

http://www.multiupload.nl/SDH97068W1

 

 

ocn_mt4_9-28-2012.7z (ocean indis by me)

 

http://www.directmirror.com/files/RAQPU9UU

http://mir.cr/1OZX59WL

http://www.multiupload.nl/0VD8XD7PWI

Edited by udc
multiupload link was mistakenly the same for both files
Link to comment
Share on other sites

More of those mirrors still work, not only one. But the truth is some are really dead, unfortunately the multi-uploaders I am using don't check the hosters for subsequently broken links. I wonder who is behind those deletions.

Here is a new bunch of mirrors then, it should last for a little while.

 

ocean_theory.rar (ocean indis by mladen from TSD elite)

 

http://www.directmirror.com/files/ROH0Q0HT

http://mir.cr/0PMDJDCO

http://www.multiupload.nl/SDH97068W1

 

 

ocn_mt4_9-28-2012.7z (ocean indis by me)

 

http://www.directmirror.com/files/RAQPU9UU

http://mir.cr/1OZX59WL

http://www.multiupload.nl/SDH97068W1

 

hi UDC

Nice to see that you are back. I have a question, is it possible to import the Ocean Plus indicators into the Multi Chart platform, I believe they are the BTX and the STX. multi chart and Tradestation are written in the same language

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...