Advertisement
Guest User

NMM_MACD

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