Advertisement
Guest User

NMC2

a guest
Apr 7th, 2012
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.77 KB | None | 0 0
  1. #property indicator_separate_window
  2. #property indicator_buffers 2
  3. #property indicator_color1 Magenta
  4. #property indicator_color2 Silver
  5. #property indicator_level1 0
  6. #property indicator_levelcolor Gray
  7. #property indicator_levelstyle 2
  8.  
  9. extern int    NMC2_period         = 40;
  10. extern bool   Use_NMR_instead_NMM = false;
  11. extern bool   Show_SD             = true;
  12. extern int    SD_len              = 30;
  13. extern double SD_up               = 2;
  14. extern double SD_dn               = 2;
  15.  
  16. double NMC2[];
  17. double SD[];
  18.  
  19. int init()
  20. {
  21.   string whichone = "NMM";
  22.   if(Use_NMR_instead_NMM) whichone = "NMR";
  23.   string nmc2name = "NMC2(" + NMC2_period + ", using " + whichone + ")";
  24.   string sdname = "NMC2_SD(" + SD_len + ")";
  25.   IndicatorShortName(nmc2name);
  26.   IndicatorBuffers(2);
  27.   SetIndexBuffer(0, NMC2);
  28.   SetIndexLabel(0, nmc2name);
  29.   SetIndexBuffer(1, SD);
  30.   SetIndexLabel(1, sdname);
  31.   return(0);
  32. }
  33.  
  34. int start()
  35. {
  36.   int limit, i, ii, counted_bars = IndicatorCounted();
  37.  
  38.   if(Bars <= NMC2_period) return(0);
  39.   if(counted_bars < 0) counted_bars = 0;
  40.   if(counted_bars > NMC2_period) limit = Bars - counted_bars;
  41.   else                           limit = Bars - NMC2_period - 1;
  42.  
  43.   for(i = limit; i >= 0; i--)
  44.     {
  45.     double nms, nmm, nmr, nms2 = 0, nmm2 = 0, nmr2 = 0, whichone, avg, sign;
  46.     for(ii = 1; ii <= NMC2_period; ii++)
  47.       {
  48.       double oLRSlope = 0, SumXY = 0, SumY = 0, SumX, SumXSqr, Divisor;
  49.       if(ii > 1)
  50.         {
  51.         SumX = ii * (ii - 1) * 0.5;
  52.         SumXSqr = ii * (ii - 1) * (2 * ii - 1) * 1/6;
  53.         Divisor = (SumX * SumX) - ii * SumXSqr;
  54.         for(int iii = 0; iii < ii; iii++)
  55.           {
  56.           SumXY += iii * MathLog(Close[i+iii]);
  57.           SumY += MathLog(Close[i+iii]);
  58.           }
  59.         oLRSlope = (ii * SumXY - SumX * SumY) / Divisor;
  60.         }
  61.       nms2 += oLRSlope * MathSqrt(ii);
  62.       nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  63.       nmr2 += (MathLog(Close[i+ii-1]) - MathLog(Close[i+ii])) * (MathSqrt(ii) - MathSqrt(ii-1));
  64.       }
  65.     nms = nms2 * 100;
  66.     nmm = (nmm2 / NMC2_period) * 1000;
  67.     nmr = nmr2 * 1000;
  68.     if(Use_NMR_instead_NMM) whichone = nmr;
  69.     else                    whichone = nmm;
  70.     avg = ((MathAbs(nms) * whichone) + (MathAbs(whichone) * nms)) / 2;
  71.     if(avg > 0)      sign = 1;
  72.     else if(avg < 0) sign = -1;
  73.     else             sign = 0;
  74.     NMC2[i] = sign * MathSqrt(MathAbs(avg));
  75.     }
  76.  
  77.   if(Show_SD)
  78.     for(i = limit; i >= 0; i--)
  79.       if(i < Bars - NMC2_period - 1 - SD_len)
  80.         {
  81.         if(NMC2[i] == 0)     SD[i] = 0;
  82.         else if(NMC2[i] > 0) SD[i] = iBandsOnArray(NMC2, 0, SD_len, SD_up, 0, MODE_UPPER, i);
  83.         else if(NMC2[i] < 0) SD[i] = iBandsOnArray(NMC2, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
  84.         }
  85.  
  86.   return(0);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement