Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #property indicator_separate_window
- #property indicator_buffers 3
- #property indicator_color1 Magenta
- #property indicator_color2 Yellow
- #property indicator_color3 Aqua
- #property indicator_level1 0
- #property indicator_levelcolor Gray
- #property indicator_levelstyle 2
- extern int NMM_MACD_period = 40;
- extern int NMA_period = 40;
- extern int NMA_LB_min = 8;
- double NMM_MACD[];
- double NMM_MACD_NMA[];
- double NMM_MACD_FastNMA[];
- double NMM[];
- double NMM_MA[];
- int init()
- {
- IndicatorShortName("NMM_MACD_with_Ocn_MAs(" + NMM_MACD_period + ", " + NMA_period + ", " + NMA_LB_min + ")");
- IndicatorBuffers(5);
- SetIndexBuffer(0, NMM_MACD);
- SetIndexLabel(0, "NMM_MACD(" + NMM_MACD_period + ")");
- SetIndexBuffer(1, NMM_MACD_NMA);
- SetIndexLabel(1, "NMM_MACD_NMA(" + NMA_period + ")");
- SetIndexBuffer(2, NMM_MACD_FastNMA);
- SetIndexLabel(2, "NMM_MACD_FastNMA(" + NMA_period + ", " + NMA_LB_min + ")");
- SetIndexBuffer(3, NMM);
- SetIndexBuffer(4, NMM_MA);
- return(0);
- }
- int start()
- {
- int limit, i, ii, counted_bars = IndicatorCounted();
- double nmm2, sum, abssum, ratio, nmmnum, maxnmm;
- if(Bars <= 2*NMM_MACD_period) return(0);
- if(counted_bars < 0) counted_bars = 0;
- if(counted_bars > NMM_MACD_period) limit = Bars - counted_bars;
- else limit = Bars - NMM_MACD_period - 1;
- for(i = limit; i >= 0; i--)
- {
- nmm2 = 0;
- for(ii = 1; ii <= NMM_MACD_period; ii++)
- nmm2 += (MathLog(Close[i]) - MathLog(Close[i+ii])) / MathSqrt(ii);
- NMM[i] = (nmm2 / NMM_MACD_period) * 1000;
- }
- for(i = limit; i >= 0; i--)
- if(i < Bars - 2*NMM_MACD_period - 1)
- {
- ratio = 0;
- sum = (NMM[i] - NMM[i+1]) + (NMM[i+1] - NMM[i+2]) * (MathSqrt(2)-1);
- for(ii = 2; ii < NMM_MACD_period; ii++)
- sum += (NMM[i+ii] - NMM[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
- abssum = MathAbs(sum);
- sum = 0;
- for(ii = 0; ii < NMM_MACD_period; ii++)
- sum += MathAbs(NMM[i+ii] - NMM[i+ii+1]);
- if(sum != 0) ratio = abssum / sum;
- NMM_MA[i] = NMM_MA[i+1] + (NMM[i] - NMM_MA[i+1]) * ratio;
- NMM_MACD[i] = NMM[i] - NMM_MA[i];
- }
- for(i = limit; i >= 0; i--)
- if(i < Bars - 2*NMM_MACD_period - 1 - NMA_period)
- {
- ratio = 0;
- sum = (NMM_MACD[i] - NMM_MACD[i+1]) + (NMM_MACD[i+1] - NMM_MACD[i+2]) * (MathSqrt(2)-1);
- for(ii = 2; ii < NMA_period; ii++)
- sum += (NMM_MACD[i+ii] - NMM_MACD[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
- abssum = MathAbs(sum);
- sum = 0;
- for(ii = 0; ii < NMA_period; ii++)
- sum += MathAbs(NMM_MACD[i+ii] - NMM_MACD[i+ii+1]);
- if(sum != 0) ratio = abssum / sum;
- NMM_MACD_NMA[i] = NMM_MACD_NMA[i+1] + (NMM_MACD[i] - NMM_MACD_NMA[i+1]) * ratio;
- }
- for(i = limit; i >= 0; i--)
- if(i < Bars - 2*NMM_MACD_period - 1 - NMA_period)
- {
- maxnmm = 0; ratio = 0;
- int NMA_LB_max;
- for(ii = 1; ii <= NMA_period; ii++)
- {
- nmmnum = (NMM_MACD[i] - NMM_MACD[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;
- sum = (NMM_MACD[i] - NMM_MACD[i+1]) + (NMM_MACD[i+1] - NMM_MACD[i+2]) * (MathSqrt(2)-1);
- for(ii = 2; ii < NMA_LB_max; ii++)
- sum += (NMM_MACD[i+ii] - NMM_MACD[i+ii+1]) * (MathSqrt(ii+1) - MathSqrt(ii));
- abssum = MathAbs(sum);
- sum = 0;
- for(ii = 0; ii < NMA_LB_max; ii++)
- sum += MathAbs(NMM_MACD[i+ii] - NMM_MACD[i+ii+1]);
- if(sum != 0) ratio = abssum / sum;
- NMM_MACD_FastNMA[i] = NMM_MACD_FastNMA[i+1] + (NMM_MACD[i] - NMM_MACD_FastNMA[i+1]) * ratio;
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement