Advertisement
Guest User

NMC2_with_Ocn_MAs

a guest
Apr 7th, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.06 KB | None | 0 0
  1. #property indicator_separate_window
  2. #property indicator_buffers 3
  3. #property indicator_color1 Magenta
  4. #property indicator_color2 Yellow
  5. #property indicator_color3 Aqua
  6. #property indicator_level1 0
  7. #property indicator_levelcolor Gray
  8. #property indicator_levelstyle 2
  9.  
  10. extern int    NMC2_period         = 40;
  11. extern bool   Use_NMR_instead_NMM = false;
  12. extern int    NMA_period          = 40;
  13. extern int    NMA_LB_min          = 8;
  14.  
  15. double NMC2[];
  16. double NMC2_NMA[];
  17. double NMC2_FastNMA[];
  18.  
  19. int init()
  20. {
  21.   string whichone = "NMM";
  22.   if(Use_NMR_instead_NMM) whichone = "NMR";
  23.   IndicatorShortName("NMC2_with_Ocn_MAs(" + NMC2_period + ", using " + whichone + ", " + NMA_period + ", " + NMA_LB_min + ")");
  24.   IndicatorBuffers(3);
  25.   SetIndexBuffer(0, NMC2);
  26.   SetIndexLabel(0, "NMC2(" + NMC2_period + ", using " + whichone + ")");
  27.   SetIndexBuffer(1, NMC2_NMA);
  28.   SetIndexLabel(1, "NMC2_NMA(" + NMA_period + ")");
  29.   SetIndexBuffer(2, NMC2_FastNMA);
  30.   SetIndexLabel(2, "NMC2_FastNMA(" + NMA_period + ", " + NMA_LB_min + ")");
  31.   return(0);
  32. }
  33.  
  34. int start()
  35. {
  36.   int limit, i, ii, counted_bars = IndicatorCounted();
  37.   double nms, nmm, nmr, nms2, nmm2, nmr2, whichone, avg, sign, sum, abssum, ratio, nmc2num, maxnmc2;
  38.  
  39.   if(Bars <= NMC2_period) return(0);
  40.   if(counted_bars < 0) counted_bars = 0;
  41.   if(counted_bars > NMC2_period) limit = Bars - counted_bars;
  42.   else                           limit = Bars - NMC2_period - 1;
  43.  
  44.   for(i = limit; i >= 0; i--)
  45.     {
  46.     nms2 = 0; nmm2 = 0; nmr2 = 0;
  47.     for(ii = 1; ii <= NMC2_period; ii++)
  48.       {
  49.       double oLRSlope = 0, SumXY = 0, SumY = 0, SumX, SumXSqr, Divisor;
  50.       if(ii > 1)
  51.         {
  52.         SumX = ii * (ii - 1) * 0.5;
  53.         SumXSqr = ii * (ii - 1) * (2 * ii - 1) * 1/6;
  54.         Divisor = (SumX * SumX) - ii * SumXSqr;
  55.         for(int iii = 0; iii < ii; iii++)
  56.           {
  57.           SumXY += iii * MathLog(Close[i+iii]);
  58.           SumY += MathLog(Close[i+iii]);
  59.           }
  60.         oLRSlope = (ii * SumXY - SumX * SumY) / Divisor;
  61.         }
  62.       nms2 += oLRSlope * MathSqrt(ii);
  63.       nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  64.       nmr2 += (MathLog(Close[i+ii-1]) - MathLog(Close[i+ii])) * (MathSqrt(ii) - MathSqrt(ii-1));
  65.       }
  66.     nms = nms2 * 100;
  67.     nmm = (nmm2 / NMC2_period) * 1000;
  68.     nmr = nmr2 * 1000;
  69.     if(Use_NMR_instead_NMM) whichone = nmr;
  70.     else                    whichone = nmm;
  71.     avg = ((MathAbs(nms) * whichone) + (MathAbs(whichone) * nms)) / 2;
  72.     if(avg > 0)      sign = 1;
  73.     else if(avg < 0) sign = -1;
  74.     else             sign = 0;
  75.     NMC2[i] = sign * MathSqrt(MathAbs(avg));
  76.     }
  77.  
  78.   for(i = limit; i >= 0; i--)
  79.     if(i < Bars - NMC2_period - 1 - NMA_period)
  80.       {
  81.       ratio = 0;
  82.       sum = (NMC2[i] - NMC2[i+1]) + (NMC2[i+1] - NMC2[i+2]) * (MathSqrt(2)-1);
  83.       for(ii = 2; ii < NMA_period; ii++)
  84.         sum += (NMC2[i+ii] - NMC2[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  85.       abssum = MathAbs(sum);
  86.       sum = 0;
  87.       for(ii = 0; ii < NMA_period; ii++)
  88.         sum += MathAbs(NMC2[i+ii] - NMC2[i+ii+1]);
  89.       if(sum != 0) ratio = abssum / sum;
  90.       NMC2_NMA[i] = NMC2_NMA[i+1] + (NMC2[i] - NMC2_NMA[i+1]) * ratio;
  91.       }
  92.  
  93.   for(i = limit; i >= 0; i--)
  94.     if(i < Bars - NMC2_period - 1 - NMA_period)
  95.       {
  96.       maxnmc2 = 0; ratio = 0;
  97.       int NMA_LB_max;
  98.       for(ii = 1; ii <= NMA_period; ii++)
  99.         {
  100.         nmc2num = (NMC2[i] - NMC2[i+ii]) / MathSqrt(ii);
  101.         if(MathAbs(nmc2num) > maxnmc2) { maxnmc2 = MathAbs(nmc2num); NMA_LB_max = ii; }
  102.         }
  103.       if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
  104.       sum = (NMC2[i] - NMC2[i+1]) + (NMC2[i+1] - NMC2[i+2]) * (MathSqrt(2)-1);
  105.       for(ii = 2; ii < NMA_LB_max; ii++)
  106.         sum += (NMC2[i+ii] - NMC2[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  107.       abssum = MathAbs(sum);
  108.       sum = 0;
  109.       for(ii = 0; ii < NMA_LB_max; ii++)
  110.         sum += MathAbs(NMC2[i+ii] - NMC2[i+ii+1]);
  111.       if(sum != 0) ratio = abssum / sum;
  112.       NMC2_FastNMA[i] = NMC2_FastNMA[i+1] + (NMC2[i] - NMC2_FastNMA[i+1]) * ratio;
  113.       }
  114.  
  115.   return(0);
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement