Advertisement
Guest User

Ocn_NMM_ROCx

a guest
Apr 8th, 2012
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.15 KB | None | 0 0
  1. #property indicator_separate_window
  2. #property indicator_buffers 6
  3. #property indicator_color1 Magenta
  4. #property indicator_color2 Lime
  5. #property indicator_color3 Silver
  6. #property indicator_color4 Silver
  7. #property indicator_color5 Yellow
  8. #property indicator_color6 Aqua
  9. #property indicator_level1 0
  10. #property indicator_levelcolor Gray
  11. #property indicator_levelstyle 2
  12.  
  13. extern int    NMM_ROC_period      = 40;
  14. extern int    NMM_ROC_LB          = 3;
  15. extern int    NMM_ROC_AvgLen      = 3;
  16. extern bool   Show_ZH             = true;
  17. extern double ZH_displacement     = 1;
  18. extern int    ZH_symbol           = 115;
  19. extern bool   Show_SD             = true;
  20. extern int    SD_len              = 30;
  21. extern double SD_up               = 2;
  22. extern double SD_dn               = 2;
  23. extern bool   Show_SD_1line_only  = true;
  24. extern bool   Show_SD_2lines_up   = true;
  25. extern bool   Show_SD_2lines_dn   = true;
  26. extern int    NMA_period          = 40;
  27. extern int    NMA_LB_min          = 8;
  28. extern bool   Show_NMA            = true;
  29. extern bool   Show_FastNMA        = true;
  30.  
  31. double NMM_ROC[];
  32. double ZH[];
  33. double SD[];
  34. double SD2[];
  35. double NMM_ROC_NMA[];
  36. double NMM_ROC_FastNMA[];
  37. double NMM[];
  38. double NMM_ROCx[];
  39.  
  40. int init()
  41. {
  42.   string nmmrocname = "NMM_ROC(" + NMM_ROC_period + ", " + NMM_ROC_LB + ", " + NMM_ROC_AvgLen + ")";
  43.   IndicatorShortName(nmmrocname);
  44.   IndicatorBuffers(8);
  45.   SetIndexBuffer(0, NMM_ROC);
  46.   SetIndexLabel(0, nmmrocname);
  47.   SetIndexBuffer(1, ZH);
  48.   SetIndexLabel(1, "NMM_ROC_ZH");
  49.   SetIndexStyle(1, DRAW_ARROW);
  50.   SetIndexArrow(1, ZH_symbol);
  51.   SetIndexBuffer(2, SD);
  52.   SetIndexBuffer(3, SD2);
  53.   if(Show_SD_1line_only)
  54.     {
  55.     SetIndexLabel(2, "NMM_ROC_SD(" + SD_len + ")");
  56.     SetIndexLabel(3, "unused");
  57.     }
  58.   else
  59.     {
  60.     if(Show_SD_2lines_up) SetIndexLabel(2, "NMM_ROC_SD_up(" + SD_len + ")");
  61.     else                  SetIndexLabel(2, "unused");
  62.     if(Show_SD_2lines_dn) SetIndexLabel(3, "NMM_ROC_SD_dn(" + SD_len + ")");
  63.     else                  SetIndexLabel(3, "unused");
  64.     }
  65.   SetIndexBuffer(4, NMM_ROC_NMA);
  66.   SetIndexBuffer(5, NMM_ROC_FastNMA);
  67.   if(Show_NMA) SetIndexLabel(4, "NMM_ROC_NMA(" + NMA_period + ")");
  68.   else         SetIndexLabel(4, "unused");
  69.   if(Show_FastNMA) SetIndexLabel(5, "NMM_ROC_FastNMA(" + NMA_period + ", " + NMA_LB_min + ")");
  70.   else             SetIndexLabel(5, "unused");
  71.   SetIndexBuffer(6, NMM);
  72.   SetIndexBuffer(7, NMM_ROCx);
  73.   return(0);
  74. }
  75.  
  76. int start()
  77. {
  78.   int limit, i, ii, counted_bars = IndicatorCounted();
  79.   double nmm2, sum, abssum, ratio, nmmrocnum, maxnmmroc;
  80.  
  81.   if(Bars <= NMM_ROC_period + NMM_ROC_LB + NMM_ROC_AvgLen) return(0);
  82.   if(counted_bars < 0) counted_bars = 0;
  83.   if(counted_bars > NMM_ROC_period) limit = Bars - counted_bars;
  84.   else                              limit = Bars - NMM_ROC_period - 1;
  85.  
  86.   for(i = limit; i >= 0; i--)
  87.     {
  88.     nmm2 = 0;
  89.     for(ii = 1; ii <= NMM_ROC_period; ii++)
  90.       nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  91.     NMM[i] = (nmm2 / NMM_ROC_period)  * 1000;
  92.     }
  93.  
  94.   for(i = limit; i >= 0; i--)
  95.     if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB)
  96.       NMM_ROCx[i] = NMM[i] - NMM[i+NMM_ROC_LB];
  97.  
  98.   for(i = limit; i >= 0; i--)
  99.     if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen)
  100.       {
  101.       double WtdSum = 0;
  102.       for(ii = 0; ii < NMM_ROC_AvgLen; ii++)
  103.         WtdSum += (NMM_ROC_AvgLen - ii) * NMM_ROCx[i+ii];
  104.       NMM_ROC[i] = WtdSum / ((NMM_ROC_AvgLen + 1) * NMM_ROC_AvgLen * 0.5);
  105.       if(Show_ZH) { if(NMM_ROC[i] == 0) ZH[i] = ZH_displacement; else ZH[i] = EMPTY_VALUE; }
  106.       }
  107.  
  108.   if(Show_SD)
  109.     for(i = limit; i >= 0; i--)
  110.       if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen - SD_len)
  111.         {
  112.         if(Show_SD_1line_only)
  113.           {
  114.           if(NMM_ROC[i] == 0)     SD[i] = 0;
  115.           else if(NMM_ROC[i] > 0) SD[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_up, 0, MODE_UPPER, i);
  116.           else if(NMM_ROC[i] < 0) SD[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
  117.           }
  118.         else
  119.           {
  120.           if(NMM_ROC[i] == 0)
  121.             {
  122.             if(Show_SD_2lines_up) SD[i] = 0;
  123.             if(Show_SD_2lines_dn) SD2[i] = 0;
  124.             }
  125.           else
  126.             {
  127.             if(Show_SD_2lines_up) SD[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_up, 0, MODE_UPPER, i);
  128.             if(Show_SD_2lines_dn) SD2[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
  129.             }
  130.           }
  131.         }
  132.  
  133.   if(Show_NMA)
  134.     for(i = limit; i >= 0; i--)
  135.       if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen - NMA_period)
  136.         {
  137.         ratio = 0;
  138.         sum = (NMM_ROC[i] - NMM_ROC[i+1]) + (NMM_ROC[i+1] - NMM_ROC[i+2]) * (MathSqrt(2)-1);
  139.         for(ii = 2; ii < NMA_period; ii++)
  140.           sum += (NMM_ROC[i+ii] - NMM_ROC[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  141.         abssum = MathAbs(sum);
  142.         sum = 0;
  143.         for(ii = 0; ii < NMA_period; ii++)
  144.           sum += MathAbs(NMM_ROC[i+ii] - NMM_ROC[i+ii+1]);
  145.         if(sum != 0) ratio = abssum / sum;
  146.         NMM_ROC_NMA[i] = NMM_ROC_NMA[i+1] + (NMM_ROC[i] - NMM_ROC_NMA[i+1]) * ratio;
  147.         }
  148.  
  149.   if(Show_FastNMA)
  150.     for(i = limit; i >= 0; i--)
  151.       if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen - NMA_period)
  152.         {
  153.         maxnmmroc = 0; ratio = 0;
  154.         int NMA_LB_max;
  155.         for(ii = 1; ii <= NMA_period; ii++)
  156.           {
  157.           nmmrocnum = (NMM_ROC[i] - NMM_ROC[i+ii]) / MathSqrt(ii);
  158.           if(MathAbs(nmmrocnum) > maxnmmroc) { maxnmmroc = MathAbs(nmmrocnum); NMA_LB_max = ii; }
  159.           }
  160.         if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
  161.         sum = (NMM_ROC[i] - NMM_ROC[i+1]) + (NMM_ROC[i+1] - NMM_ROC[i+2]) * (MathSqrt(2)-1);
  162.         for(ii = 2; ii < NMA_LB_max; ii++)
  163.           sum += (NMM_ROC[i+ii] - NMM_ROC[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
  164.         abssum = MathAbs(sum);
  165.         sum = 0;
  166.         for(ii = 0; ii < NMA_LB_max; ii++)
  167.           sum += MathAbs(NMM_ROC[i+ii] - NMM_ROC[i+ii+1]);
  168.         if(sum != 0) ratio = abssum / sum;
  169.         NMM_ROC_FastNMA[i] = NMM_ROC_FastNMA[i+1] + (NMM_ROC[i] - NMM_ROC_FastNMA[i+1]) * ratio;
  170.         }
  171.  
  172.   return(0);
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement