#property copyright "InsightNext" #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 Black #property indicator_color2 Black #property indicator_color3 Black #property indicator_color4 Black #property indicator_color5 Black #property indicator_color6 Black #property indicator_color7 Black int gi_76 = 1; extern int DayStartHour = 6; double g_ibuf_84[]; double g_ibuf_88[]; double g_ibuf_92[]; double g_ibuf_96[]; double g_ibuf_100[]; double g_ibuf_104[]; double g_ibuf_108[]; int init() { SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_NONE); SetIndexStyle(2, DRAW_NONE); SetIndexStyle(3, DRAW_NONE); SetIndexStyle(4, DRAW_NONE); SetIndexStyle(5, DRAW_NONE); SetIndexStyle(6, DRAW_NONE); SetIndexBuffer(0, g_ibuf_84); SetIndexBuffer(1, g_ibuf_88); SetIndexBuffer(2, g_ibuf_92); SetIndexBuffer(3, g_ibuf_96); SetIndexBuffer(4, g_ibuf_100); SetIndexBuffer(5, g_ibuf_104); SetIndexBuffer(6, g_ibuf_108); IndicatorShortName("TQ_04"); SetIndexLabel(0, NULL); SetIndexLabel(1, NULL); SetIndexLabel(2, NULL); SetIndexLabel(3, NULL); SetIndexLabel(4, NULL); SetIndexLabel(5, NULL); SetIndexLabel(6, NULL); return (0); } int start() { double lda_0[4]; double lda_4[7]; int li_20; int li_24; int li_28; int li_32; int li_36; int li_40; switch (gi_76) { case 1: if (Period() > PERIOD_H1) return (0); case 2: if (Period() > PERIOD_D1) return (0); case 3: if (Period() > PERIOD_W1) return (0); } int li_12 = Bars - IndicatorCounted(); if (li_12 < Bars) li_12++; for (int li_16 = li_12 - 1; li_16 >= 0; li_16--) { if (gi_76 == 1) { li_20 = getDayStart(Time[li_16]); li_24 = getDayStart(Time[li_16 + 1]); if (li_20 != li_24) { getPrevDayPrices(lda_0, li_20); getPivots(lda_4, lda_0); } } if (gi_76 == 2) { li_28 = getWeekStart(Time[li_16]); li_32 = getWeekStart(Time[li_16 + 1]); if (li_28 != li_32) { getPrevWeekPrices(lda_0, li_28); getPivots(lda_4, lda_0); } } if (gi_76 == 3) { li_36 = getMonthStart(Time[li_16]); li_40 = getMonthStart(Time[li_16 + 1]); if (li_36 != li_40) { getPrevMonthPrices(lda_0, li_36); getPivots(lda_4, lda_0); } } g_ibuf_84[li_16] = lda_4[0]; g_ibuf_88[li_16] = lda_4[1]; g_ibuf_92[li_16] = lda_4[2]; g_ibuf_96[li_16] = lda_4[3]; g_ibuf_100[li_16] = lda_4[4]; g_ibuf_104[li_16] = lda_4[5]; g_ibuf_108[li_16] = lda_4[6]; } return (0); } void getPivots(double &ada_0[7], double ada_4[4]) { ada_0[3] = NormalizeDouble((ada_4[2] + ada_4[3] + ada_4[0]) / 3.0, Digits); ada_0[2] = NormalizeDouble(ada_0[3] + (ada_4[2] - ada_4[3]) / 2.0, Digits); ada_0[4] = NormalizeDouble(ada_0[3] - (ada_4[2] - ada_4[3]) / 2.0, Digits); ada_0[1] = NormalizeDouble(ada_0[3] + 0.618 * (ada_4[2] - ada_4[3]), Digits); ada_0[5] = NormalizeDouble(ada_0[3] - 0.618 * (ada_4[2] - ada_4[3]), Digits); ada_0[0] = NormalizeDouble(ada_0[3] + 1.0 * (ada_4[2] - ada_4[3]), Digits); ada_0[6] = NormalizeDouble(ada_0[3] - 1.0 * (ada_4[2] - ada_4[3]), Digits); } void getPrevDayPrices(double &ada_0[4], int ai_4) { int l_shift_8 = iBarShift(NULL, PERIOD_H1, ai_4 - 3600, FALSE); int li_12 = getDayStart(iTime(NULL, PERIOD_H1, l_shift_8)); ada_0[2] = iHigh(NULL, PERIOD_H1, l_shift_8); ada_0[3] = iLow(NULL, PERIOD_H1, l_shift_8); ada_0[1] = iOpen(NULL, PERIOD_H1, l_shift_8); ada_0[0] = iClose(NULL, PERIOD_H1, l_shift_8); l_shift_8++; while (getDayStart(iTime(NULL, PERIOD_H1, l_shift_8)) == li_12) { ada_0[2] = MathMax(ada_0[2], iHigh(NULL, PERIOD_H1, l_shift_8)); ada_0[3] = MathMin(ada_0[3], iLow(NULL, PERIOD_H1, l_shift_8)); ada_0[1] = iOpen(NULL, PERIOD_H1, l_shift_8); l_shift_8++; } } void getPrevWeekPrices(double &ada_0[4], int ai_4) { int li_8 = ai_4 - 604800; int l_shift_12 = iBarShift(NULL, PERIOD_W1, li_8, TRUE); ada_0[2] = iHigh(NULL, PERIOD_W1, l_shift_12); ada_0[3] = iLow(NULL, PERIOD_W1, l_shift_12); ada_0[1] = iOpen(NULL, PERIOD_W1, l_shift_12); ada_0[0] = iClose(NULL, PERIOD_W1, l_shift_12); } void getPrevMonthPrices(double &ada_0[4], int ai_4) { int li_8 = getMonthStart(ai_4 - 86400); int l_shift_12 = iBarShift(NULL, PERIOD_MN1, li_8, TRUE); ada_0[2] = iHigh(NULL, PERIOD_MN1, l_shift_12); ada_0[3] = iLow(NULL, PERIOD_MN1, l_shift_12); ada_0[1] = iOpen(NULL, PERIOD_MN1, l_shift_12); ada_0[0] = iClose(NULL, PERIOD_MN1, l_shift_12); } int getDayStart(int ai_0) { ai_0 -= TimeSeconds(ai_0); ai_0 -= 60 * TimeMinute(ai_0); if (TimeHour(ai_0) >= DayStartHour) ai_0 -= 3600 * (TimeHour(ai_0) - DayStartHour); else ai_0 -= 3600 * (TimeHour(ai_0) + (24 - DayStartHour)); return (ai_0); } int getWeekStart(int ai_0) { ai_0 -= TimeSeconds(ai_0); ai_0 -= 60 * TimeMinute(ai_0); ai_0 -= 3600 * TimeHour(ai_0); ai_0 -= 86400 * TimeDayOfWeek(ai_0); return (ai_0); } int getMonthStart(int ai_0) { ai_0 -= TimeSeconds(ai_0); ai_0 -= 60 * TimeMinute(ai_0); ai_0 -= 3600 * TimeHour(ai_0); ai_0 -= 86400 * (TimeDay(ai_0) - 1); return (ai_0); }