Advertisement
Guest User

NMM_MACD_with_Ocn_MAs

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