COG





//+------------------------------------------------------------------+
//|                                                          COG.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 RoyalBlue
#property indicator_color2 LimeGreen
#property indicator_color3 LimeGreen
#property indicator_color4 Goldenrod
#property indicator_color5 Goldenrod
#property indicator_color6 DeepSkyBlue
#property indicator_color7 DeepSkyBlue

extern int bars_back = 123;
extern int m = 2;
extern int i = 0;
extern double kstd = 2.0;
extern int sName = 1102;
double g_ibuf_100[];
double g_ibuf_104[];
double g_ibuf_108[];
double g_ibuf_112[];
double g_ibuf_116[];
double g_ibuf_120[];
double g_ibuf_124[];
double gda_128[10][10];
double gda_132[10];
double gda_136[10];
double gda_140[20];
double gd_144;
int gi_unused_152;
int g_period_156;
int gi_160;
double gd_168;
double gd_176;
double gd_184;
int gi_192;
int gi_196;
int gi_200;
int gi_204;
int gi_208;
double gd_212;
double gd_220;

int init() {
   IndicatorShortName("COG");
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, g_ibuf_100);
   SetIndexBuffer(1, g_ibuf_104);
   SetIndexBuffer(2, g_ibuf_108);
   SetIndexBuffer(3, g_ibuf_112);
   SetIndexBuffer(4, g_ibuf_116);
   SetIndexBuffer(5, g_ibuf_120);
   SetIndexBuffer(6, g_ibuf_124);
   g_period_156 = MathRound(bars_back);
   gi_208 = m + 1;
   ObjectCreate("pr" + sName, OBJ_ARROW, 0, Time[g_period_156], g_ibuf_100[g_period_156]);
   ObjectSet("pr" + sName, OBJPROP_ARROWCODE, 159);
   return (0);
}

int deinit() {
   ObjectDelete("pr" + sName);
   return (0);
}

int start() {
   gi_unused_152 = iBarShift(Symbol(), Period(), ObjectGet("pr" + sName, OBJPROP_TIME1));
   g_period_156 = bars_back;
   gda_140[1] = g_period_156 + 1;
   SetIndexDrawBegin(0, Bars - g_period_156 - 1);
   SetIndexDrawBegin(1, Bars - g_period_156 - 1);
   SetIndexDrawBegin(2, Bars - g_period_156 - 1);
   SetIndexDrawBegin(3, Bars - g_period_156 - 1);
   SetIndexDrawBegin(4, Bars - g_period_156 - 1);
   SetIndexDrawBegin(5, Bars - g_period_156 - 1);
   SetIndexDrawBegin(6, Bars - g_period_156 - 1);
   for (int li_0 = 1; li_0 <= gi_208 << 1 - 2; li_0++) {
      gd_144 = 0;
      for (gi_160 = i; gi_160 <= i + g_period_156; gi_160++) gd_144 += MathPow(gi_160, li_0);
      gda_140[li_0 + 1] = gd_144;
   }
   for (li_0 = 1; li_0 <= gi_208; li_0++) {
      gd_144 = 0.0;
      for (gi_160 = i; gi_160 <= i + g_period_156; gi_160++) {
         if (li_0 == 1) gd_144 += Close[gi_160];
         else gd_144 += Close[gi_160] * MathPow(gi_160, li_0 - 1);
      }
      gda_132[li_0] = gd_144;
   }
   for (gi_196 = 1; gi_196 <= gi_208; gi_196++) {
      for (gi_192 = 1; gi_192 <= gi_208; gi_192++) {
         gi_200 = gi_192 + gi_196 - 1;
         gda_128[gi_192][gi_196] = gda_140[gi_200];
      }
   }
   for (gi_200 = 1; gi_200 <= gi_208 - 1; gi_200++) {
      gi_204 = 0;
      gd_176 = 0;
      for (gi_192 = gi_200; gi_192 <= gi_208; gi_192++) {
         if (MathAbs(gda_128[gi_192][gi_200]) > gd_176) {
            gd_176 = MathAbs(gda_128[gi_192][gi_200]);
            gi_204 = gi_192;
         }
      }
      if (gi_204 == 0) return (0);
      if (gi_204 != gi_200) {
         for (gi_196 = 1; gi_196 <= gi_208; gi_196++) {
            gd_184 = gda_128[gi_200][gi_196];
            gda_128[gi_200][gi_196] = gda_128[gi_204][gi_196];
            gda_128[gi_204][gi_196] = gd_184;
         }
         gd_184 = gda_132[gi_200];
         gda_132[gi_200] = gda_132[gi_204];
         gda_132[gi_204] = gd_184;
      }
      for (gi_192 = gi_200 + 1; gi_192 <= gi_208; gi_192++) {
         gd_168 = gda_128[gi_192][gi_200] / gda_128[gi_200][gi_200];
         for (gi_196 = 1; gi_196 <= gi_208; gi_196++) {
            if (gi_196 == gi_200) gda_128[gi_192][gi_196] = 0;
            else gda_128[gi_192][gi_196] = gda_128[gi_192][gi_196] - gd_168 * gda_128[gi_200][gi_196];
         }
         gda_132[gi_192] = gda_132[gi_192] - gd_168 * gda_132[gi_200];
      }
   }
   gda_136[gi_208] = gda_132[gi_208] / gda_128[gi_208][gi_208];
   for (gi_192 = gi_208 - 1; gi_192 >= 1; gi_192--) {
      gd_184 = 0;
      for (gi_196 = 1; gi_196 <= gi_208 - gi_192; gi_196++) {
         gd_184 += (gda_128[gi_192][gi_192 + gi_196]) * (gda_136[gi_192 + gi_196]);
         gda_136[gi_192] = 1 / gda_128[gi_192][gi_192] * (gda_132[gi_192] - gd_184);
      }
   }
   for (gi_160 = i; gi_160 <= i + g_period_156; gi_160++) {
      gd_144 = 0;
      for (gi_200 = 1; gi_200 <= m; gi_200++) gd_144 += (gda_136[gi_200 + 1]) * MathPow(gi_160, gi_200);
      g_ibuf_100[gi_160] = gda_136[1] + gd_144;
   }
   gd_212 = 0.0;
   for (gi_160 = i; gi_160 <= i + g_period_156; gi_160++) gd_212 += MathPow(Close[gi_160] - g_ibuf_100[gi_160], 2);
   gd_212 = MathSqrt(gd_212 / (g_period_156 + 1)) * kstd;
   gd_220 = iStdDev(NULL, 0, g_period_156, 0, MODE_SMA, PRICE_CLOSE, i) * kstd;
   for (gi_160 = i; gi_160 <= i + g_period_156; gi_160++) {
      g_ibuf_104[gi_160] = g_ibuf_100[gi_160] + gd_212;
      g_ibuf_108[gi_160] = g_ibuf_100[gi_160] - gd_212;
      g_ibuf_112[gi_160] = g_ibuf_100[gi_160] + gd_220;
      g_ibuf_116[gi_160] = g_ibuf_100[gi_160] - gd_220;
      g_ibuf_120[gi_160] = g_ibuf_104[gi_160] + (g_ibuf_112[gi_160] - g_ibuf_104[gi_160]) / 2.0;
      g_ibuf_124[gi_160] = g_ibuf_116[gi_160] + (g_ibuf_108[gi_160] - g_ibuf_116[gi_160]) / 2.0;
   }
   ObjectMove("pr" + sName, 0, Time[g_period_156], g_ibuf_100[g_period_156]);
   return (0);
}



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Standard Deviation indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: