#property copyright "MojoFX - Conversion only"
#property link "http://groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 White
#property indicator_color2 Lime
#property indicator_color3 Crimson
#property indicator_color4 CLR_NONE
extern bool Alert_Coral_Crossing = TRUE;
bool gi_80 = TRUE;
int gi_84 = 5;
double gd_88 = 0.4;
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
double g_ibuf_108[];
double gda_112[];
double gda_116[];
double gda_120[];
double gda_124[];
double gda_128[];
double gda_132[];
double gd_136;
double gd_144;
double gd_152;
double gd_160;
double gd_168;
double gd_176;
double gd_184;
double gd_192;
double gd_200;
bool gi_208 = FALSE;
bool gi_212 = FALSE;
int init() {
IndicatorBuffers(4);
SetIndexBuffer(0, g_ibuf_96);
SetIndexBuffer(1, g_ibuf_100);
SetIndexBuffer(2, g_ibuf_104);
SetIndexBuffer(3, g_ibuf_108);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2, White);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2, Lime); // C'95,154,88;' // C'223,172,38;'
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2, Crimson);
IndicatorShortName("THV Coral (" + gi_84 + ") ");
gd_192 = gd_88 * gd_88;
gd_200 = 0;
gd_200 = gd_192 * gd_88;
gd_136 = -gd_200;
gd_144 = 3.0 * (gd_192 + gd_200);
gd_152 = -3.0 * (2.0 * gd_192 + gd_88 + gd_200);
gd_160 = 3.0 * gd_88 + 1.0 + gd_200 + 3.0 * gd_192;
gd_168 = gi_84;
if (gd_168 < 1.0) gd_168 = 1;
gd_168 = (gd_168 - 1.0) / 2.0 + 1.0;
gd_176 = 2 / (gd_168 + 1.0);
gd_184 = 1 - gd_176;
return (0);
}
int deinit() {
return (0);
}
int start() {
double coralValue;
double prevCoralValue;
if (gi_80 == FALSE) return (0);
int li_20 = IndicatorCounted();
if (li_20 < 0) return (-1);
if (li_20 > 0) li_20--;
int li_16 = Bars - li_20 - 1;
ArrayResize(gda_112, Bars + 1);
ArrayResize(gda_116, Bars + 1);
ArrayResize(gda_120, Bars + 1);
ArrayResize(gda_124, Bars + 1);
ArrayResize(gda_128, Bars + 1);
ArrayResize(gda_132, Bars + 1);
for (int i = li_16; i >= 0; i--) {
gda_112[Bars - i] = gd_176 * Close[i] + gd_184 * (gda_112[Bars - i - 1]);
gda_116[Bars - i] = gd_176 * (gda_112[Bars - i]) + gd_184 * (gda_116[Bars - i - 1]);
gda_120[Bars - i] = gd_176 * (gda_116[Bars - i]) + gd_184 * (gda_120[Bars - i - 1]);
gda_124[Bars - i] = gd_176 * (gda_120[Bars - i]) + gd_184 * (gda_124[Bars - i - 1]);
gda_128[Bars - i] = gd_176 * (gda_124[Bars - i]) + gd_184 * (gda_128[Bars - i - 1]);
gda_132[Bars - i] = gd_176 * (gda_128[Bars - i]) + gd_184 * (gda_132[Bars - i - 1]);
g_ibuf_108[i] = gd_136 * (gda_132[Bars - i]) + gd_144 * (gda_128[Bars - i]) + gd_152 * (gda_124[Bars - i]) + gd_160 * (gda_120[Bars - i]);
coralValue = g_ibuf_108[i];
prevCoralValue = g_ibuf_108[i + 1];
g_ibuf_96[i] = coralValue;
g_ibuf_100[i] = coralValue;
g_ibuf_104[i] = coralValue;
if (prevCoralValue > coralValue) g_ibuf_100[i] = EMPTY_VALUE;
else {
if (prevCoralValue < coralValue) g_ibuf_104[i] = EMPTY_VALUE;
else g_ibuf_96[i] = EMPTY_VALUE;
}
if (Alert_Coral_Crossing) {
if (!gi_208 && Close[1] > Close[2] && Close[1] > g_ibuf_108[i + 1] && Close[2] < g_ibuf_108[i + 1]) {
Alert("PA crossing Coral from below !");
gi_208 = TRUE;
gi_212 = FALSE;
}
if (!gi_212 && Close[1] < Close[2] && Close[1] < g_ibuf_108[i + 1] && Close[2] > g_ibuf_108[i + 1]) {
Alert("PA crossing Coral from above !");
gi_208 = FALSE;
gi_212 = TRUE;
}
}
}
return (0);
}