Hi Would anyone be able to help me to integrate the TCCI custom indicator into a strategy using the icustom TA block? Im trying to build an EA that opens a buy position when the TCCI turns green and sell position when the TCCI turn red, but am not sure which mode to use and how to write the conditions. Here is the code, any advice much appreciated:
#property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 ForestGreen #property indicator_color3 Red
extern int Price = 0; extern int Length = 20; extern int Displace = 0; extern int Filter = 0; extern int Color = 1; extern int ColorBarBack = 1; extern double Deviation = 0.0; double g_ibuf_108[]; double g_ibuf_112[]; double g_ibuf_116[]; double g_ibuf_120[]; double gda_124[]; int g_index_128; int gi_132; int gi_136; int gi_140 = 4; double gd_144; double gd_152; double gd_160; double gd_168; double gd_176; double gd_184; double gd_192 = 3.1415926535;
int init() { IndicatorBuffers(4); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, g_ibuf_108); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, g_ibuf_112); SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, g_ibuf_116); SetIndexBuffer(3, g_ibuf_120); IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS)); string ls_0 = "SaneFX(" + Length + ")"; IndicatorShortName(ls_0); SetIndexLabel(0, "SaneFX"); SetIndexLabel(1, "Up"); SetIndexLabel(2, "Dn"); SetIndexShift(0, Displace); SetIndexShift(1, Displace); SetIndexShift(2, Displace); SetIndexEmptyValue(0, EMPTY_VALUE); SetIndexEmptyValue(1, EMPTY_VALUE); SetIndexEmptyValue(2, EMPTY_VALUE); SetIndexDrawBegin(0, Length * gi_140 + Length); SetIndexDrawBegin(1, Length * gi_140 + Length); SetIndexDrawBegin(2, Length * gi_140 + Length); gd_144 = 3.0 * gd_192; gi_132 = Length - 1; gi_136 = Length * gi_140 + gi_132; ArrayResize(gda_124, gi_136); gd_176 = 0; for (g_index_128 = 0; g_index_128 < gi_136 - 1; g_index_128++) { if (g_index_128 <= gi_132 - 1) gd_160 = 1.0 * g_index_128 / (gi_132 - 1); else gd_160 = (g_index_128 - gi_132 + 1) * (2.0 * gi_140 - 1.0) / (gi_140 * Length - 1.0) + 1.0; gd_152 = MathCos(gd_192 * gd_160); gd_184 = 1.0 / (gd_144 * gd_160 + 1.0); if (gd_160 <= 0.5) gd_184 = 1; gda_124[g_index_128] = gd_184 * gd_152; gd_176 += gda_124[g_index_128]; } return (0); }
int start() { int li_12; double ld_16; int l_ind_counted_8 = IndicatorCounted(); if (l_ind_counted_8 > 0) li_12 = Bars - l_ind_counted_8; if (l_ind_counted_8 < 0) return (0); if (l_ind_counted_8 == 0) li_12 = Bars - gi_136 - 1; if (l_ind_counted_8 < 1) { for (int l_index_0 = 1; l_index_0 < Length * gi_140 + Length; l_index_0++) { g_ibuf_108[Bars - l_index_0] = 0; g_ibuf_112[Bars - l_index_0] = 0; g_ibuf_116[Bars - l_index_0] = 0; } } for (int li_4 = li_12; li_4 >= 0; li_4--) { gd_168 = 0; for (l_index_0 = 0; l_index_0 <= gi_136 - 1; l_index_0++) { if (Price == 0) ld_16 = Close[li_4 + l_index_0]; else { if (Price == 1) ld_16 = Open[li_4 + l_index_0]; else { if (Price == 2) ld_16 = High[li_4 + l_index_0]; else { if (Price == 3) ld_16 = Low[li_4 + l_index_0]; else { if (Price == 4) ld_16 = (High[li_4 + l_index_0] + (Low[li_4 + l_index_0])) / 2.0; else { if (Price == 5) ld_16 = (High[li_4 + l_index_0] + (Low[li_4 + l_index_0]) + (Close[li_4 + l_index_0])) / 3.0; else if (Price == 6) ld_16 = (High[li_4 + l_index_0] + (Low[li_4 + l_index_0]) + 2.0 * (Close[li_4 + l_index_0])) / 4.0; } } } } } gd_168 += gda_124[l_index_0] * ld_16; } if (gd_176 > 0.0) g_ibuf_108[li_4] = (Deviation / 100.0 + 1.0) * gd_168 / gd_176; if (Filter > 0) if (MathAbs(g_ibuf_108[li_4] - (g_ibuf_108[li_4 + 1])) < Filter * Point) g_ibuf_108[li_4] = g_ibuf_108[li_4 + 1]; if (Color > 0) { g_ibuf_120[li_4] = g_ibuf_120[li_4 + 1]; if (g_ibuf_108[li_4] - (g_ibuf_108[li_4 + 1]) > Filter * Point) g_ibuf_120[li_4] = 1; if (g_ibuf_108[li_4 + 1] - g_ibuf_108[li_4] > Filter * Point) g_ibuf_120[li_4] = -1; if (g_ibuf_120[li_4] > 0.0) { g_ibuf_112[li_4] = g_ibuf_108[li_4]; if (g_ibuf_120[li_4 + ColorBarBack] < 0.0) g_ibuf_112[li_4 + ColorBarBack] = g_ibuf_108[li_4 + ColorBarBack]; g_ibuf_116[li_4] = EMPTY_VALUE; } if (g_ibuf_120[li_4] < 0.0) { g_ibuf_116[li_4] = g_ibuf_108[li_4]; if (g_ibuf_120[li_4 + ColorBarBack] > 0.0) g_ibuf_116[li_4 + ColorBarBack] = g_ibuf_108[li_4 + ColorBarBack]; g_ibuf_112[li_4] = EMPTY_VALUE; } } } return (0); }
|