Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #property indicator_separate_window
- #property indicator_buffers 1
- #property indicator_color1 Red
- #property indicator_level1 0
- #property indicator_level2 50
- #property indicator_level3 100
- #property indicator_levelcolor Gray
- #property indicator_levelstyle 2
- extern int NMA_period = 40;
- extern bool FastNMA = true;
- extern int NMA_LB_min = 8;
- extern int SD_len = 20;
- extern double SD_up = 1.5;
- extern double SD_dn = 1.5;
- double SD_Band_Osc[];
- double NMA[];
- double SDup[];
- double SDdn[];
- int init()
- {
- string nmaname = "NMA_SD_Band_Osc(" + NMA_period + ")";
- if(FastNMA) nmaname = "Fast_NMA_SD_Band_Osc(" + NMA_period + ", " + NMA_LB_min + ")";
- IndicatorShortName(nmaname);
- IndicatorBuffers(4);
- SetIndexBuffer(0, SD_Band_Osc);
- SetIndexLabel(0, nmaname);
- SetIndexBuffer(1, NMA);
- SetIndexBuffer(2, SDup);
- SetIndexBuffer(3, SDdn);
- return(0);
- }
- int start()
- {
- int limit, i, ii, counted_bars = IndicatorCounted();
- if(Bars <= MathMax(NMA_period, SD_len)) return(0);
- if(counted_bars < 0) counted_bars = 0;
- if(counted_bars > MathMax(NMA_period, SD_len)) limit = Bars - counted_bars;
- else limit = Bars - MathMax(NMA_period, SD_len) - 1;
- for(i = limit; i >= 0; i--)
- {
- double nmmnum, maxnmm = 0, sum, abssum, ratio = 0;
- int NMA_LB_max;
- if(FastNMA)
- {
- for(ii = 1; ii <= NMA_period; ii++)
- {
- nmmnum = (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
- if(MathAbs(nmmnum) > maxnmm) { maxnmm = MathAbs(nmmnum); NMA_LB_max = ii; }
- }
- if(NMA_LB_max < NMA_LB_min) NMA_LB_max = NMA_LB_min;
- }
- else NMA_LB_max = NMA_period;
- sum = (MathLog(Close[i]) - MathLog(Close[i+1])) + (MathLog(Close[i+1]) - MathLog(Close[i+2])) * (MathSqrt(2)-1);
- for(ii = 2; ii < NMA_LB_max; ii++)
- sum += (MathLog(Close[i+ii]) - MathLog(Close[i+ii+1])) * (MathSqrt(ii+1) - MathSqrt(ii));
- abssum = MathAbs(sum);
- sum = 0;
- for(ii = 0; ii < NMA_LB_max; ii++)
- sum += MathAbs(MathLog(Close[i+ii]) - MathLog(Close[i+ii+1]));
- if(sum != 0) ratio = abssum / sum;
- NMA[i] = NMA[i+1] + (Close[i] - NMA[i+1]) * ratio;
- SDup[i] = NMA[i] + SD_up * iStdDev(NULL, 0, SD_len, 0, 0, PRICE_CLOSE, i);
- SDdn[i] = NMA[i] - SD_dn * iStdDev(NULL, 0, SD_len, 0, 0, PRICE_CLOSE, i);
- SD_Band_Osc[i] = (Close[i] - SDdn[i]) / (SDup[i] - SDdn[i]) * 100;
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement