Advertisement
Guest User

Fast_NMA

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