DB Pivots Strategy.mq4
DB Pivots Strategy.mq4 FOREX MetaTrader4 Indicators Download
DB Pivots Strategy.mq4 download link will appear after 10 seconds.
DB Pivots Strategy.mq4 Programming source code
#property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LawnGreen #property indicator_color2 Red #property indicator_color3 Black /*#import "DBMetaValidator.dll" int IsValid(string a0, string a1); #import*/ extern int BarsBack = 300; extern string userName = "xxx"; extern string password = "xxx"; extern int lowSensitivity = 15; extern int highSensitivity = 15; extern int pivotLength = 4; extern bool pivotSignals = TRUE; extern int FontSize = 10; extern bool TradersPivotsOn = TRUE; extern color TradersPivotsColor = Aqua; extern int TradersPivotsStyle = 1; extern bool AlertEmail = FALSE; extern bool AlertSound = TRUE; extern bool UseBody = FALSE; extern int LookbackPeriod = 150; double g_ibuf_144[]; double g_ibuf_148[]; double g_ibuf_152[]; double gda_unused_156[]; double gda_unused_160[]; double gda_164[300]; double gda_168[300]; int gi_172 = -1; int g_datetime_176; int g_datetime_180; int g_count_184; int g_count_188; bool gi_200 = TRUE; bool gi_204 = TRUE; bool gi_208 = FALSE; bool gi_212 = FALSE; bool gi_216 = FALSE; bool gi_220 = FALSE; bool gi_224 = FALSE; bool gi_228 = TRUE; bool gi_232 = FALSE; bool gi_236 = TRUE; bool gi_240 = TRUE; bool gi_244 = TRUE; bool gi_248 = TRUE; bool gi_252 = TRUE; bool gi_256 = FALSE; bool gi_260 = FALSE; bool gi_unused_264 = FALSE; bool gi_268 = FALSE; bool gi_272 = FALSE; int g_count_276; int g_count_280; int g_datetime_284; int g_datetime_288; int gi_292; double gda_296[4]; double gda_300[4]; int init() { SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, g_ibuf_144); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, g_ibuf_148); SetIndexStyle(2, DRAW_NONE); SetIndexBuffer(2, g_ibuf_152); IndicatorShortName("Pivots"); SetIndexLabel(0, "Upper"); SetIndexLabel(1, "Lower"); gi_200 = TRUE; gi_204 = TRUE; gi_172 = 0;//IsValid(userName, password); if (gi_172 == 0) Print("Authorization valid"); else { Print("Authorization not valid. Please update your current license."); Alert("Authorization not valid. Please update your current license."); return (0); } return (0); } int deinit() { for (int li_0 = 0; li_0 < WindowsTotal(); li_0++) ObjectsDeleteAll(li_0); return (0); } int start() { int l_arr_size_12; bool li_16; bool li_20; string ls_unused_24; double ld_48; double ld_56; if (gi_172 != 0) return (0); if (TimeMinute(TimeCurrent()) == 1 && TimeHour(TimeCurrent()) == 10) { gi_172 = 0;//IsValid(userName, password); if (gi_172 == 0) Print("Authorization valid"); else { Print("Authorization not valid. Please update your current license."); Alert("Authorization not valid. Please update your current license."); return (0); } } int li_0 = IndicatorCounted() + 1; if (li_0 < 0) return (-1); int li_4 = Bars - li_0; if (li_4 > BarsBack) li_4 = BarsBack; while (li_4 > 0) { ArrayResize(gda_164, BarsBack + 50); ArrayResize(gda_168, BarsBack + 50); l_arr_size_12 = ArraySize(gda_164); ArraySetAsSeries(gda_164, TRUE); ArraySetAsSeries(gda_168, TRUE); for (int l_index_8 = 0; l_index_8 < l_arr_size_12; l_index_8++) { if (UseBody == TRUE) { gda_164[l_index_8] = MathMax(Close[l_index_8], Open[l_index_8]); gda_168[l_index_8] = MathMin(Close[l_index_8], Open[l_index_8]); } else { gda_164[l_index_8] = High[l_index_8]; gda_168[l_index_8] = Low[l_index_8]; } } li_16 = FALSE; li_20 = FALSE; if (Close[li_4] < Average(gda_168, lowSensitivity, li_4) && gi_200 == TRUE) { g_ibuf_152[li_4] = g_ibuf_144[li_4 + 1]; g_ibuf_144[li_4] = GetExtreme(1, gda_164, li_4); g_count_184 = 0; gi_204 = TRUE; gi_200 = FALSE; gi_212 = TRUE; gi_216 = TRUE; gi_220 = TRUE; li_16 = FALSE; } else { g_ibuf_144[li_4] = g_ibuf_144[li_4 + 1]; li_16 = TRUE; } if (Close[li_4] > Average(gda_164, highSensitivity, li_4) && gi_204 == TRUE) { g_ibuf_152[li_4] = g_ibuf_148[li_4 + 1]; g_ibuf_148[li_4] = GetExtreme(-1, gda_168, li_4); g_count_188 = 0; gi_200 = TRUE; gi_204 = FALSE; gi_208 = TRUE; gi_216 = TRUE; gi_220 = TRUE; li_20 = FALSE; } else { g_ibuf_148[li_4] = g_ibuf_148[li_4 + 1]; li_20 = TRUE; } if (li_16 == TRUE && li_20 == TRUE) { g_ibuf_152[li_4] = g_ibuf_152[li_4 + 1]; li_16 = FALSE; li_20 = FALSE; } g_datetime_176 = iTime(NULL, 0, li_4); if (g_datetime_176 != g_datetime_180) { g_count_184++; g_count_188++; g_datetime_180 = g_datetime_176; if (li_4 == 1) { for (int li_32 = 0; li_32 < ObjectsTotal(); li_32++) if (ObjectGet(ObjectName(li_32), OBJPROP_TIME1) < Time[BarsBack - 50]) ObjectDelete(ObjectName(li_32)); } if (li_4 > 0) { g_datetime_284 = iTime(NULL, 0, li_4); if (gda_168[li_4] < g_ibuf_148[li_4]) gi_224 = TRUE; if (gda_168[li_4] > g_ibuf_144[li_4] && gi_228 == TRUE) { ObjectCreate("B" + gi_292, OBJ_TEXT, 0, Time[li_4], Low[li_4] - (High[li_4] - Low[li_4])); ObjectSetText("B" + gi_292, "B", FontSize, "Verdana", LawnGreen); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Long Breakout for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Long Breakout", "New signal: Long Breakout for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_228 = FALSE; gi_224 = FALSE; gi_232 = FALSE; gi_236 = TRUE; gi_240 = TRUE; gi_244 = TRUE; gi_248 = TRUE; gi_252 = TRUE; gi_256 = FALSE; gi_260 = TRUE; gi_216 = TRUE; gi_220 = TRUE; g_count_280 = 0; } if (g_ibuf_148[li_4 + 1] > gda_168[li_4 + 1] && g_ibuf_148[li_4] < gda_168[li_4] && gi_248 == TRUE && g_ibuf_148[li_4 + 1] != g_ibuf_148[li_4]) { ObjectCreate("E" + gi_292, OBJ_TEXT, 0, Time[li_4], Low[li_4] - (High[li_4] - Low[li_4])); ObjectSetText("E" + gi_292, "E", FontSize, "Verdana", LawnGreen); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Long Exhaustion for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Long Exhaustion", "New signal: Long Exhaustion for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_248 = FALSE; gi_224 = FALSE; gi_232 = FALSE; gi_228 = TRUE; gi_236 = TRUE; gi_240 = TRUE; gi_244 = TRUE; gi_252 = TRUE; gi_256 = FALSE; gi_260 = TRUE; gi_216 = TRUE; gi_220 = TRUE; g_count_280 = 0; } if (gda_168[li_4] >= g_ibuf_148[li_4] && gi_240 == TRUE && gi_224 == TRUE) { ObjectCreate("F" + gi_292, OBJ_TEXT, 0, Time[li_4], Low[li_4] - (High[li_4] - Low[li_4])); ObjectSetText("F" + gi_292, "F", FontSize, "Verdana", LawnGreen); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Long failure for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Long Failure", "New signal: Long Failure for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_240 = FALSE; gi_232 = FALSE; gi_244 = TRUE; gi_228 = TRUE; gi_236 = TRUE; gi_248 = TRUE; gi_252 = TRUE; gi_256 = FALSE; gi_260 = TRUE; gi_216 = TRUE; gi_220 = TRUE; g_count_280 = 0; } if (gda_164[li_4] > g_ibuf_144[li_4]) gi_232 = TRUE; if (gda_164[li_4] < g_ibuf_148[li_4] && gi_236 == TRUE) { ObjectCreate("B" + gi_292, OBJ_TEXT, 0, Time[li_4], High[li_4] + (High[li_4] - Low[li_4])); ObjectSetText("B" + gi_292, "B", FontSize, "Verdana", Red); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Short Breakdown for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Short Breakdown", "New signal: Short Breakdown for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_236 = FALSE; gi_224 = FALSE; gi_232 = FALSE; gi_228 = TRUE; gi_240 = TRUE; gi_244 = TRUE; gi_248 = TRUE; gi_252 = TRUE; gi_256 = TRUE; gi_260 = FALSE; gi_216 = TRUE; gi_220 = TRUE; g_count_276 = 0; } if (g_ibuf_144[li_4 + 1] < gda_164[li_4 + 1] && g_ibuf_144[li_4] > gda_164[li_4] && gi_252 == TRUE && g_ibuf_144[li_4 + 1] != g_ibuf_144[li_4]) { ObjectCreate("E" + gi_292, OBJ_TEXT, 0, Time[li_4], High[li_4] + (High[li_4] - Low[li_4])); ObjectSetText("E" + gi_292, "E", FontSize, "Verdana", Red); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Short Exhaustion for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Short Exhaustion", "New signal: Short Exhaustion for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_252 = FALSE; gi_224 = FALSE; gi_232 = FALSE; gi_236 = TRUE; gi_228 = TRUE; gi_240 = TRUE; gi_244 = TRUE; gi_248 = TRUE; gi_256 = TRUE; gi_260 = FALSE; g_count_276 = 0; gi_216 = TRUE; gi_220 = TRUE; } if (gda_164[li_4] <= g_ibuf_144[li_4] && gi_244 == TRUE && gi_232 == TRUE) { ObjectCreate("F" + gi_292, OBJ_TEXT, 0, Time[li_4], High[li_4] + (High[li_4] - Low[li_4])); ObjectSetText("F" + gi_292, "F", FontSize, "Verdana", Red); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Short Failure for " + Symbol() + " TF " + Period()); if (AlertEmail == TRUE) SendMail("Short Failure", "New signal: Short Failure for " + Symbol() + " Timeframe: " + Period()); if (AlertSound == TRUE) PlaySound("alert.wav"); g_datetime_288 = g_datetime_284; } gi_244 = FALSE; gi_224 = FALSE; gi_228 = TRUE; gi_236 = TRUE; gi_240 = TRUE; gi_248 = TRUE; gi_252 = TRUE; gi_256 = TRUE; gi_260 = FALSE; g_count_276 = 0; gi_216 = TRUE; gi_220 = TRUE; } if (gda_168[li_4] > g_ibuf_148[li_4] && gda_164[li_4] < g_ibuf_144[li_4]) { if (pivotSignals == TRUE) { if (g_ibuf_148[li_4] > g_ibuf_148[li_4 + 1] && gi_208 == TRUE) { gi_208 = FALSE; ObjectCreate("2P" + gi_292, OBJ_TEXT, 0, Time[li_4], Low[li_4] - (High[li_4] - Low[li_4])); ObjectSetText("2P" + gi_292, "2P", FontSize, "Verdana", LawnGreen); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Reversal Warning for " + Symbol() + " TF " + Period()); g_datetime_288 = g_datetime_284; } } if (g_ibuf_144[li_4] < g_ibuf_144[li_4 + 1] && gi_212 == TRUE) { gi_212 = FALSE; ObjectCreate("2P" + gi_292, OBJ_TEXT, 0, Time[li_4], High[li_4] + (High[li_4] - Low[li_4])); ObjectSetText("2P" + gi_292, "2P", FontSize, "Verdana", Red); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Reversal Warning for " + Symbol() + " TF " + Period()); g_datetime_288 = g_datetime_284; } } } if (gi_260 == TRUE && gi_220 == TRUE) { for (int l_count_36 = 0; l_count_36 <= pivotLength - 1; l_count_36++) { if (gda_164[li_4] < g_ibuf_152[l_count_36 + li_4] && gda_164[li_4 + 1] > g_ibuf_152[l_count_36 + li_4]) { if (gda_164[li_4] < g_ibuf_152[l_count_36 + li_4] && gda_164[li_4 + 1] > g_ibuf_152[l_count_36 + li_4]) { gi_272 = FALSE; for (int l_count_40 = 0; l_count_40 <= g_count_280; l_count_40++) { if (gda_164[li_4 + l_count_40] > g_ibuf_152[li_4 + l_count_36]) { gi_272 = TRUE; gi_220 = FALSE; } } if (gi_272 == TRUE) { ObjectCreate("2R" + gi_292, OBJ_TEXT, 0, Time[li_4], High[li_4] + (High[li_4] - Low[li_4])); ObjectSetText("2R" + gi_292, "2R", FontSize, "Verdana", Red); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Reversal Warning for " + Symbol() + " TF " + Period()); g_datetime_288 = g_datetime_284; } } } } } } if (gi_256 == TRUE && gi_216 == TRUE) { for (int l_count_44 = 0; l_count_44 <= pivotLength - 1; l_count_44++) { if (gda_168[li_4] > g_ibuf_152[l_count_44 + li_4] && gda_168[li_4 + 1] < g_ibuf_152[l_count_44 + li_4]) { gi_268 = FALSE; for (l_count_40 = 0; l_count_40 <= g_count_276; l_count_40++) { if (gda_168[li_4 + l_count_40] < g_ibuf_152[l_count_44 + li_4]) { gi_268 = TRUE; gi_216 = FALSE; } } if (gi_268 == TRUE) { ObjectCreate("2R" + gi_292, OBJ_TEXT, 0, Time[li_4], Low[li_4] - (High[li_4] - Low[li_4])); ObjectSetText("2R" + gi_292, "2R", FontSize, "Verdana", LawnGreen); gi_292++; if (li_4 == 1 && g_datetime_284 != g_datetime_288) { Alert("Reversal Warning for " + Symbol() + " TF " + Period()); g_datetime_288 = g_datetime_284; } } } } } } } g_datetime_288 = g_datetime_284; } g_count_280++; g_count_276++; li_4--; } if (TradersPivotsOn == TRUE) { ld_48 = g_ibuf_144[1]; ld_56 = g_ibuf_148[1]; gda_296[1] = 0; gda_296[2] = 0; gda_296[3] = 0; gda_300[1] = 0; gda_300[2] = 0; gda_300[3] = 0; for (int li_64 = 2; li_64 < LookbackPeriod; li_64++) { if (ld_48 != g_ibuf_144[li_64] || ld_56 != g_ibuf_148[li_64]) { if (ld_48 != g_ibuf_144[li_64]) { if (g_ibuf_144[li_64] > g_ibuf_144[1]) { if (gda_296[1] == 0.0) gda_296[1] = g_ibuf_144[li_64]; else { if (gda_296[2] == 0.0) gda_296[2] = g_ibuf_144[li_64]; else if (gda_296[3] == 0.0) gda_296[3] = g_ibuf_144[li_64]; } ld_48 = g_ibuf_144[li_64]; } else { if (g_ibuf_144[li_64] < g_ibuf_148[1]) { if (gda_300[1] == 0.0) gda_300[1] = g_ibuf_144[li_64]; else { if (gda_300[2] == 0.0) gda_300[2] = g_ibuf_144[li_64]; else if (gda_300[3] == 0.0) gda_300[3] = g_ibuf_144[li_64]; } ld_48 = g_ibuf_144[li_64]; } } } if (ld_56 != g_ibuf_148[li_64]) { if (g_ibuf_148[li_64] < g_ibuf_148[1]) { if (gda_300[1] == 0.0) gda_300[1] = g_ibuf_148[li_64]; else { if (gda_300[2] == 0.0) gda_300[2] = g_ibuf_148[li_64]; else if (gda_300[3] == 0.0) gda_300[3] = g_ibuf_148[li_64]; } ld_56 = g_ibuf_148[li_64]; } else { if (g_ibuf_148[li_64] > g_ibuf_144[1]) { if (gda_296[1] == 0.0) gda_296[1] = g_ibuf_148[li_64]; else { if (gda_296[2] == 0.0) gda_296[2] = g_ibuf_148[li_64]; else if (gda_296[3] == 0.0) gda_296[3] = g_ibuf_148[li_64]; } ld_56 = g_ibuf_148[li_64]; } } } } if (gda_296[3] != 0.0 && gda_300[3] != 0.0) li_64 = LookbackPeriod + 1; } for (li_64 = 1; li_64 <= 3; li_64++) { if (ObjectFind("TraderPivotUpper" + li_64) != 0) { ObjectCreate("TraderPivotUpper" + li_64, OBJ_HLINE, 0, 0, gda_296[li_64]); ObjectSet("TraderPivotUpper" + li_64, OBJPROP_COLOR, TradersPivotsColor); ObjectSet("TraderPivotUpper" + li_64, OBJPROP_STYLE, TradersPivotsStyle); } ObjectSet("TraderPivotUpper" + li_64, OBJPROP_PRICE1, gda_296[li_64]); if (ObjectFind("TraderPivotLower" + li_64) != 0) ObjectCreate("TraderPivotLower" + li_64, OBJ_HLINE, 0, 0, gda_300[li_64]); ObjectCreate("TraderPivotLower" + li_64, OBJ_HLINE, 0, 0, gda_300[li_64]); ObjectSet("TraderPivotLower" + li_64, OBJPROP_COLOR, TradersPivotsColor); ObjectSet("TraderPivotLower" + li_64, OBJPROP_STYLE, TradersPivotsStyle); ObjectSet("TraderPivotLower" + li_64, OBJPROP_PRICE1, gda_300[li_64]); } } return (0); } double Average(double ada_0[300], int ai_4, int ai_8) { double ld_12 = 0; for (int l_count_20 = 0; l_count_20 < ai_4; l_count_20++) ld_12 += ada_0[ai_8 + l_count_20]; return (ld_12 / ai_4); } double GetExtreme(int ai_0, double ada_4[300], int ai_8) { double ld_ret_12 = 0; if (ai_0 == 1) { for (int li_20 = ai_8; li_20 <= g_count_188 + 1 + ai_8; li_20++) { if (li_20 == ai_8) ld_ret_12 = ada_4[li_20]; else ld_ret_12 = MathMax(ld_ret_12, ada_4[li_20]); } } else { if (ai_0 == -1) { for (li_20 = ai_8; li_20 <= g_count_184 + 1 + ai_8; li_20++) { if (li_20 == ai_8) ld_ret_12 = ada_4[li_20]; else ld_ret_12 = MathMin(ld_ret_12, ada_4[li_20]); } } } return (ld_ret_12); }