U_MTF_SRTrend_v2-.mq4
U_MTF_SRTrend_v2-.mq4 FOREX MetaTrader4 Indicators Download
U_MTF_SRTrend_v2-.mq4 download link will appear after 10 seconds.
U_MTF_SRTrend_v2-.mq4 Programming source code
#property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 LightBlue extern bool ShowSR = TRUE; extern bool ShowTrend = FALSE; extern bool ShowH4SR = TRUE; extern bool ShowLowTFSR = FALSE; extern bool ShowDayRect = FALSE; extern int MaxSupportResistance = 6; extern string Note1 = "...SR Lines styles ........................"; extern int SRStyle = 0; extern int SRwidth1 = 2; extern int SRwidth2 = 2; extern int SRwidth3 = 2; extern int SRwidth4 = 1; extern int SRwidth5 = 1; extern int SRwidth6 = 1; extern color SRColor1 = Maroon; extern color SRColor2 = Purple; extern color SRColor3 = Red; extern color SRColor4 = Brown; extern color SRColor5 = C'0x00,0x00,0x33'; extern color SRColor6 = DarkOrange; extern color RecColor = C'0x00,0x00,0x28'; extern string Note2 = "...Trend Lines styles ........................"; extern int MN1Width = 1; extern int W1Width = 1; extern int D1Width = 1; extern int H4Width = 1; extern int H1Width = 1; extern int M15Width = 1; extern int M5Width = 1; extern int MN1Style = 1; extern int W1Style = 1; extern int D1Style = 1; extern int H4Style = 1; extern int H1Style = 2; extern int M15Style = 2; extern int M5Style = 2; extern color MN1Color = DarkViolet; extern color W1Color = White; extern color D1Color = Red; extern color H4Color = Yellow; extern color H1Color = Aqua; extern color M15Color = Green; extern color M5Color = HotPink; extern color M1Color = Red; extern string Note3 = "...Zigzag Settings for Trend ........................"; extern int z1 = 9; extern int z2 = 0; extern int z3 = 3; extern string Note4 = "...Zigzag Settings for SR ........................"; extern int y1 = 12; extern int y2 = 6; extern int y3 = 3; bool g_bool_300 = TRUE; double gda_304[]; double gda_308[]; double gda_312[]; double gda_316[]; double gda_320[]; int gi_324 = 3; int gi_328 = 2000; bool gi_332 = FALSE; double gd_336; int g_datetime_344; int g_timeframe_508 = 0; void delObjects() { ObjectDelete("Trend_MN1_Down"); ObjectDelete("Trend_MN1_Up"); ObjectDelete("Trend_W1_Down"); ObjectDelete("Trend_W1_Up"); ObjectDelete("Trend_D1_Down"); ObjectDelete("Trend_D1_Up"); ObjectDelete("Trend_H4_Down"); ObjectDelete("Trend_H4_Up"); ObjectDelete("Trend_H1_Down"); ObjectDelete("Trend_H1_Up"); ObjectDelete("Trend_M15_Down"); ObjectDelete("Trend_M15_Up"); ObjectDelete("Trend_M5_Down"); ObjectDelete("Trend_M5_Up"); ObjectDelete("Trend_M1_Down"); ObjectDelete("Trend_M1_Up"); ObjectDelete("DREC"); for (int li_0 = 1; li_0 <= 9 * MaxSupportResistance; li_0++) { ObjectDelete("SUP__________" + li_0); ObjectDelete("RES__________" + li_0); } } int deinit() { delObjects(); return (0); } int init() { ArrayResize(gda_304, gi_328); ArraySetAsSeries(gda_304, TRUE); ArrayResize(gda_308, gi_328); ArraySetAsSeries(gda_308, TRUE); ArrayResize(gda_312, gi_328); ArraySetAsSeries(gda_312, TRUE); ArrayResize(gda_316, gi_328); ArraySetAsSeries(gda_316, TRUE); ArrayResize(gda_320, gi_328); ArraySetAsSeries(gda_320, TRUE); SetIndexEmptyValue(0, 0.0); CreateTrendLine("Trend_MN1_Down", MN1Color, MN1Width, MN1Style); CreateTrendLine("Trend_MN1_Up", MN1Color, MN1Width, MN1Style); CreateTrendLine("Trend_W1_Down", W1Color, W1Width, W1Style); CreateTrendLine("Trend_W1_Up", W1Color, W1Width, W1Style); CreateTrendLine("Trend_D1_Down", D1Color, D1Width, D1Style); CreateTrendLine("Trend_D1_Up", D1Color, D1Width, D1Style); CreateTrendLine("Trend_H4_Down", H4Color, H4Width, H4Style); CreateTrendLine("Trend_H4_Up", H4Color, H4Width, H4Style); CreateTrendLine("Trend_H1_Down", H1Color, H1Width, H1Style); CreateTrendLine("Trend_H1_Up", H1Color, H1Width, H1Style); CreateTrendLine("Trend_M15_Down", M15Color, M15Width, M15Style); CreateTrendLine("Trend_M15_Up", M15Color, M15Width, M15Style); CreateTrendLine("Trend_M5_Down", M5Color, M5Width, M5Style); CreateTrendLine("Trend_M5_Up", M5Color, M5Width, M5Style); CreateTrendLine("Trend_M1_Down", M1Color, M5Width, M5Style); CreateTrendLine("Trend_M1_Up", M1Color, M5Width, M5Style); IndicatorShortName("Usama_SupportResistanceLines"); return (0); } int start() { int l_datetime_0; int li_4; double l_ihigh_8; double l_ilow_16; if (ShowDayRect && Period() < PERIOD_D1) { l_ihigh_8 = iHigh(NULL, PERIOD_D1, 1); l_ilow_16 = iLow(NULL, PERIOD_D1, 1); l_datetime_0 = iTime(NULL, PERIOD_D1, 0); li_4 = l_datetime_0 + 86400; CreateRectangle("DREC", l_ihigh_8, l_ilow_16, l_datetime_0, li_4, RecColor, 1, STYLE_SOLID); } if (ShowTrend) { initializeBuffers(); zigzag(PERIOD_MN1, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_MN1); drawDnTrend(PERIOD_MN1, "Trend_MN1_Down"); drawUpTrend(PERIOD_MN1, "Trend_MN1_Up"); if (Period() <= PERIOD_W1) { initializeBuffers(); zigzag(PERIOD_W1, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_W1); drawDnTrend(PERIOD_W1, "Trend_W1_Down"); drawUpTrend(PERIOD_W1, "Trend_W1_Up"); } if (Period() <= PERIOD_D1) { initializeBuffers(); zigzag(PERIOD_D1, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_D1); drawDnTrend(PERIOD_D1, "Trend_D1_Down"); drawUpTrend(PERIOD_D1, "Trend_D1_Up"); } if (Period() <= PERIOD_H4) { initializeBuffers(); zigzag(PERIOD_H4, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_H4); drawDnTrend(PERIOD_H4, "Trend_H4_Down"); drawUpTrend(PERIOD_H4, "Trend_H4_Up"); } if (Period() <= PERIOD_H1) { initializeBuffers(); zigzag(PERIOD_H1, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_H1); drawDnTrend(PERIOD_H1, "Trend_H1_Down"); drawUpTrend(PERIOD_H1, "Trend_H1_Up"); } if (Period() <= PERIOD_M15) { initializeBuffers(); zigzag(PERIOD_M15, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_M15); drawDnTrend(PERIOD_M15, "Trend_M15_Down"); drawUpTrend(PERIOD_M15, "Trend_M15_Up"); } if (Period() <= PERIOD_M5) { initializeBuffers(); zigzag(PERIOD_M5, z1, z2, z3); fillztzb(); getFirstZigzagPoint(PERIOD_M5); drawDnTrend(PERIOD_M5, "Trend_M5_Down"); drawUpTrend(PERIOD_M5, "Trend_M5_Up"); } } if (ShowSR) { if (Period() <= PERIOD_MN1) { g_timeframe_508 = 43200; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("MN1", SRwidth1, SRColor1, 1, 0); } if (Period() <= PERIOD_W1) { g_timeframe_508 = 10080; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("W1", SRwidth2, SRColor2, MaxSupportResistance + 1, 0); } if (Period() <= PERIOD_D1) { g_timeframe_508 = 1440; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("D1", SRwidth3, SRColor3, MaxSupportResistance * 2 + 1, 0); } if (ShowH4SR) { if (Period() <= PERIOD_H4) { g_timeframe_508 = 240; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("H4", SRwidth4, SRColor4, 3 * MaxSupportResistance + 1, 0); } } if (ShowLowTFSR) { if (Period() <= PERIOD_H1) { g_timeframe_508 = 60; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("H1", SRwidth5, SRColor5, MaxSupportResistance << 2 + 1, 0); } if (Period() <= PERIOD_M15) { g_timeframe_508 = 15; initializeBuffers(); zigzag(g_timeframe_508, y1, y2, y3); fillztzb(); getFirstZigzagPoint(g_timeframe_508); DrawSupportResistance("M15", SRwidth6, SRColor6, 5 * MaxSupportResistance + 1, 0); } } } return (0); } void DrawSupportResistance(string as_0, int ai_8, int ai_12, int ai_16, double ad_20 = 0.0) { int li_64; int l_datetime_68; string ls_72; int l_count_60 = 0; for (int li_52 = 0; li_52 < gi_328; li_52++) { if (gda_316[li_52] > 0.0 && gda_316[li_52] != gd_336) { l_count_60++; li_64 = l_count_60 + ai_16 - 1; l_datetime_68 = iTime(NULL, g_timeframe_508, li_52); ls_72 = TimeYear(l_datetime_68) + "." + TimeMonth(l_datetime_68) + "." + TimeDay(l_datetime_68) + " " + TimeHour(l_datetime_68) + ":" + TimeMinute(l_datetime_68); drawHLine("RES__________" + li_64, gda_316[li_52], ai_12, ai_8, SRStyle, as_0 + "_RESISTANCE_" + l_count_60 + "\n" + ls_72, ad_20); if (l_count_60 >= MaxSupportResistance) break; } } l_count_60 = 0; for (li_52 = 0; li_52 < gi_328; li_52++) { if (gda_320[li_52] > 0.0 && gda_320[li_52] != gd_336) { l_count_60++; li_64 = l_count_60 + ai_16 - 1; l_datetime_68 = iTime(NULL, g_timeframe_508, li_52); ls_72 = TimeYear(l_datetime_68) + "." + TimeMonth(l_datetime_68) + "." + TimeDay(l_datetime_68) + " " + TimeHour(l_datetime_68) + ":" + TimeMinute(l_datetime_68); drawHLine("SUP__________" + li_64, gda_320[li_52], ai_12, ai_8, SRStyle, as_0 + "_SUPPORT_" + l_count_60 + "\n" + ls_72, ad_20); if (l_count_60 >= MaxSupportResistance) break; } } } void getFirstZigzagPoint(int a_timeframe_0) { for (int li_4 = 0; li_4 < gi_328; li_4++) { if (gda_304[li_4] > 0.0) { gd_336 = gda_304[li_4]; g_datetime_344 = iTime(NULL, a_timeframe_0, li_4); return; } } } void fillztzb() { int li_20 = 0; int li_24 = 0; ArrayInitialize(gda_316, 0.0); ArrayInitialize(gda_320, 0.0); double ld_4 = 0; double ld_12 = 0; for (int l_index_0 = 0; l_index_0 < gi_328; l_index_0++) { if (gda_304[l_index_0] > 0.0) { if (ld_4 == 0.0) ld_4 = gda_304[l_index_0]; else { ld_12 = gda_304[l_index_0]; break; } } } if (ld_4 > ld_12) li_20 = 1; else li_20 = 2; li_24 = li_20; for (l_index_0 = 0; l_index_0 < gi_328; l_index_0++) { if (gda_304[l_index_0] > 0.0) { if (li_24 == 1) { gda_316[l_index_0] = gda_304[l_index_0]; li_24 = 2; } else { gda_320[l_index_0] = gda_304[l_index_0]; li_24 = 1; } } } } void drawDnTrend(int a_timeframe_0, string a_name_4) { int li_16; int li_20; double ld_24; double ld_32; int l_datetime_40; int l_datetime_44; bool li_48 = FALSE; bool li_52 = FALSE; for (int l_index_12 = 0; l_index_12 < gi_328; l_index_12++) { if (gda_316[l_index_12] > 0.0 && gda_316[l_index_12] != gd_336) { if (li_48 == FALSE) { li_16 = l_index_12; ld_24 = gda_316[l_index_12]; li_48 = TRUE; } else { if (gda_316[l_index_12] >= ld_24) { li_20 = l_index_12; ld_32 = gda_316[l_index_12]; li_52 = TRUE; break; } } } } if (li_48 == TRUE && li_52 == TRUE) { l_datetime_40 = iTime(NULL, a_timeframe_0, li_16); l_datetime_44 = iTime(NULL, a_timeframe_0, li_20); ObjectMove(a_name_4, 1, l_datetime_40, ld_24); ObjectMove(a_name_4, 0, l_datetime_44, ld_32); } } void drawUpTrend(int a_timeframe_0, string a_name_4) { int li_16; int li_20; double ld_24; double ld_32; int l_datetime_40; int l_datetime_44; bool li_48 = FALSE; bool li_52 = FALSE; for (int l_index_12 = 0; l_index_12 < gi_328; l_index_12++) { if (gda_320[l_index_12] > 0.0 && gda_320[l_index_12] != gd_336) { if (li_48 == FALSE) { li_16 = l_index_12; ld_24 = gda_320[l_index_12]; li_48 = TRUE; } else { if (gda_320[l_index_12] <= ld_24) { li_20 = l_index_12; ld_32 = gda_320[l_index_12]; li_52 = TRUE; break; } } } } if (li_48 == TRUE && li_52 == TRUE) { l_datetime_40 = iTime(NULL, a_timeframe_0, li_16); l_datetime_44 = iTime(NULL, a_timeframe_0, li_20); ObjectMove(a_name_4, 1, l_datetime_40, ld_24); ObjectMove(a_name_4, 0, l_datetime_44, ld_32); } } void drawHLine(string a_name_0, double ad_8, color a_color_16, int a_width_20 = 1, int a_style_24 = 0, string a_text_28 = "", double a_pips_36 = 0.0) { a_pips_36 = 0; ObjectCreate(a_name_0, OBJ_HLINE, 0, 0, ad_8 + a_pips_36 * Point, 0); ObjectSet(a_name_0, OBJPROP_STYLE, a_style_24); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_16); ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_20); ObjectSet(a_name_0, OBJPROP_BACK, g_bool_300); ObjectSet(a_name_0, OBJPROP_RAY, FALSE); ObjectSetText(a_name_0, a_text_28, 10, "Times New Roman", Red); } void CreateTrendLine(string a_name_0, color a_color_8, int a_width_12 = 1, int a_style_16 = 0) { ObjectCreate(a_name_0, OBJ_TREND, 0, 0, 0, 0, 0); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_8); ObjectSet(a_name_0, OBJPROP_STYLE, a_style_16); ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_12); ObjectSet(a_name_0, OBJPROP_BACK, g_bool_300); } void initializeBuffers() { ArrayInitialize(gda_304, 0.0); ArrayInitialize(gda_308, 0.0); ArrayInitialize(gda_312, 0.0); ArrayInitialize(gda_316, 0.0); ArrayInitialize(gda_320, 0.0); } int zigzag(int a_timeframe_0, int ai_4 = 9, int ai_8 = 5, int ai_12 = 3) { int li_16; int li_24; int li_28; int li_32; int li_44; int li_48; double ld_52; double ld_60; double ld_68; double ld_76; double ld_84; double ld_92; int l_ind_counted_20 = IndicatorCounted(); if (l_ind_counted_20 == 0 && gi_332) { ArrayInitialize(gda_304, 0.0); ArrayInitialize(gda_308, 0.0); ArrayInitialize(gda_312, 0.0); } if (l_ind_counted_20 == 0) li_24 = iBars(NULL, a_timeframe_0) - ai_4; if (l_ind_counted_20 > 0) { while (li_28 < gi_324 && li_16 < 100) { ld_60 = gda_304[li_16]; if (ld_60 != 0.0) li_28++; li_16++; } li_16--; li_24 = li_16; if (gda_312[li_16] != 0.0) { ld_68 = gda_312[li_16]; li_32 = 1; } else { ld_76 = gda_308[li_16]; li_32 = -1; } for (li_16 = li_24 - 1; li_16 >= 0; li_16--) { gda_304[li_16] = 0.0; gda_312[li_16] = 0.0; gda_308[li_16] = 0.0; } } for (int li_36 = li_24; li_36 >= 0; li_36--) { ld_52 = iLow(NULL, a_timeframe_0, iLowest(NULL, a_timeframe_0, MODE_LOW, ai_4, li_36)); if (ld_52 == ld_92) ld_52 = 0.0; else { ld_92 = ld_52; if (iLow(NULL, a_timeframe_0, li_36) - ld_52 > ai_8 * Point) ld_52 = 0.0; else { for (int li_40 = 1; li_40 <= ai_12; li_40++) { ld_60 = gda_312[li_36 + li_40]; if (ld_60 != 0.0 && ld_60 > ld_52) gda_312[li_36 + li_40] = 0.0; } } } if (iLow(NULL, a_timeframe_0, li_36) == ld_52) gda_312[li_36] = ld_52; else gda_312[li_36] = 0.0; ld_52 = iHigh(NULL, a_timeframe_0, iHighest(NULL, a_timeframe_0, MODE_HIGH, ai_4, li_36)); if (ld_52 == ld_84) ld_52 = 0.0; else { ld_84 = ld_52; if (ld_52 - iHigh(NULL, a_timeframe_0, li_36) > ai_8 * Point) ld_52 = 0.0; else { for (li_40 = 1; li_40 <= ai_12; li_40++) { ld_60 = gda_308[li_36 + li_40]; if (ld_60 != 0.0 && ld_60 < ld_52) gda_308[li_36 + li_40] = 0.0; } } } if (iHigh(NULL, a_timeframe_0, li_36) == ld_52) gda_308[li_36] = ld_52; else gda_308[li_36] = 0.0; } if (li_32 == 0) { ld_92 = 0; ld_84 = 0; } else { ld_92 = ld_68; ld_84 = ld_76; } for (li_36 = li_24; li_36 >= 0; li_36--) { ld_60 = 0.0; switch (li_32) { case 0: if (ld_92 == 0.0 && ld_84 == 0.0) { if (gda_308[li_36] != 0.0) { ld_84 = iHigh(NULL, a_timeframe_0, li_36); li_44 = li_36; li_32 = -1; gda_304[li_36] = ld_84; ld_60 = 1; } if (gda_312[li_36] != 0.0) { ld_92 = iLow(NULL, a_timeframe_0, li_36); li_48 = li_36; li_32 = 1; gda_304[li_36] = ld_92; ld_60 = 1; } } break; case 1: if (gda_312[li_36] != 0.0 && gda_312[li_36] < ld_92 && gda_308[li_36] == 0.0) { gda_304[li_48] = 0.0; li_48 = li_36; ld_92 = gda_312[li_36]; gda_304[li_36] = ld_92; ld_60 = 1; } if (gda_308[li_36] != 0.0 && gda_312[li_36] == 0.0) { ld_84 = gda_308[li_36]; li_44 = li_36; gda_304[li_36] = ld_84; li_32 = -1; ld_60 = 1; } break; case -1: if (gda_308[li_36] != 0.0 && gda_308[li_36] > ld_84 && gda_312[li_36] == 0.0) { gda_304[li_44] = 0.0; li_44 = li_36; ld_84 = gda_308[li_36]; gda_304[li_36] = ld_84; } if (gda_312[li_36] != 0.0 && gda_308[li_36] == 0.0) { ld_92 = gda_312[li_36]; li_48 = li_36; gda_304[li_36] = ld_92; li_32 = 1; } break; default: return/*(WARN)*/; } } return (0); } void CreateRectangle(string a_name_0, double ad_8, double ad_16, int a_datetime_24, int a_datetime_28, color a_color_32, int a_width_36 = 1, int a_style_40 = 0) { ObjectCreate(a_name_0, OBJ_RECTANGLE, 0, 0, 0, 0, 0); ObjectSet(a_name_0, OBJPROP_TIME1, a_datetime_24); ObjectSet(a_name_0, OBJPROP_TIME2, a_datetime_28); ObjectSet(a_name_0, OBJPROP_PRICE1, ad_8); ObjectSet(a_name_0, OBJPROP_PRICE2, ad_16); ObjectSet(a_name_0, OBJPROP_STYLE, a_style_40); ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36); ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32); ObjectSet(a_name_0, OBJPROP_BACK, TRUE); }