#property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Yellow #property indicator_color2 Yellow #property indicator_color3 Fuchsia #property indicator_color4 Fuchsia #property indicator_color5 Lime #property indicator_color6 Red bool Sound_Alert = FALSE; double Period1 = 5.0; double Period2 = 13.0; double Period3 = 34.0; string Dev_Step_1 = "1,3"; string Dev_Step_2 = "8,5"; string Dev_Step_3 = "13,8"; int Symbol_1_Kod = 170; int Symbol_2_Kod = 174; int Symbol_3_Kod = 175; double gda_140[]; double gda_144[]; double gda_148[]; double gda_152[]; double gda_156[]; double gda_160[]; int gi_164; int gi_168; int gi_172; int gi_176; int gi_180; int gi_184; int gi_188; int gi_192; int gi_196; string gs_200; string gs_208; string gs_216; int gi_224; int gi_228; bool gi_232; bool gi_236; bool gi_240; int gi_244 = -1; int gi_248 = 65535; int init() { int lia_0[]; gi_228 = Period(); gs_208 = TimeFrameToString(gi_228); gs_200 = Symbol(); gi_224 = Digits; gs_216 = "tbb" + gs_200 + gs_208; if (Period1 > 0.0) gi_164 = MathCeil(Period1 * Period()); else gi_164 = 0; if (Period2 > 0.0) gi_168 = MathCeil(Period2 * Period()); else gi_168 = 0; if (Period3 > 0.0) gi_172 = MathCeil(Period3 * Period()); else gi_172 = 0; if (Period1 > 0.0) { SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1); SetIndexArrow(0, Symbol_1_Kod); SetIndexBuffer(0, gda_140); SetIndexEmptyValue(0, 0.0); SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1); SetIndexArrow(1, Symbol_1_Kod); SetIndexBuffer(1, gda_144); SetIndexEmptyValue(1, 0.0); } if (Period2 > 0.0) { SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 2); SetIndexArrow(2, Symbol_2_Kod); SetIndexBuffer(2, gda_148); SetIndexEmptyValue(2, 0.0); SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 2); SetIndexArrow(3, Symbol_2_Kod); SetIndexBuffer(3, gda_152); SetIndexEmptyValue(3, 0.0); } if (Period3 > 0.0) { SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 4); SetIndexArrow(4, Symbol_3_Kod); SetIndexBuffer(4, gda_156); SetIndexEmptyValue(4, 0.0); SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 4); SetIndexArrow(5, Symbol_3_Kod); SetIndexBuffer(5, gda_160); SetIndexEmptyValue(5, 0.0); } int li_4 = 0; int li_8 = 0; int li_12 = 0; if (IntFromStr(Dev_Step_1, li_12, lia_0) == 1) { gi_180 = lia_0[1]; gi_176 = lia_0[0]; } if (IntFromStr(Dev_Step_2, li_12, lia_0) == 1) { gi_188 = lia_0[1]; gi_184 = lia_0[0]; } if (IntFromStr(Dev_Step_3, li_12, lia_0) == 1) { gi_196 = lia_0[1]; gi_192 = lia_0[0]; } return (0); } int deinit() { return (0); } int start() { if (Bars != gi_244) { gi_232 = TRUE; gi_236 = TRUE; gi_240 = TRUE; } if (Period1 > 0.0) CountZZ(gda_140, gda_144, Period1, gi_176, gi_180); if (Period2 > 0.0) CountZZ(gda_148, gda_152, Period2, gi_184, gi_188); if (Period3 > 0.0) CountZZ(gda_156, gda_160, Period3, gi_192, gi_196); if (gi_232 && Sound_Alert) { if (gda_140[0] != 0.0) { gi_232 = FALSE; Alert(gs_200, " ", gs_208, " Level 1 Lower " + DoubleToStr(Close[0], gi_224)); } if (gda_144[0] != 0.0) { gi_232 = FALSE; Alert(gs_200, " ", gs_208, " Level 1 Upper " + DoubleToStr(Close[0], gi_224)); } } if (gi_236 && Sound_Alert) { if (gda_148[0] != 0.0) { gi_236 = FALSE; Alert(gs_200, " ", gs_208, " Level 2 Lower " + DoubleToStr(Close[0], gi_224)); } if (gda_152[0] != 0.0) { gi_236 = FALSE; Alert(gs_200, " ", gs_208, " Level 2 Upper " + DoubleToStr(Close[0], gi_224)); } } if (gi_240 && Sound_Alert) { if (gda_156[0] != 0.0) { gi_240 = FALSE; Alert(gs_200, " ", gs_208, " Level 3 Lower " + DoubleToStr(Close[0], gi_224)); } if (gda_160[0] != 0.0) { gi_240 = FALSE; Alert(gs_200, " ", gs_208, " Level 3 Upper " + DoubleToStr(Close[0], gi_224)); } } gi_244 = Bars; return (0); } string TimeFrameToString(int ai_0) { string ls_4; switch (ai_0) { case 1: ls_4 = "M1"; break; case 5: ls_4 = "M5"; break; case 15: ls_4 = "M15"; break; case 30: ls_4 = "M30"; break; case 60: ls_4 = "H1"; break; case 240: ls_4 = "H4"; break; case 1440: ls_4 = "D1"; break; case 10080: ls_4 = "W1"; break; case 43200: ls_4 = "MN"; } return (ls_4); } int CountZZ(double &ada_0[], double &ada_4[], int ai_8, int ai_12, int ai_16) { double ld_20; double ld_28; double ld_36; double ld_44; double ld_52; double ld_60; for (int li_68 = Bars - ai_8; li_68 >= 0; li_68--) { ld_20 = Low[iLowest(NULL, 0, MODE_LOW, ai_8, li_68)]; if (ld_20 == ld_60) ld_20 = 0.0; else { ld_60 = ld_20; if (Low[li_68] - ld_20 > ai_12 * Point) ld_20 = 0.0; else { for (int li_72 = 1; li_72 <= ai_16; li_72++) { ld_28 = ada_0[li_68 + li_72]; if (ld_28 != 0.0 && ld_28 > ld_20) ada_0[li_68 + li_72] = 0.0; } } } ada_0[li_68] = ld_20; ld_20 = High[iHighest(NULL, 0, MODE_HIGH, ai_8, li_68)]; if (ld_20 == ld_52) ld_20 = 0.0; else { ld_52 = ld_20; if (ld_20 - High[li_68] > ai_12 * Point) ld_20 = 0.0; else { for (li_72 = 1; li_72 <= ai_16; li_72++) { ld_28 = ada_4[li_68 + li_72]; if (ld_28 != 0.0 && ld_28 < ld_20) ada_4[li_68 + li_72] = 0.0; } } } ada_4[li_68] = ld_20; } ld_52 = -1; int li_76 = -1; ld_60 = -1; int li_80 = -1; for (li_68 = Bars - ai_8; li_68 >= 0; li_68--) { ld_36 = ada_0[li_68]; ld_44 = ada_4[li_68]; if (ld_36 == 0.0 && ld_44 == 0.0) continue; if (ld_44 != 0.0) { if (ld_52 > 0.0) { if (ld_52 < ld_44) ada_4[li_76] = 0; else ada_4[li_68] = 0; } if (ld_52 < ld_44 || ld_52 < 0.0) { ld_52 = ld_44; li_76 = li_68; } ld_60 = -1; } if (ld_36 != 0.0) { if (ld_60 > 0.0) { if (ld_60 > ld_36) ada_0[li_80] = 0; else ada_0[li_68] = 0; } if (ld_36 < ld_60 || ld_60 < 0.0) { ld_60 = ld_36; li_80 = li_68; } ld_52 = -1; } } for (li_68 = Bars - 1; li_68 >= 0; li_68--) { if (li_68 >= Bars - ai_8) ada_0[li_68] = 0.0; else { ld_28 = ada_4[li_68]; if (ld_28 != 0.0) ada_4[li_68] = ld_28; } } return (0); } int Str2Massive(string as_0, int &ai_8, int &aia_12[]) { int li_16; int li_20 = StrToInteger(as_0); if (li_20 > 0) { ai_8++; li_16 = ArrayResize(aia_12, ai_8); if (li_16 == 0) return (-1); aia_12[ai_8 - 1] = li_20; return (1); } return (0); } int IntFromStr(string as_0, int &ai_8, int& aia_12[]) { string ls_16; if (StringLen(as_0) == 0) return (-1); string ls_24 = as_0; int li_32 = 0; ai_8 = 0; ArrayResize(aia_12, ai_8); while (StringLen(ls_24) > 0) { li_32 = StringFind(ls_24, ","); if (li_32 > 0) { ls_16 = StringSubstr(ls_24, 0, li_32); ls_24 = StringSubstr(ls_24, li_32 + 1, StringLen(ls_24)); } else { if (StringLen(ls_24) > 0) { ls_16 = ls_24; ls_24 = ""; } } if (Str2Massive(ls_16, ai_8, aia_12) == 0) return (-2); } return (1); }