Advertisement
Guest User

NMA_SD_Band_Osc

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