Advertisement
Guest User

Ocn_NMA_SD_Band_Oscx

a guest
Apr 8th, 2012
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.02 KB | None | 0 0
  1. #property indicator_separate_window
  2. #property indicator_buffers 2
  3. #property indicator_color1 Yellow
  4. #property indicator_color2 Aqua
  5. #property indicator_level1 50
  6. #property indicator_level2 0
  7. #property indicator_level3 -50
  8. #property indicator_levelcolor Gray
  9. #property indicator_levelstyle 2
  10.  
  11. extern bool    Show_NMA       = true;
  12. extern int     NMA_period     = 40;
  13. extern int     NMA_SD_len     = 30;
  14. extern double  NMA_SD_up      = 2;
  15. extern double  NMA_SD_dn      = 2;
  16. extern bool    Show_FastNMA   = true;
  17. extern int     FastNMA_period = 40;
  18. extern int     FastNMA_LB_min = 8;
  19. extern int     FastNMA_SD_len = 20;
  20. extern double  FastNMA_SD_up  = 1.5;
  21. extern double  FastNMA_SD_dn  = 1.5;
  22.  
  23. double NMA_SD_Band_Osc[];
  24. double NMA[];
  25. double NMA_SDup[];
  26. double NMA_SDdn[];
  27. double FastNMA_SD_Band_Osc[];
  28. double FastNMA[];
  29. double FastNMA_SDup[];
  30. double FastNMA_SDdn[];
  31.  
  32. int init()
  33. {
  34.   IndicatorShortName("NMA_SD_Band_Osc(" + NMA_period + ", " + FastNMA_period + ", " + FastNMA_LB_min + ")");
  35.   IndicatorBuffers(8);
  36.   SetIndexBuffer(0, NMA_SD_Band_Osc);
  37.   SetIndexLabel(0, "NMA_SD_Band_Osc(" + NMA_period + ")");
  38.   SetIndexBuffer(1, FastNMA_SD_Band_Osc);
  39.   SetIndexLabel(1, "FastNMA_SD_Band_Osc(" + FastNMA_period + ", " + FastNMA_LB_min + ")");
  40.   SetIndexBuffer(2, NMA);
  41.   SetIndexBuffer(3, NMA_SDup);
  42.   SetIndexBuffer(4, NMA_SDdn);
  43.   SetIndexBuffer(5, FastNMA);
  44.   SetIndexBuffer(6, FastNMA_SDup);
  45.   SetIndexBuffer(7, FastNMA_SDdn);
  46.   return(0);
  47. }
  48.  
  49. int start()
  50. {
  51.   int limit, i, ii, counted_bars = IndicatorCounted();
  52.   int max = MathMax(Show_NMA * MathMax(NMA_period, NMA_SD_len), Show_FastNMA * MathMax(FastNMA_period, FastNMA_SD_len));
  53.   double sum, abssum, ratio, nmmnum, maxnmm;
  54.  
  55.   if(Bars <= max) return(0);
  56.   if(counted_bars < 0) counted_bars = 0;
  57.   if(counted_bars > max) limit = Bars - counted_bars;
  58.   else                   limit = Bars - max - 1;
  59.  
  60.   if(Show_NMA)
  61.     for(i = limit; i >= 0; i--)
  62.       {
  63.       ratio = 0;
  64.       sum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
  65.       for(ii = 2; ii < NMA_period; ii++)
  66.         sum += (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
  67.       abssum = MathAbs(sum);
  68.       sum = 0;
  69.       for(ii = 0; ii < NMA_period; ii++)
  70.         sum += MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
  71.       if(sum != 0) ratio = abssum / sum;
  72.       NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * ratio;
  73.       NMA_SDup[i] = NMA[i] + NMA_SD_up * iStdDev(NULL, 0, NMA_SD_len, 0, 0, PRICE_CLOSE, i);
  74.       NMA_SDdn[i] = NMA[i] - NMA_SD_dn * iStdDev(NULL, 0, NMA_SD_len, 0, 0, PRICE_CLOSE, i);
  75.       NMA_SD_Band_Osc[i] = ((Close[i] - NMA_SDdn[i]) / (NMA_SDup[i] - NMA_SDdn[i]) * 100) - 50;
  76.       }
  77.  
  78.   if(Show_FastNMA)
  79.     for(i = limit; i >= 0; i--)
  80.       {
  81.       maxnmm = 0; ratio = 0;
  82.       int NMA_LB_max;
  83.       for(ii = 1; ii <= FastNMA_period; ii++)
  84.         {
  85.         nmmnum = (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
  86.         if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
  87.         }
  88.       if(NMA_LB_max < FastNMA_LB_min) NMA_LB_max = FastNMA_LB_min;
  89.       sum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
  90.       for(ii = 2; ii < NMA_LB_max; ii++)
  91.         sum += (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
  92.       abssum = MathAbs(sum);
  93.       sum = 0;
  94.       for(ii = 0; ii < NMA_LB_max; ii++)
  95.         sum += MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
  96.       if(sum != 0) ratio = abssum / sum;
  97.       FastNMA[i] = FastNMA[i+1] + (Close[i] - FastNMA[i+1]) * ratio;
  98.       FastNMA_SDup[i] = FastNMA[i] + FastNMA_SD_up * iStdDev(NULL, 0, FastNMA_SD_len, 0, 0, PRICE_CLOSE, i);
  99.       FastNMA_SDdn[i] = FastNMA[i] - FastNMA_SD_dn * iStdDev(NULL, 0, FastNMA_SD_len, 0, 0, PRICE_CLOSE, i);
  100.       FastNMA_SD_Band_Osc[i] = ((Close[i] - FastNMA_SDdn[i]) / (FastNMA_SDup[i] - FastNMA_SDdn[i]) * 100) - 50;
  101.       }
  102.  
  103.   return(0);
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement