Guest User

NMS_with_Ocn_MAs

a guest
Apr 7th, 2012
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.23 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     NMS_period  = 40;
  11. extern int     NMA_period  = 40;
  12. extern int     NMA_LB_min  = 8;
  13.  
  14. double NMS[];
  15. double NMS_NMA[];
  16. double NMS_FastNMA[];
  17.  
  18. int init()
  19. {
  20.   IndicatorShortName("NMS_with_Ocn_MAs(" + NMS_period + ", " + NMA_period + ", " + NMA_LB_min + ")");
  21.   IndicatorBuffers(3);
  22.   SetIndexBuffer(0, NMS);
  23.   SetIndexLabel(0, "NMS(" + NMS_period + ")");
  24.   SetIndexBuffer(1, NMS_NMA);
  25.   SetIndexLabel(1, "NMS_NMA(" + NMA_period + ")");
  26.   SetIndexBuffer(2, NMS_FastNMA);
  27.   SetIndexLabel(2, "NMS_FastNMA(" + NMA_period + ", " + NMA_LB_min + ")");
  28.   return(0);
  29. }
  30.  
  31. int start()
  32. {
  33.   int limit, i, ii, counted_bars = IndicatorCounted();
  34.   double nms2, sum, abssum, ratio, nmsnum, maxnms;
  35.  
  36.   if(Bars <= NMS_period) return(0);
  37.   if(counted_bars < 0) counted_bars = 0;
  38.   if(counted_bars > NMS_period) limit = Bars - counted_bars;
  39.   else                          limit = Bars - NMS_period - 1;
  40.  
  41.   for(i = limit; i >= 0; i--)
  42.     {
  43.     nms2 = 0;
  44.     for(ii = 1; ii <= NMS_period; ii++)
  45.       {
  46.       double oLRSlope = 0, SumXY = 0, SumY = 0, SumX, SumXSqr, Divisor;
  47.       if(ii > 1)
  48.         {
  49.         SumX = ii * (ii - 1) * 0.5;
  50.         SumXSqr = ii * (ii - 1) * (2 * ii - 1) * 1/6;
  51.         Divisor = (SumX * SumX) - ii * SumXSqr;
  52.         for(int iii = 0; iii < ii; iii++)
  53.           {
  54.           SumXY += iii * MathLog(Close[i+iii]);
  55.           SumY += MathLog(Close[i+iii]);
  56.           }
  57.         oLRSlope = (ii * SumXY - SumX * SumY) / Divisor;
  58.         }
  59.       nms2 += oLRSlope * MathSqrt(ii);
  60.       }
  61.     NMS[i] = nms2 * 100;
  62.     }
  63.  
  64.   for(i = limit; i >= 0; i--)
  65.     if(i < Bars - NMS_period - 1 - NMA_period)
  66.       {
  67.       ratio = 0;
  68.       sum = (NMS[i] - NMS[i+1]) + (NMS[i+1] - NMS[i+2]) * (MathSqrt(2)-1);
  69.       for(ii = 2; ii < NMA_period; ii++)
  70.         sum += (NMS[i+ii] - NMS[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  71.       abssum = MathAbs(sum);
  72.       sum = 0;
  73.       for(ii = 0; ii < NMA_period; ii++)
  74.         sum += MathAbs(NMS[i+ii] - NMS[i+ii+1]);
  75.       if(sum != 0) ratio = abssum / sum;
  76.       NMS_NMA[i] = NMS_NMA[i+1] + (NMS[i] - NMS_NMA[i+1]) * ratio;
  77.       }
  78.  
  79.   for(i = limit; i >= 0; i--)
  80.     if(i < Bars - NMS_period - 1 - NMA_period)
  81.       {
  82.       maxnms = 0; ratio = 0;
  83.       int NMA_LB_max;
  84.       for(ii = 1; ii <= NMA_period; ii++)
  85.         {
  86.         nmsnum = (NMS[i] - NMS[i+ii]) / MathSqrt(ii);
  87.         if(MathAbs(nmsnum) > maxnms) { maxnms = MathAbs(nmsnum); NMA_LB_max = ii; }
  88.         }
  89.       if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
  90.       sum = (NMS[i] - NMS[i+1]) + (NMS[i+1] - NMS[i+2]) * (MathSqrt(2)-1);
  91.       for(ii = 2; ii < NMA_LB_max; ii++)
  92.         sum += (NMS[i+ii] - NMS[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  93.       abssum = MathAbs(sum);
  94.       sum = 0;
  95.       for(ii = 0; ii < NMA_LB_max; ii++)
  96.         sum += MathAbs(NMS[i+ii] - NMS[i+ii+1]);
  97.       if(sum != 0) ratio = abssum / sum;
  98.       NMS_FastNMA[i] = NMS_FastNMA[i+1] + (NMS[i] - NMS_FastNMA[i+1]) * ratio;
  99.       }
  100.  
  101.   return(0);
  102. }
Advertisement
Add Comment
Please, Sign In to add comment