Advertisement
Guest User

NMA

a guest
Apr 5th, 2012
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. #property indicator_chart_window
  2. #property indicator_buffers 3
  3. #property indicator_color1 Yellow
  4. #property indicator_color2 Gray
  5. #property indicator_color3 Gray
  6.  
  7. extern int     NMA_period  = 40;
  8. extern bool    Show_SD     = true;
  9. extern int     SD_len      = 30;
  10. extern double  SD_up       = 2;
  11. extern double  SD_dn       = 2;
  12.  
  13. double NMA[];
  14. double SDup[];
  15. double SDdn[];
  16.  
  17. int init()
  18. {
  19.   string nmaname = "NMA(" + NMA_period + ")";
  20.   string sdname = "NMA_SD(" + SD_len + ")";
  21.   IndicatorShortName(nmaname);
  22.   IndicatorBuffers(3);
  23.   SetIndexBuffer(0, NMA);
  24.   SetIndexLabel(0, nmaname);
  25.   SetIndexBuffer(1, SDup);
  26.   SetIndexLabel(1, sdname+"_up");
  27.   SetIndexBuffer(2, SDdn);
  28.   SetIndexLabel(2, sdname+"_dn");
  29.   return(0);
  30. }
  31.  
  32. int start()
  33. {
  34.   int limit, i, ii, counted_bars = IndicatorCounted();
  35.  
  36.   if(Bars <= MathMax(NMA_period, SD_len)) return(0);
  37.   if(counted_bars < 0) counted_bars = 0;
  38.   if(counted_bars > MathMax(NMA_period, SD_len)) limit = Bars - counted_bars;
  39.   else                                           limit = Bars - MathMax(NMA_period, SD_len) - 1;
  40.  
  41.   for(i = limit; i >= 0; i--)
  42.     {
  43.     double sum, abssum, ratio;
  44.     sum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
  45.     for(ii = 2; ii < NMA_period; ii++)
  46.       sum += (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
  47.     abssum = MathAbs(sum);
  48.     sum = 0;
  49.     for(ii = 0; ii < NMA_period; ii++)
  50.       sum += MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
  51.     if(sum != 0) ratio = abssum / sum;
  52.     NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * ratio;
  53.     if(Show_SD)
  54.       {
  55.       SDup[i] = NMA[i] + SD_up * iStdDev(Symbol(), Period(), SD_len, 0, 0, PRICE_CLOSE, i);
  56.       SDdn[i] = NMA[i] - SD_dn * iStdDev(Symbol(), Period(), SD_len, 0, 0, PRICE_CLOSE, i);
  57.       }
  58.     }
  59.   return(0);
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement