#property copyright "Copyright © 2008, XTB, Marcin Michalczyk" #property link "http://mql.texpert.eu" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Yellow extern int MinSwing = 80; extern int MinBars = 1; extern double MinDev = 0.95; extern double MaxDev = 1.05; extern int BackBars = 0; double g_ibuf_104[]; double gd_108; int gi_116 = 0; int gi_120; int gi_124; int gi_unused_128 = 1; bool gi_132 = TRUE; string gs_onetoone_136 = "OneToOne"; string gs_144 = "1.4"; string gs_152 = "Copyright © 2008, X-Trade Brokers DM S.A."; string gs_160 = "Development, Marcin Michalczyk, mql@texpert.eu"; string gs_168 = "X-Trade Brokers DM S.A."; string gs_176; string gs_184 = "Online working only X-Trade Brokers DM S.A. platform"; string gs_192 = "Your broker is "; int init() { SetIndexStyle(0, DRAW_NONE); SetIndexBuffer(0, g_ibuf_104); SetIndexEmptyValue(0, 0.0); gd_108 = NormalizeDouble(MinSwing * Point, Digits); Print(" ..:: " + gs_160 + " ::.."); Print(" ..:: " + gs_152 + " ::.."); Print(" ...: " + gs_onetoone_136 + " v." + gs_144 + " :... "); gs_176 = StringTrimLeft(StringTrimRight(AccountCompany())); if (IsConnected()) { if (gs_168 != gs_176) { Alert(gs_184); Alert(gs_192, AccountCompany()); gi_132 = FALSE; } else gi_132 = TRUE; } return (0); } int deinit() { for (int l_index_0 = 0; l_index_0 < Bars; l_index_0++) { if (ObjectFind("AB_" + Time[l_index_0]) != -1) ObjectDelete("AB_" + Time[l_index_0]); if (ObjectFind("BC_" + Time[l_index_0]) != -1) ObjectDelete("BC_" + Time[l_index_0]); if (ObjectFind("CD_" + Time[l_index_0]) != -1) ObjectDelete("CD_" + Time[l_index_0]); } if (ObjectFind("DevLevel_0") != -1) ObjectDelete("DevLevel_0"); Comment(""); return (0); } int start() { if (gi_132 == FALSE) return (-1); if (BackBars == 0) { Swing(gd_108, MinBars, g_ibuf_104, gi_120, gi_116); SwingABCD(gd_108, MinBars, g_ibuf_104, gi_120, gi_116, MinDev, MaxDev, 1, 1, gi_124); } else { gi_120 = BackBars; Swing(gd_108, MinBars, g_ibuf_104, gi_120, gi_116); SwingABCD(gd_108, MinBars, g_ibuf_104, gi_120, gi_116, MinDev, MaxDev, 0, 0, gi_124); } return (0); } int Swing(double ad_0, int ai_8, double &ada_12[], int ai_16, int ai_20) { int li_32; int li_36; int li_40; int li_44; int li_48; int li_52; int l_count_28 = 0; double l_low_56 = 9999999.0; double l_high_64 = 0.0; bool li_72 = FALSE; if (ai_16 == 0) { ai_16 = Bars - 1; li_72 = TRUE; } for (int li_24 = ai_20; li_24 < ai_16; li_24++) g_ibuf_104[li_24] = 0.0; for (li_24 = ai_20; li_24 < ai_16; li_24++) { g_ibuf_104[li_24] = 0.0; if (Low[li_24] < l_low_56) { l_low_56 = Low[li_24]; li_40 = li_24; } if (High[li_24] > l_high_64) { l_high_64 = High[li_24]; li_36 = li_24; } if (MathAbs(li_40 - li_36) < ai_8 || MathAbs(High[li_36] - Low[li_40]) < ad_0) continue; li_44 = li_24; break; } if (li_40 >= li_36) { ada_12[li_40] = Low[li_40]; ada_12[li_36] = High[li_36]; li_48 = li_40; li_52 = li_36; li_44 = li_40; li_32 = 1; } else { ada_12[li_36] = High[li_36]; ada_12[li_40] = Low[li_40]; li_48 = li_40; li_52 = li_36; li_44 = li_36; li_32 = -1; } if (li_48 != 0 && li_52 != 0) ada_12[ai_20] = 0.0; for (li_24 = li_44; li_24 < ai_16; li_24++) { if (li_32 == -1 && High[li_24] >= High[li_52]) { ada_12[li_52] = 0.0; ada_12[li_24] = High[li_24]; li_52 = li_24; li_32 = -1; } else { if (li_32 == 1 && Low[li_24] <= Low[li_48]) { ada_12[li_48] = 0.0; ada_12[li_24] = Low[li_24]; li_48 = li_24; li_32 = 1; } else { if (li_32 == -1 && MathAbs(li_52 - li_24) >= ai_8 && High[li_52] - Low[li_24] >= ad_0) { ada_12[li_24] = Low[li_24]; li_48 = li_24; li_32 = 1; } else { if (li_32 == 1 && MathAbs(li_48 - li_24) >= ai_8 && High[li_24] - Low[li_48] >= ad_0) { ada_12[li_24] = High[li_24]; li_52 = li_24; li_32 = -1; } } } } if (li_72) { l_count_28 = 0; for (int l_index_76 = 0; l_index_76 < ai_16 - 1; l_index_76++) { if (ada_12[l_index_76] > 0.0) l_count_28++; if (l_count_28 > 5) return; } } } return (0); } int SwingABCD(double ad_unused_0, int ai_unused_8, double ada_12[], int ai_16, int ai_unused_20, double ad_24, double ad_32, bool ai_40, bool ai_44, int &ai_48) { double ld_76; double ld_84; double ld_92; double ld_100; double ld_108; double ld_116; double ld_124; int li_60 = -1; int li_64 = -1; int li_68 = -1; int li_72 = -1; int li_unused_148 = 0; if (ai_16 == 0) { ai_16 = Bars - 1; li_unused_148 = 1; } for (int l_index_152 = 0; l_index_152 < ai_16 - 1; l_index_152++) { if (ada_12[l_index_152] > 0.0 && li_72 == -1) li_72 = l_index_152; else { if (ada_12[l_index_152] > 0.0 && li_68 == -1) li_68 = l_index_152; else { if (ada_12[l_index_152] > 0.0 && li_64 == -1) li_64 = l_index_152; else { if (ada_12[l_index_152] > 0.0 && li_60 == -1) { li_60 = l_index_152; if (ada_12[li_72] > ada_12[li_68]) { ld_76 = Low[li_60]; ld_84 = High[li_64]; ld_92 = Low[li_68]; ld_100 = High[li_72]; ld_108 = ld_84 - ld_76; ld_116 = ld_84 - ld_92; ld_124 = ld_100 - ld_92; if (ld_124 >= ld_108 * ad_24 && ld_124 <= ld_108 * ad_32 && ld_116 >= ld_108 && ld_116 <= 2.0 * ld_108) { if (ai_44) { if (ai_40) DrawFiboLevel("DevLevel_" + 0, Time[li_60], Low[li_60], Time[li_64], High[li_64], Time[li_68], Low[li_68], ad_24, 1, ad_32, Red); } else { DrawLine("CD_" + Time[li_72], Time[li_72], High[li_72], Time[li_68], Low[li_68], Red); DrawLine("BC_" + Time[li_68], Time[li_64], High[li_64], Time[li_68], Low[li_68], Red); DrawLine("AB_" + Time[li_64], Time[li_64], High[li_64], Time[li_60], Low[li_60], Red); if (ai_40) { } } } else { if (ai_44) if (ai_40) DrawFiboLevel("DevLevel_" + 0, Time[li_60], Low[li_60], Time[li_64], High[li_64], Time[li_68], Low[li_68], ad_24, 1, ad_32, Red); } } else { ld_76 = High[li_60]; ld_84 = Low[li_64]; ld_92 = High[li_68]; ld_100 = Low[li_72]; ld_108 = ld_76 - ld_84; ld_116 = ld_92 - ld_84; ld_124 = ld_92 - ld_100; if (ld_124 >= ld_108 * ad_24 && ld_124 <= ld_108 * ad_32 && ld_116 >= ld_108 && ld_116 <= 2.0 * ld_108) { if (ai_44) { if (ai_40) DrawFiboLevel("DevLevel_" + 0, Time[li_60], High[li_60], Time[li_64], Low[li_64], Time[li_68], High[li_68], ad_24, 1, ad_32, Blue); } else { DrawLine("CD_" + Time[li_72], Time[li_72], Low[li_72], Time[li_68], High[li_68], Blue); DrawLine("BC_" + Time[li_68], Time[li_64], Low[li_64], Time[li_68], High[li_68], Blue); DrawLine("AB_" + Time[li_64], Time[li_64], Low[li_64], Time[li_60], High[li_60], Blue); if (ai_40) { } } } else { if (ai_44) if (ai_40) DrawFiboLevel("DevLevel_" + 0, Time[li_60], High[li_60], Time[li_64], Low[li_64], Time[li_68], High[li_68], ad_24, 1, ad_32, Blue); } } if (ai_44) l_index_152 = li_60 - 1; else l_index_152 = li_68 - 1; ai_48 = li_60; li_60 = -1; li_64 = -1; li_68 = -1; li_72 = -1; } } } } } return (0); } void DrawLine(string a_name_0, int a_datetime_8, double ad_12, int a_datetime_20, double ad_24, color a_color_32) { if (ObjectFind(a_name_0) == 0) { ObjectMove(a_name_0, 0, a_datetime_8, ad_12); ObjectMove(a_name_0, 1, a_datetime_20, ad_24); ObjectSet(a_name_0, OBJPROP_WIDTH, 2); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32); return; } ObjectCreate(a_name_0, OBJ_TREND, 0, a_datetime_8, ad_12, a_datetime_20, ad_24); ObjectSet(a_name_0, OBJPROP_RAY, FALSE); ObjectSet(a_name_0, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(a_name_0, OBJPROP_WIDTH, 2); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32); ObjectSet(a_name_0, OBJPROP_BACK, FALSE); } void DrawFiboLevel(string a_name_0, int a_datetime_8, double ad_12, int a_datetime_20, double ad_24, int a_datetime_32, double ad_36, double ad_44, double ad_52, double ad_60, color a_color_68) { if (ObjectFind(a_name_0) == 0) { ObjectMove(a_name_0, 0, a_datetime_8, ad_12); ObjectMove(a_name_0, 1, a_datetime_20, ad_24); ObjectMove(a_name_0, 2, a_datetime_32, ad_36); ObjectSet(a_name_0, OBJPROP_LEVELCOLOR, a_color_68); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_68); return; } ObjectCreate(a_name_0, OBJ_EXPANSION, 0, a_datetime_8, ad_12, a_datetime_20, ad_24, a_datetime_32, ad_36); ObjectSet(a_name_0, OBJPROP_LEVELCOLOR, a_color_68); ObjectSet(a_name_0, OBJPROP_FIBOLEVELS, 3); ObjectSet(a_name_0, OBJPROP_FIRSTLEVEL, ad_44); ObjectSetFiboDescription(a_name_0, 0, DoubleToStr(ad_44, 3)); ObjectSet(a_name_0, 211, ad_52); ObjectSetFiboDescription(a_name_0, 1, DoubleToStr(ad_52, 3)); ObjectSet(a_name_0, 212, ad_60); ObjectSetFiboDescription(a_name_0, 2, DoubleToStr(ad_60, 3)); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_68); }