#property copyright "http://forexinnovator.com/" #property link "http://forexinnovator.com/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 LightBlue /* #import "innovator.dll" void Init(); int CheckStatus(); string GetErrorMessage(); double l1(int a0, double& a1[], int& a2[]); void l2(int a0, double& a1[], int& a2[]); void l3(int a0, double& a1[], double& a2[], double& a3[], int& a4[]); #import */ extern bool VisibleSR = TRUE; bool gi_80 = FALSE; //FALSE bool gi_84 = TRUE; bool gi_88 = FALSE; bool gi_92 = FALSE; int gi_96 = 5; string gs_unused_100 = "...SR Lines styles ........................"; int gi_108 = 0; int gi_112 = 2; int gi_116 = 2; int gi_120 = 2; int gi_124 = 2; int gi_128 = 1; int gi_132 = 1; int gi_136 = 13353215; int gi_140 = 255; int gi_144 = 16711680; int gi_148 = 32768; int gi_152 = 3342336; int gi_156 = 36095; int gi_160 = 2621440; string gs_unused_164 = "...Trend Lines styles ........................"; int gi_172 = 2; int gi_176 = 2; int gi_180 = 2; int gi_184 = 2; int gi_188 = 1; int gi_192 = 1; int gi_196 = 1; int gi_200 = 1; int gi_204 = 1; int gi_208 = 1; int gi_212 = 1; int gi_216 = 2; int gi_220 = 2; int gi_224 = 2; int gi_228 = 13828244; int gi_232 = 16777215; int gi_236 = 255; int gi_240 = 65535; int gi_244 = 16776960; int gi_248 = 32768; int gi_252 = 11823615; int gi_256 = 255; string gs_unused_260 = "...Zigzag Settings for Trend ........................"; int gi_268 = 9; int gi_272 = 0; int gi_276 = 3; string gs_unused_280 = "...Zigzag Settings for SR ........................"; int gi_288 = 12; int gi_292 = 6; int gi_296 = 3; bool g_bool_300 = TRUE; double gda_304[]; //Display buffers 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_348 = 0; string gs__level__352 = " level "; string gs_360 = "b"; string gs__level__368 = " level "; string gs_376 = "a"; 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 * gi_96; li_0++) { ObjectDelete("MN1" + gs__level__352 + li_0 + gs_360); ObjectDelete("W1" + gs__level__352 + li_0 + gs_360); ObjectDelete("D1" + gs__level__352 + li_0 + gs_360); ObjectDelete("H4" + gs__level__352 + li_0 + gs_360); ObjectDelete("H1" + gs__level__352 + li_0 + gs_360); ObjectDelete("M15" + gs__level__352 + li_0 + gs_360); ObjectDelete("MN1" + gs__level__368 + li_0 + gs_376); ObjectDelete("W1" + gs__level__368 + li_0 + gs_376); ObjectDelete("D1" + gs__level__368 + li_0 + gs_376); ObjectDelete("H4" + gs__level__368 + li_0 + gs_376); ObjectDelete("H1" + gs__level__368 + li_0 + gs_376); ObjectDelete("M15" + gs__level__368 + li_0 + gs_376); } } int deinit() { StatusMessage(""); delObjects(); return (0); } int init() { /* if (CheckStatus() == 0) { StatusMessage("Authenticating..."); RefreshRates(); } Init(); */ ArrayResize(gda_304, gi_328); //resize to 2000 elements ArraySetAsSeries(gda_304, TRUE); //index in series order true (reversed) 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", gi_228, gi_172, gi_200); CreateTrendLine("Trend_MN1_Up", gi_228, gi_172, gi_200); CreateTrendLine("Trend_W1_Down", gi_232, gi_176, gi_204); CreateTrendLine("Trend_W1_Up", gi_232, gi_176, gi_204); CreateTrendLine("Trend_D1_Down", gi_236, gi_180, gi_208); CreateTrendLine("Trend_D1_Up", gi_236, gi_180, gi_208); CreateTrendLine("Trend_H4_Down", gi_240, gi_184, gi_212); CreateTrendLine("Trend_H4_Up", gi_240, gi_184, gi_212); CreateTrendLine("Trend_H1_Down", gi_244, gi_188, gi_216); CreateTrendLine("Trend_H1_Up", gi_244, gi_188, gi_216); CreateTrendLine("Trend_M15_Down", gi_248, gi_192, gi_220); CreateTrendLine("Trend_M15_Up", gi_248, gi_192, gi_220); CreateTrendLine("Trend_M5_Down", gi_252, gi_196, gi_224); CreateTrendLine("Trend_M5_Up", gi_252, gi_196, gi_224); CreateTrendLine("Trend_M1_Down", gi_256, gi_196, gi_224); CreateTrendLine("Trend_M1_Up", gi_256, gi_196, gi_224); IndicatorShortName("SRLines"); return (0); } int start() { int l_datetime_0; int li_4; double l_ihigh_8; double l_ilow_16; /* Init(); if (CheckStatus() == 0) { StatusMessage(GetErrorMessage()); delObjects(); return (0); } StatusMessage(""); */ if (gi_92 && 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, gi_160, 1, STYLE_SOLID); } if (gi_80) { initializeBuffers(); zigzag(PERIOD_MN1, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_MN1); drawDnTrend(PERIOD_MN1, "Trend_MN1_Down"); drawUpTrend(PERIOD_MN1, "Trend_MN1_Up"); if (Period() <= PERIOD_W1) { initializeBuffers(); zigzag(PERIOD_W1, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_W1); drawDnTrend(PERIOD_W1, "Trend_W1_Down"); drawUpTrend(PERIOD_W1, "Trend_W1_Up"); } if (Period() <= PERIOD_D1) { initializeBuffers(); zigzag(PERIOD_D1, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_D1); drawDnTrend(PERIOD_D1, "Trend_D1_Down"); drawUpTrend(PERIOD_D1, "Trend_D1_Up"); } if (Period() <= PERIOD_H4) { initializeBuffers(); zigzag(PERIOD_H4, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_H4); drawDnTrend(PERIOD_H4, "Trend_H4_Down"); drawUpTrend(PERIOD_H4, "Trend_H4_Up"); } if (Period() <= PERIOD_H1) { initializeBuffers(); zigzag(PERIOD_H1, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_H1); drawDnTrend(PERIOD_H1, "Trend_H1_Down"); drawUpTrend(PERIOD_H1, "Trend_H1_Up"); } if (Period() <= PERIOD_M15) { initializeBuffers(); zigzag(PERIOD_M15, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_M15); drawDnTrend(PERIOD_M15, "Trend_M15_Down"); drawUpTrend(PERIOD_M15, "Trend_M15_Up"); } if (Period() <= PERIOD_M5) { initializeBuffers(); zigzag(PERIOD_M5, gi_268, gi_272, gi_276); fillztzb(); m1(PERIOD_M5); drawDnTrend(PERIOD_M5, "Trend_M5_Down"); drawUpTrend(PERIOD_M5, "Trend_M5_Up"); } } if (VisibleSR) { if (Period() <= PERIOD_MN1) { g_timeframe_348 = 43200; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("MN1", gi_112, gi_136, 1, 0); } if (Period() <= PERIOD_W1) { g_timeframe_348 = 10080; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("W1", gi_116, gi_140, gi_96 + 1, 0); } if (Period() <= PERIOD_D1) { g_timeframe_348 = 1440; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("D1", gi_120, gi_144, gi_96 * 2 + 1, 0); } if (gi_84) { if (Period() <= PERIOD_H4) { g_timeframe_348 = 240; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("H4", gi_124, gi_148, 3 * gi_96 + 1, 0); } } if (gi_88) { if (Period() <= PERIOD_H1) { g_timeframe_348 = 60; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("H1", gi_128, gi_152, gi_96 << 2 + 1, 0); } if (Period() <= PERIOD_M15) { g_timeframe_348 = 15; initializeBuffers(); zigzag(g_timeframe_348, gi_288, gi_292, gi_296); fillztzb(); m1(g_timeframe_348); DrawSupportResistance("M15", gi_132, gi_156, 5 * gi_96 + 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_28; int l_datetime_32; string ls_unused_36; int l_count_44 = 0; for (int li_48 = 0; li_48 < gi_328; li_48++) { if (gda_316[li_48] > 0.0 && gda_316[li_48] != gd_336) { l_count_44++; li_28 = l_count_44 + ai_16 - 1; l_datetime_32 = iTime(NULL, g_timeframe_348, li_48); drawHLine(as_0 + gs__level__352 + l_count_44 + gs_360, gda_316[li_48], ai_12, ai_8, gi_108, "", ad_20); if (l_count_44 >= gi_96) break; } } l_count_44 = 0; for (li_48 = 0; li_48 < gi_328; li_48++) { if (gda_320[li_48] > 0.0 && gda_320[li_48] != gd_336) { l_count_44++; li_28 = l_count_44 + ai_16 - 1; l_datetime_32 = iTime(NULL, g_timeframe_348, li_48); drawHLine(as_0 + gs__level__368 + l_count_44 + gs_376, gda_320[li_48], ai_12, ai_8, gi_108, "", ad_20); if (l_count_44 >= gi_96) break; } } } void m1(int a_timeframe_0) { int lia_4[1]; gd_336 = ArraySort(gda_304,WHOLE_ARRAY,lia_4[1],MODE_ASCEND); // educated! //gd_336 = l1(gi_328, gda_304, lia_4); //gd_336 = (highest or lowest value for trendline ArrayBsearch) //g_datetime_344 = iTime(NULL, a_timeframe_0, lia_4[0]); // g_datetime_344 = NOT USED } void fillztzb() { int lia_0[1]; ArrayInitialize(gda_316, 0.0); //support ArrayInitialize(gda_320, 0.0); //resistance //l2(gi_328, gda_304, lia_0); //Array functions //l3(gi_328, gda_304, gda_316, gda_320, lia_0); ArrayCopy(gda_316,gda_304,0,0,WHOLE_ARRAY); // educated! } void drawDnTrend(int a_timeframe_0, string a_name_4) { int li_12; int li_16; double ld_20; double ld_28; int l_datetime_36; int l_datetime_40; bool li_44 = FALSE; bool li_48 = FALSE; for (int l_index_52 = 0; l_index_52 < gi_328; l_index_52++) { if (gda_316[l_index_52] > 0.0 && gda_316[l_index_52] != gd_336) { if (li_44 == FALSE) { li_12 = l_index_52; ld_20 = gda_316[l_index_52]; li_44 = TRUE; } else { if (gda_316[l_index_52] >= ld_20) { li_16 = l_index_52; ld_28 = gda_316[l_index_52]; li_48 = TRUE; break; } } } } if (li_44 == TRUE && li_48 == TRUE) { l_datetime_36 = iTime(NULL, a_timeframe_0, li_12); l_datetime_40 = iTime(NULL, a_timeframe_0, li_16); ObjectMove(a_name_4, 1, l_datetime_36, ld_20); ObjectMove(a_name_4, 0, l_datetime_40, ld_28); } } void drawUpTrend(int a_timeframe_0, string a_name_4) { int li_12; int li_16; double ld_20; double ld_28; int l_datetime_36; int l_datetime_40; bool li_44 = FALSE; bool li_48 = FALSE; for (int l_index_52 = 0; l_index_52 < gi_328; l_index_52++) { if (gda_320[l_index_52] > 0.0 && gda_320[l_index_52] != gd_336) { if (li_44 == FALSE) { li_12 = l_index_52; ld_20 = gda_320[l_index_52]; li_44 = TRUE; } else { if (gda_320[l_index_52] <= ld_20) { li_16 = l_index_52; ld_28 = gda_320[l_index_52]; li_48 = TRUE; break; } } } } if (li_44 == TRUE && li_48 == TRUE) { l_datetime_36 = iTime(NULL, a_timeframe_0, li_12); l_datetime_40 = iTime(NULL, a_timeframe_0, li_16); ObjectMove(a_name_4, 1, l_datetime_36, ld_20); ObjectMove(a_name_4, 0, l_datetime_40, ld_28); } } 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_20; int li_24; int li_28; int li_32; int li_36; double ld_40; double ld_48; double ld_56; double ld_64; double ld_72; double ld_80; int l_ind_counted_88 = IndicatorCounted(); if (l_ind_counted_88 == 0 && gi_332) { ArrayInitialize(gda_304, 0.0); ArrayInitialize(gda_308, 0.0); ArrayInitialize(gda_312, 0.0); } if (l_ind_counted_88 == 0) li_20 = iBars(NULL, a_timeframe_0) - ai_4; if (l_ind_counted_88 > 0) { while (li_24 < gi_324 && li_16 < 100) { ld_48 = gda_304[li_16]; if (ld_48 != 0.0) li_24++; li_16++; } li_16--; li_20 = li_16; if (gda_312[li_16] != 0.0) { ld_56 = gda_312[li_16]; li_28 = 1; } else { ld_64 = gda_308[li_16]; li_28 = -1; } for (li_16 = li_20 - 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_92 = li_20; li_92 >= 0; li_92--) { ld_40 = iLow(NULL, a_timeframe_0, iLowest(NULL, a_timeframe_0, MODE_LOW, ai_4, li_92)); if (ld_40 == ld_80) ld_40 = 0.0; else { ld_80 = ld_40; if (iLow(NULL, a_timeframe_0, li_92) - ld_40 > ai_8 * Point) ld_40 = 0.0; else { for (int li_96 = 1; li_96 <= ai_12; li_96++) { ld_48 = gda_312[li_92 + li_96]; if (ld_48 != 0.0 && ld_48 > ld_40) gda_312[li_92 + li_96] = 0.0; } } } if (iLow(NULL, a_timeframe_0, li_92) == ld_40) gda_312[li_92] = ld_40; else gda_312[li_92] = 0.0; ld_40 = iHigh(NULL, a_timeframe_0, iHighest(NULL, a_timeframe_0, MODE_HIGH, ai_4, li_92)); if (ld_40 == ld_72) ld_40 = 0.0; else { ld_72 = ld_40; if (ld_40 - iHigh(NULL, a_timeframe_0, li_92) > ai_8 * Point) ld_40 = 0.0; else { for (li_96 = 1; li_96 <= ai_12; li_96++) { ld_48 = gda_308[li_92 + li_96]; if (ld_48 != 0.0 && ld_48 < ld_40) gda_308[li_92 + li_96] = 0.0; } } } if (iHigh(NULL, a_timeframe_0, li_92) == ld_40) gda_308[li_92] = ld_40; else gda_308[li_92] = 0.0; } if (li_28 == 0) { ld_80 = 0; ld_72 = 0; } else { ld_80 = ld_56; ld_72 = ld_64; } for (li_92 = li_20; li_92 >= 0; li_92--) { ld_48 = 0.0; switch (li_28) { case 0: if (ld_80 == 0.0 && ld_72 == 0.0) { if (gda_308[li_92] != 0.0) { ld_72 = iHigh(NULL, a_timeframe_0, li_92); li_32 = li_92; li_28 = -1; gda_304[li_92] = ld_72; ld_48 = 1; } if (gda_312[li_92] != 0.0) { ld_80 = iLow(NULL, a_timeframe_0, li_92); li_36 = li_92; li_28 = 1; gda_304[li_92] = ld_80; ld_48 = 1; } } break; case 1: if (gda_312[li_92] != 0.0 && gda_312[li_92] < ld_80 && gda_308[li_92] == 0.0) { gda_304[li_36] = 0.0; li_36 = li_92; ld_80 = gda_312[li_92]; gda_304[li_92] = ld_80; ld_48 = 1; } if (gda_308[li_92] != 0.0 && gda_312[li_92] == 0.0) { ld_72 = gda_308[li_92]; li_32 = li_92; gda_304[li_92] = ld_72; li_28 = -1; ld_48 = 1; } break; case -1: if (gda_308[li_92] != 0.0 && gda_308[li_92] > ld_72 && gda_312[li_92] == 0.0) { gda_304[li_32] = 0.0; li_32 = li_92; ld_72 = gda_308[li_92]; gda_304[li_92] = ld_72; } if (gda_312[li_92] != 0.0 && gda_308[li_92] == 0.0) { ld_80 = gda_312[li_92]; li_36 = li_92; gda_304[li_92] = ld_80; li_28 = 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); } void StatusMessage(string as_0) { string l_text_12; int li_20; int li_28; if (StringLen(as_0) == 0) { ObjectDelete("STATUS_LABEL"); for (int l_count_8 = 0; l_count_8 < 10; l_count_8++) ObjectDelete("STATUS_LABEL_" + l_count_8); } else { for (l_count_8 = 0; StringLen(as_0) > 0; l_count_8++) { if (StringLen(as_0) > 60) { li_20 = -1; for (int li_24 = 0; li_24 <= 60; li_24++) { li_28 = StringGetChar(as_0, li_24); if (li_28 == ' ') li_20 = li_24; } if (li_20 < 20) li_20 = 60; l_text_12 = StringSubstr(as_0, 0, li_20); as_0 = StringSubstr(as_0, li_20 + 1); } else { l_text_12 = as_0; as_0 = ""; } ObjectCreate("STATUS_LABEL_" + l_count_8, OBJ_LABEL, 0, 0, 0); ObjectSetText("STATUS_LABEL_" + l_count_8, l_text_12, 15, "Arial Bold", Red); ObjectSet("STATUS_LABEL_" + l_count_8, OBJPROP_CORNER, 0); ObjectSet("STATUS_LABEL_" + l_count_8, OBJPROP_XDISTANCE, 10); ObjectSet("STATUS_LABEL_" + l_count_8, OBJPROP_YDISTANCE, 20 * l_count_8 + 10); } while (l_count_8 < 10) { ObjectDelete("STATUS_LABEL_" + l_count_8); l_count_8++; } } }