#property copyright "Copyright 2013 © Forexprofitsupreme" #property link "www.Forexprofitsupreme.com" #property indicator_separate_window #property indicator_minimum 0.0 #property indicator_maximum 1.0 #property indicator_buffers 2 #property indicator_color1 LimeGreen #property indicator_color2 DarkOrange extern string TimeFrame = "current time frame"; extern int SmoothPeriod = 5; extern int SmoothPhase = 0; extern bool alertsOn = FALSE; extern bool alertsOnCurrent = FALSE; extern bool alertsMessage = FALSE; extern bool alertsSound = FALSE; extern bool alertsEmail = FALSE; double g_ibuf_112[]; double g_ibuf_116[]; double g_ibuf_120[]; int g_timeframe_124; bool gi_128 = FALSE; bool gi_132 = FALSE; string gs_136; string gs_nothing_144 = "nothing"; datetime g_time_152; string gsa_156[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"}; int gia_160[] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200}; double gda_164[][30]; int init() { IndicatorBuffers(3); SetIndexBuffer(0, g_ibuf_112); SetIndexStyle(0, DRAW_HISTOGRAM); SetIndexBuffer(1, g_ibuf_116); SetIndexStyle(1, DRAW_HISTOGRAM); SetIndexBuffer(2, g_ibuf_120); if (TimeFrame == "calculate") { gi_128 = TRUE; return (0); } if (TimeFrame == "getBarsCount") { gi_132 = TRUE; return (0); } g_timeframe_124 = f0_5(TimeFrame); gs_136 = WindowExpertName(); IndicatorShortName(f0_1(g_timeframe_124) + "ForexprofitsupremeFilter"); return (0); } int start() { double ld_0; double ld_8; double ld_16; int shift_24; int li_28 = IndicatorCounted(); if (li_28 < 0) return (-1); if (li_28 > 0) li_28--; int li_32 = MathMin(Bars - li_28, Bars - 1); if (gi_132) { g_ibuf_112[0] = li_32 + 1; return (0); } if (gi_128 || g_timeframe_124 == Period()) { for (int li_36 = li_32; li_36 >= 0; li_36--) { ld_0 = f0_3(High[li_36 + 1], SmoothPeriod, SmoothPhase, li_36 + 1, 0); ld_8 = f0_3(Low[li_36 + 1], SmoothPeriod, SmoothPhase, li_36 + 1, 10); ld_16 = f0_3(Close[li_36], SmoothPeriod, SmoothPhase, li_36, 20); g_ibuf_116[li_36] = EMPTY_VALUE; g_ibuf_112[li_36] = EMPTY_VALUE; g_ibuf_120[li_36] = g_ibuf_120[li_36 + 1]; if (ld_16 > ld_0) g_ibuf_120[li_36] = -1; if (ld_16 < ld_8) g_ibuf_120[li_36] = 1; if (g_ibuf_120[li_36] == 1.0) g_ibuf_116[li_36] = 1; if (g_ibuf_120[li_36] == -1.0) g_ibuf_112[li_36] = 1; } f0_2(); return (0); } li_32 = MathMax(li_32, MathMin(Bars, iCustom(NULL, g_timeframe_124, gs_136, "getBarsCount", 0, 0) * g_timeframe_124 / Period())); for (li_36 = li_32; li_36 >= 0; li_36--) { shift_24 = iBarShift(NULL, g_timeframe_124, Time[li_36]); g_ibuf_116[li_36] = EMPTY_VALUE; g_ibuf_112[li_36] = EMPTY_VALUE; g_ibuf_120[li_36] = iCustom(NULL, g_timeframe_124, gs_136, "calculate", SmoothPeriod, SmoothPhase, 2, shift_24); if (g_ibuf_120[li_36] == 1.0) g_ibuf_116[li_36] = 1; if (g_ibuf_120[li_36] == -1.0) g_ibuf_112[li_36] = 1; } f0_2(); return (0); } void f0_2() { int li_0; if ((!gi_128) && alertsOn) { if (alertsOnCurrent) li_0 = 0; else li_0 = 1; li_0 = iBarShift(NULL, 0, iTime(NULL, g_timeframe_124, li_0)); if (g_ibuf_120[li_0] != g_ibuf_120[li_0 + 1]) { if (g_ibuf_120[li_0] == 1.0) { f0_6(li_0, "up"); return; } f0_6(li_0, "down"); } } } void f0_6(int ai_0, string as_4) { string str_concat_12; if (gs_nothing_144 != as_4 || g_time_152 != Time[ai_0]) { gs_nothing_144 = as_4; g_time_152 = Time[ai_0]; str_concat_12 = StringConcatenate(Symbol(), " at ", TimeToStr(TimeLocal(), TIME_SECONDS), " ForexprofitsupremeFilter direction changed to", as_4); if (alertsMessage) Alert(str_concat_12); if (alertsEmail) SendMail(StringConcatenate(Symbol(), "ForexprofitsupremeFilter"), str_concat_12); if (alertsSound) PlaySound("alert2.wav"); } } int f0_5(string as_0) { as_0 = f0_0(as_0); for (int li_8 = ArraySize(gia_160) - 1; li_8 >= 0; li_8--) if (as_0 == gsa_156[li_8] || as_0 == "" + gia_160[li_8]) return (MathMax(gia_160[li_8], Period())); return (Period()); } string f0_1(int ai_0) { for (int li_4 = ArraySize(gia_160) - 1; li_4 >= 0; li_4--) if (ai_0 == gia_160[li_4]) return (gsa_156[li_4]); return (""); } string f0_0(string as_0) { int li_8; string ls_ret_12 = as_0; for (int li_20 = StringLen(as_0) - 1; li_20 >= 0; li_20--) { li_8 = StringGetChar(ls_ret_12, li_20); if ((li_8 > '`' && li_8 < '{') || (li_8 > 'ß' && li_8 < 256)) ls_ret_12 = StringSetChar(ls_ret_12, li_20, li_8 - 32); else if (li_8 > -33 && li_8 < 0) ls_ret_12 = StringSetChar(ls_ret_12, li_20, li_8 + 224); } return (ls_ret_12); } double f0_3(double ad_0, double ad_8, double ad_16, int ai_24, int ai_28 = 0) { double ld_32; double ld_40; if (ArrayRange(gda_164, 0) != Bars) ArrayResize(gda_164, Bars); int li_48 = Bars - ai_24 - 1; if (li_48 == 0) { for (int count_52 = 0; count_52 < 7; count_52++) gda_164[0][count_52 + ai_28] = ad_0; while (count_52 < 10) { gda_164[0][count_52 + ai_28] = 0; count_52++; } return (ad_0); } double ld_56 = MathMax(MathLog(MathSqrt((ad_8 - 1.0) / 2.0)) / MathLog(2.0) + 2.0, 0); double ld_64 = MathMax(ld_56 - 2.0, 0.5); double ld_72 = ad_0 - (gda_164[li_48 - 1][ai_28 + 5]); double ld_80 = ad_0 - (gda_164[li_48 - 1][ai_28 + 6]); gda_164[li_48][ai_28 + 7] = 0; if (MathAbs(ld_72) > MathAbs(ld_80)) gda_164[li_48][ai_28 + 7] = MathAbs(ld_72); if (MathAbs(ld_72) < MathAbs(ld_80)) gda_164[li_48][ai_28 + 7] = MathAbs(ld_80); gda_164[li_48][ai_28 + 8] = gda_164[li_48 - 1][ai_28 + 8] + (gda_164[li_48][ai_28 + 7] - (gda_164[li_48 - 10][ai_28 + 7])) / 10.0; double ld_88 = MathMin(MathMax(4.0 * ad_8, 30), 150); if (li_48 < ld_88) { ld_32 = gda_164[li_48][ai_28 + 8]; for (count_52 = 1; count_52 < ld_88 && li_48 - count_52 >= 0; count_52++) ld_32 += gda_164[li_48 - count_52][ai_28 + 8]; ld_32 /= count_52; } else ld_32 = ((gda_164[li_48 - 1][ai_28 + 9]) * ld_88 - (gda_164[li_48 - f0_4(ld_88)][ai_28 + 8]) + (gda_164[li_48][ai_28 + 8])) / ld_88; gda_164[li_48][ai_28 + 9] = ld_32; if (gda_164[li_48][ai_28 + 9] > 0.0) ld_40 = (gda_164[li_48][ai_28 + 7]) / (gda_164[li_48][ai_28 + 9]); else ld_40 = 0; if (ld_40 > MathPow(ld_56, 1.0 / ld_64)) ld_40 = MathPow(ld_56, 1.0 / ld_64); if (ld_40 < 1.0) ld_40 = 1.0; double ld_96 = MathPow(ld_40, ld_64); double ld_104 = MathSqrt((ad_8 - 1.0) / 2.0) * ld_56; double ld_112 = MathPow(ld_104 / (ld_104 + 1.0), MathSqrt(ld_96)); if (ld_72 > 0.0) gda_164[li_48][ai_28 + 5] = ad_0; else gda_164[li_48][ai_28 + 5] = ad_0 - ld_112 * ld_72; if (ld_80 < 0.0) gda_164[li_48][ai_28 + 6] = ad_0; else gda_164[li_48][ai_28 + 6] = ad_0 - ld_112 * ld_80; double ld_120 = MathMax(MathMin(ad_16, 100), -100) / 100.0 + 1.5; double ld_128 = (ad_8 - 1.0) / 2.0 / ((ad_8 - 1.0) / 2.0 + 2.0); double ld_136 = MathPow(ld_128, ld_96); gda_164[li_48][ai_28 + 0] = ad_0 + ld_136 * (gda_164[li_48 - 1][ai_28 + 0] - ad_0); gda_164[li_48][ai_28 + 1] = (ad_0 - (gda_164[li_48][ai_28 + 0])) * (1 - ld_128) + ld_128 * (gda_164[li_48 - 1][ai_28 + 1]); gda_164[li_48][ai_28 + 2] = gda_164[li_48][ai_28 + 0] + ld_120 * (gda_164[li_48][ai_28 + 1]); gda_164[li_48][ai_28 + 3] = (gda_164[li_48][ai_28 + 2] - (gda_164[li_48 - 1][ai_28 + 4])) * MathPow(1 - ld_136, 2) + MathPow(ld_136, 2) * (gda_164[li_48 - 1][ai_28 + 3]); gda_164[li_48][ai_28 + 4] = gda_164[li_48 - 1][ai_28 + 4] + (gda_164[li_48][ai_28 + 3]); return (gda_164[li_48][ai_28 + 4]); } int f0_4(double ad_0) { return (ad_0); }