Advertisement
Guest User

NMM_ROC

a guest
Apr 7th, 2012
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.37 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     NMM_ROC_period = 40;
  10. extern int     NMM_ROC_LB     = 3;
  11. extern int     NMM_ROC_AvgLen = 3;
  12. extern bool    Show_SD        = true;
  13. extern int     SD_len         = 30;
  14. extern double  SD_up          = 2;
  15. extern double  SD_dn          = 2;
  16.  
  17. double NMM_ROC[];
  18. double SD[];
  19. double NMM[];
  20. double NMM_ROCx[];
  21.  
  22. int init()
  23. {
  24.   string nmmrocname = "NMM_ROC(" + NMM_ROC_period + ", " + NMM_ROC_LB + ", " + NMM_ROC_AvgLen + ")";
  25.   string sdname = "NMM_ROC_SD(" + SD_len + ")";
  26.   IndicatorShortName(nmmrocname);
  27.   IndicatorBuffers(4);
  28.   SetIndexBuffer(0, NMM_ROC);
  29.   SetIndexLabel(0, nmmrocname);
  30.   SetIndexBuffer(1, SD);
  31.   SetIndexLabel(1, sdname);
  32.   SetIndexBuffer(2, NMM);
  33.   SetIndexBuffer(3, NMM_ROCx);
  34.   return(0);
  35. }
  36.  
  37. int start()
  38. {
  39.   int limit, i, ii, counted_bars = IndicatorCounted();
  40.  
  41.   if(Bars <= NMM_ROC_period + NMM_ROC_LB + NMM_ROC_AvgLen) return(0);
  42.   if(counted_bars < 0) counted_bars = 0;
  43.   if(counted_bars > NMM_ROC_period) limit = Bars - counted_bars;
  44.   else                              limit = Bars - NMM_ROC_period - 1;
  45.  
  46.   for(i = limit; i >= 0; i--)
  47.     {
  48.     double nmm2 = 0;
  49.     for(ii = 1; ii <= NMM_ROC_period; ii++)
  50.       nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  51.     NMM[i] = (nmm2 / NMM_ROC_period)  * 1000;
  52.     }
  53.  
  54.   for(i = limit; i >= 0; i--)
  55.     if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB)
  56.       NMM_ROCx[i] = NMM[i] - NMM[i+NMM_ROC_LB];
  57.  
  58.   for(i = limit; i >= 0; i--)
  59.     if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen)
  60.       {
  61.       double WtdSum = 0;
  62.       for(ii = 0; ii < NMM_ROC_AvgLen; ii++)
  63.         WtdSum += (NMM_ROC_AvgLen - ii) * NMM_ROCx[i+ii];
  64.       NMM_ROC[i] = WtdSum / ((NMM_ROC_AvgLen + 1) * NMM_ROC_AvgLen * 0.5);
  65.       }
  66.  
  67.   if(Show_SD)
  68.     for(i = limit; i >= 0; i--)
  69.       if(i < Bars - NMM_ROC_period - 1 - NMM_ROC_LB - NMM_ROC_AvgLen - SD_len)
  70.         {
  71.         if(NMM_ROC[i] == 0)     SD[i] = 0;
  72.         else if(NMM_ROC[i] > 0) SD[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_up, 0, MODE_UPPER, i);
  73.         else if(NMM_ROC[i] < 0) SD[i] = iBandsOnArray(NMM_ROC, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
  74.         }
  75.  
  76.   return(0);
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement