4th degree - perhaps. You can tell the degree by how many inflections there are in the plot of the indicator as follows: zero inflections - a straight line - linear regression line One inflection - a parabola - a quadratic equation Two inflections - a cubic equation ax^3+bx^2+cx+d=0 Part way through the UTube video I saw two inflections. Three inflections - a 4th order polynomial can produce 3 changes in slope - inflections. I only saw two in the video.
As you get to higher order polynomials, the plots on the price graph look more and more like a simple moving average plot - but requiring much more computation. ReefBreak --- In [email protected], "Edward Pottasch" <empotta...@...> wrote: > > seems this "centre of gravity" system is based on polynomial fit of the > fourth degree. Seems to me that inherent to such a fit is repainting, meaning > that when new information becomes available (new data) it will calculate a > slightly different fit. Apparently some people made a version of this system > that avoids repainting. Not sure yet how they do that. Also it seems that > people seem to have success using the version of the system that repaints. I > am not sure how people trade this when you can not do a reliable backtest. > > rgds, Ed > > > > > > ----- Original Message ----- > From: Michel Guibert > To: [email protected] > Sent: Tuesday, April 14, 2009 5:27 PM > Subject: RE: [amibroker] Re: Gravity center mustafa Belkhayate > > > > > > > Apparently this is the official code under metatrader > ======================================== > > #property indicator_chart_window > #property indicator_buffers 7 > #property indicator_color1 Blue > #property indicator_color2 DimGray > #property indicator_color3 Red > #property indicator_color4 Red > #property indicator_color5 DimGray > #property indicator_color6 LimeGreen > #property indicator_color7 LimeGreen > > extern int Nmbr_Bars = 180; > extern int Order = 3; > extern double Ecart = 1.61803399; > double g_ibuf_92[]; > double g_ibuf_96[]; > double g_ibuf_100[]; > double g_ibuf_104[]; > double g_ibuf_108[]; > double g_ibuf_112[]; > double g_ibuf_116[]; > double gda_120[20][20]; > double gda_124[20]; > double gda_128[20]; > double gda_132[20]; > int gi_136; > int gi_140; > int gi_144; > int gi_148; > int gi_152; > int gi_156; > int gi_160; > double gd_164; > double gd_172; > double gd_180; > double gd_188; > double gd_196; > > int init() { > Comment("BARYCENTRE"); > SetIndexStyle(0, DRAW_LINE); > SetIndexBuffer(0, g_ibuf_92); > SetIndexBuffer(1, g_ibuf_96); > SetIndexBuffer(2, g_ibuf_100); > SetIndexBuffer(3, g_ibuf_104); > SetIndexBuffer(4, g_ibuf_108); > SetIndexBuffer(5, g_ibuf_112); > SetIndexBuffer(6, g_ibuf_116); > return (0); > } > > int deinit() { > Comment(""); > ObjectDelete("REG"); > ObjectDelete("X1"); > ObjectDelete("X2"); > ObjectDelete("X3"); > ObjectDelete("Z1"); > ObjectDelete("Z2"); > ObjectDelete("Z3"); > return (0); > } > > int start() { > if (Year() >= 2010) return (0); > datetime l_time_0 = 0; > SetIndexDrawBegin(0, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(1, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(2, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(3, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(4, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(5, Bars - Nmbr_Bars - 1); > SetIndexDrawBegin(6, Bars - Nmbr_Bars - 1); > if (l_time_0 != Time[0]) { > ObjectDelete("REG"); > ObjectDelete("X1"); > ObjectDelete("X2"); > ObjectDelete("X3"); > ObjectDelete("Z1"); > ObjectDelete("Z2"); > ObjectDelete("Z3"); > l_time_0 = Time[0]; > } > gi_152 = Order + 1; > gda_124[1] = Nmbr_Bars + 1; > for (gi_160 = 1; gi_160 <= gi_152 << 1 - 2; gi_160++) { > gd_164 = 0; > for (gi_156 = 0; gi_156 <= Nmbr_Bars; gi_156++) gd_164 += MathPow(gi_156, > gi_160); > gda_124[gi_160 + 1] = gd_164; > } > for (gi_160 = 1; gi_160 <= gi_152; gi_160++) { > gd_164 = 0; > for (gi_156 = 0; gi_156 <= Nmbr_Bars; gi_156++) { > if (gi_160 == 1) gd_164 += (High[gi_156] + Low[gi_156]) / 2.0; > else gd_164 += (High[gi_156] + Low[gi_156]) / 2.0 * MathPow(gi_156, gi_160 > - 1); > } > gda_128[gi_160] = gd_164; > } > for (gi_140 = 1; gi_140 <= gi_152; gi_140++) { > for (gi_136 = 1; gi_136 <= gi_152; gi_136++) { > gi_144 = gi_136 + gi_140 - 1; > gda_120[gi_136][gi_140] = gda_124[gi_144]; > } > } > for (gi_144 = 1; gi_144 <= gi_152 - 1; gi_144++) { > gi_148 = 0; > gd_188 = 0; > for (gi_136 = gi_144; gi_136 <= gi_152; gi_136++) { > if (MathAbs(gda_120[gi_136][gi_144]) > gd_188) { > gd_188 = MathAbs(gda_120[gi_136][gi_144]); > gi_148 = gi_136; > } > } > if (gi_148 == 0) return (0); > if (gi_148 != gi_144) { > for (gi_140 = 1; gi_140 <= gi_152; gi_140++) { > gd_196 = gda_120[gi_144][gi_140]; > gda_120[gi_144][gi_140] = gda_120[gi_148][gi_140]; > gda_120[gi_148][gi_140] = gd_196; > } > gd_196 = gda_128[gi_144]; > gda_128[gi_144] = gda_128[gi_148]; > gda_128[gi_148] = gd_196; > } > for (gi_136 = gi_144 + 1; gi_136 <= gi_152; gi_136++) { > gd_180 = gda_120[gi_136][gi_144] / gda_120[gi_144][gi_144]; > for (gi_140 = 1; gi_140 <= gi_152; gi_140++) { > if (gi_140 == gi_144) gda_120[gi_136][gi_140] = 0; > else gda_120[gi_136][gi_140] = gda_120[gi_136][gi_140] - gd_180 * > gda_120[gi_144][gi_140]; > } > gda_128[gi_136] = gda_128[gi_136] - gd_180 * gda_128[gi_144]; > } > } > gda_132[gi_152] = gda_128[gi_152] / gda_120[gi_152][gi_152]; > for (gi_136 = gi_152 - 1; gi_136 >= 1; gi_136--) { > gd_196 = 0; > for (gi_140 = 1; gi_140 <= gi_152 - gi_136; gi_140++) { > gd_196 += (gda_120[gi_136][gi_136 + gi_140]) * (gda_132[gi_136 + gi_140]); > gda_132[gi_136] = 1 / gda_120[gi_136][gi_136] * (gda_128[gi_136] - gd_196); > } > } > for (gi_156 = 0; gi_156 <= Nmbr_Bars; gi_156++) { > gd_164 = 0; > for (gi_144 = 1; gi_144 <= Order; gi_144++) gd_164 += (gda_132[gi_144 + 1]) > * MathPow(gi_156, gi_144); > g_ibuf_92[gi_156] = gda_132[1] + gd_164; > } > gd_172 = iStdDev(NULL, 0, Nmbr_Bars, 0, MODE_SMA, PRICE_HIGH, 0) * Ecart; > for (gi_156 = 0; gi_156 <= Nmbr_Bars; gi_156++) { > g_ibuf_104[gi_156] = g_ibuf_92[gi_156] + gd_172; > g_ibuf_100[gi_156] = g_ibuf_92[gi_156] + (g_ibuf_104[gi_156] - > g_ibuf_92[gi_156]) / 1.382; > g_ibuf_96[gi_156] = g_ibuf_92[gi_156] + (g_ibuf_100[gi_156] - > g_ibuf_92[gi_156]) / 1.618; > g_ibuf_116[gi_156] = g_ibuf_92[gi_156] - gd_172; > g_ibuf_112[gi_156] = g_ibuf_92[gi_156] - (g_ibuf_92[gi_156] - > g_ibuf_116[gi_156]) / 1.382; > g_ibuf_108[gi_156] = g_ibuf_92[gi_156] - (g_ibuf_92[gi_156] - > g_ibuf_112[gi_156]) / 1.618; > } > ObjectCreate("REG", OBJ_ARROW, 0, Time[0], g_ibuf_92[0]); > ObjectSet("REG", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("REG", OBJPROP_COLOR, Blue); > ObjectCreate("X1", OBJ_ARROW, 0, Time[0], g_ibuf_96[0]); > ObjectSet("X1", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("X1", OBJPROP_COLOR, DimGray); > ObjectCreate("X2", OBJ_ARROW, 0, Time[0], g_ibuf_100[0]); > ObjectSet("X2", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("X2", OBJPROP_COLOR, Red); > ObjectCreate("X3", OBJ_ARROW, 0, Time[0], g_ibuf_104[0]); > ObjectSet("X3", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("X3", OBJPROP_COLOR, Red); > ObjectCreate("Z1", OBJ_ARROW, 0, Time[0], g_ibuf_108[0]); > ObjectSet("Z1", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("Z1", OBJPROP_COLOR, DimGray); > ObjectCreate("Z2", OBJ_ARROW, 0, Time[0], g_ibuf_112[0]); > ObjectSet("Z2", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("Z2", OBJPROP_COLOR, LimeGreen); > ObjectCreate("Z3", OBJ_ARROW, 0, Time[0], g_ibuf_116[0]); > ObjectSet("Z3", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE); > ObjectSet("Z3", OBJPROP_COLOR, LimeGreen); > return (0); > } > > > > > > ------------------------------------------------------------------------------ > Windows Live Messenger makes it easier to stay in touch - learn how! >
