//+------------------------------------------------------------------+ //| 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: