Advertisement
Guest User

NMA_SD_Band_Width

a guest
Apr 6th, 2012
47
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 1
  3. #property indicator_color1 Blue
  4.  
  5. extern int     NMA_period  = 40;
  6. extern bool    FastNMA     = true;
  7. extern int     NMA_LB_min  = 8;
  8. extern int     SD_len      = 20;
  9. extern double  SD_up       = 1.5;
  10. extern double  SD_dn       = 1.5;
  11. extern bool    Show_Pct    = false;
  12.  
  13. double SD_Band_Width[];
  14. double NMA[];
  15. double SDup[];
  16. double SDdn[];
  17.  
  18. int init()
  19. {
  20.   string nmaname = "NMA_SD_Band_Width(" + NMA_period + ")";
  21.   if(FastNMA) nmaname = "Fast_NMA_SD_Band_Width(" + NMA_period + ", " + NMA_LB_min + ")";
  22.   IndicatorShortName(nmaname);
  23.   IndicatorBuffers(4);
  24.   SetIndexBuffer(0, SD_Band_Width);
  25.   SetIndexLabel(0, nmaname);
  26.   SetIndexBuffer(1, NMA);
  27.   SetIndexBuffer(2, SDup);
  28.   SetIndexBuffer(3, SDdn);
  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 nmmnum, maxnmm = 0, sum, abssum, ratio = 0;
  44.     int NMA_LB_max;
  45.     if(FastNMA)
  46.       {
  47.       for(ii = 1; ii <= NMA_period; ii++)
  48.         {
  49.         nmmnum = (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  50.         if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
  51.         }
  52.       if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
  53.       }
  54.     else NMA_LB_max = NMA_period;
  55.     sum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
  56.     for(ii = 2; ii < NMA_LB_max; ii++)
  57.       sum += (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
  58.     abssum = MathAbs(sum);
  59.     sum = 0;
  60.     for(ii = 0; ii < NMA_LB_max; ii++)
  61.       sum += MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
  62.     if(sum != 0) ratio = abssum / sum;
  63.     NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * ratio;
  64.     SDup[i] = NMA[i] + SD_up * iStdDev(NULL, 0, SD_len, 0, 0, PRICE_CLOSE, i);
  65.     SDdn[i] = NMA[i] - SD_dn * iStdDev(NULL, 0, SD_len, 0, 0, PRICE_CLOSE, i);
  66.     if(Show_Pct) SD_Band_Width[i] = (SDup[i] - SDdn[i]) / NMA[i] * 100;
  67.     else         SD_Band_Width[i] = SDup[i] - SDdn[i];
  68.     }
  69.  
  70.   return(0);
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement