Advertisement
Guest User

NMC_with_Ocn_MAs

a guest
Apr 7th, 2012
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.17 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     NMC_period  = 40;
  11. extern int     NMA_period  = 40;
  12. extern int     NMA_LB_min  = 8;
  13.  
  14. double NMC[];
  15. double NMC_NMA[];
  16. double NMC_FastNMA[];
  17.  
  18. int init()
  19. {
  20.   IndicatorShortName("NMC_with_Ocn_MAs(" + NMC_period + ", " + NMA_period + ", " + NMA_LB_min + ")");
  21.   IndicatorBuffers(3);
  22.   SetIndexBuffer(0, NMC);
  23.   SetIndexLabel(0, "NMC(" + NMC_period + ")");
  24.   SetIndexBuffer(1, NMC_NMA);
  25.   SetIndexLabel(1, "NMC_NMA(" + NMA_period + ")");
  26.   SetIndexBuffer(2, NMC_FastNMA);
  27.   SetIndexLabel(2, "NMC_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 nmm, nmr, nmm2, nmr2, avg, sign, sum, abssum, ratio, nmcnum, maxnmc;
  35.  
  36.   if(Bars <= NMC_period) return(0);
  37.   if(counted_bars < 0) counted_bars = 0;
  38.   if(counted_bars > NMC_period) limit = Bars - counted_bars;
  39.   else                          limit = Bars - NMC_period - 1;
  40.  
  41.   for(i = limit; i >= 0; i--)
  42.     {
  43.     nmm2 = 0; nmr2 = 0;
  44.     for(ii = 1; ii <= NMC_period; ii++)
  45.       {
  46.       nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  47.       nmr2 += (MathLog(Close[i+ii-1]) - MathLog(Close[i+ii])) * (MathSqrt(ii) - MathSqrt(ii-1));
  48.       }
  49.     nmm = (nmm2 / NMC_period) * 1000;
  50.     nmr = nmr2 * 1000;
  51.     avg = ((MathAbs(nmm) * nmr) + (MathAbs(nmr) * nmm)) / 2;
  52.     if(avg > 0)      sign = 1;
  53.     else if(avg < 0) sign = -1;
  54.     else             sign = 0;
  55.     NMC[i] = sign * MathSqrt(MathAbs(avg));
  56.     }
  57.  
  58.   for(i = limit; i >= 0; i--)
  59.     if(i < Bars - NMC_period - 1 - NMA_period)
  60.       {
  61.       ratio = 0;
  62.       sum = (NMC[i] - NMC[i+1]) + (NMC[i+1] - NMC[i+2]) * (MathSqrt(2)-1);
  63.       for(ii = 2; ii < NMA_period; ii++)
  64.         sum += (NMC[i+ii] - NMC[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  65.       abssum = MathAbs(sum);
  66.       sum = 0;
  67.       for(ii = 0; ii < NMA_period; ii++)
  68.         sum += MathAbs(NMC[i+ii] - NMC[i+ii+1]);
  69.       if(sum != 0) ratio = abssum / sum;
  70.       NMC_NMA[i] = NMC_NMA[i+1] + (NMC[i] - NMC_NMA[i+1]) * ratio;
  71.       }
  72.  
  73.   for(i = limit; i >= 0; i--)
  74.     if(i < Bars - NMC_period - 1 - NMA_period)
  75.       {
  76.       maxnmc = 0; ratio = 0;
  77.       int NMA_LB_max;
  78.       for(ii = 1; ii <= NMA_period; ii++)
  79.         {
  80.         nmcnum = (NMC[i] - NMC[i+ii]) / MathSqrt(ii);
  81.         if(MathAbs(nmcnum) > maxnmc) { maxnmc = MathAbs(nmcnum); NMA_LB_max = ii; }
  82.         }
  83.       if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
  84.       sum = (NMC[i] - NMC[i+1]) + (NMC[i+1] - NMC[i+2]) * (MathSqrt(2)-1);
  85.       for(ii = 2; ii < NMA_LB_max; ii++)
  86.         sum += (NMC[i+ii] - NMC[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  87.       abssum = MathAbs(sum);
  88.       sum = 0;
  89.       for(ii = 0; ii < NMA_LB_max; ii++)
  90.         sum += MathAbs(NMC[i+ii] - NMC[i+ii+1]);
  91.       if(sum != 0) ratio = abssum / sum;
  92.       NMC_FastNMA[i] = NMC_FastNMA[i+1] + (NMC[i] - NMC_FastNMA[i+1]) * ratio;
  93.       }
  94.  
  95.   return(0);
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement