#property copyright "PROSPEC_VZR_Ver1.3.mq4" #property link "http://www.365ea.com/" #include bool gi_76 = FALSE; bool gi_80; int gi_84 = 0; string gs_88 = "Hiroaki Hamaguchi"; string gs_96 = "hiroaki hamaguchi"; string gs_104 = "Hamaguchi Hiroaki"; string gs_112 = "hamaguchi hiroaki"; string gs_120 = ""; string gs_128 = ""; string gs_136 = ""; int gi_144 = 0; extern int MagicNumber = 1111; extern bool HedgeMode = FALSE; extern double MM = 5.0; extern double Lots = 0.1; extern int SL = 80; extern int TP = 70; extern int StartTime = 0; extern int EndTime = 2; extern int CloseStartTime = 2; extern int CloseEndTime = 3; extern double CloseProfitPips = 18.0; extern bool ExtraClose = FALSE; extern int ExtraCloseTime = 5; extern int Slippage = 3; extern int MaxSpread = 5; extern bool UseBreakEven = TRUE; extern int BEStep = 19; extern int BEPoint = 8; extern bool UseTrailingStop = FALSE; extern int TStep = 0; extern bool OnceADay = FALSE; extern bool MondayMode = FALSE; extern bool FridayMode = TRUE; extern bool SingleMode = TRUE; extern int OP1 = 100; extern int OP2 = 24; extern int OP3 = -5; extern int OP4 = 40; extern int OP5 = 5; extern string EAComment = "PROSPEC_VZR_Ver1.0"; bool gi_284 = TRUE; bool gi_288 = TRUE; double g_minlot_292 = 0.0; double g_maxlot_300 = 0.0; int g_leverage_308 = 0; int g_lotsize_312 = 0; int g_stoplevel_316 = 0; int gi_320 = 0; int gi_324 = 0; int gi_328 = 20; int gi_332 = 5; void init() { string ls_unused_0; string ls_unused_8; bool li_16 = FALSE; if (IsTradeAllowed()) ls_unused_0 = "Enabled"; else ls_unused_0 = "Disabled"; if (IsDemo()) ls_unused_8 = "Demo account"; else ls_unused_8 = "Live account"; if (IsDemo()) gi_80 = TRUE; else gi_80 = FALSE; if (gi_84 == 0) { if (AccountName() == gs_88) li_16 = TRUE; if (AccountName() == gs_96) li_16 = TRUE; if (AccountName() == gs_104) li_16 = TRUE; if (AccountName() == gs_112) li_16 = TRUE; if (AccountName() == gs_120) li_16 = TRUE; if (AccountName() == gs_128) li_16 = TRUE; if (AccountName() == gs_136 && AccountNumber() == gi_144) li_16 = TRUE; if (li_16 == TRUE) gi_76 = TRUE; } if (gi_84 == 0) if (gi_76 == FALSE) Alert("AccountError ", "Error:Account is not correct"); if (gi_84 == 2) if (IsDemo() != TRUE) Alert("AccountError ", "Error:Account is Live Account"); gi_284 = TRUE; gi_288 = TRUE; if (StartTime == EndTime) { Print("* No Trade * If you want to trade 24hours, please set StartTime=0 and EndTime=24."); Alert("* No Trade * If you want to trade 24hours, please set StartTime=0 and EndTime=24."); } if (StartTime == 0 && EndTime == 24) { CloseStartTime = 911; CloseEndTime = 911; ExtraCloseTime = 911; return; } if (StartTime < 0) StartTime += 24; StartTime = MathMod(StartTime, 24); if (EndTime < 0) EndTime += 24; EndTime = MathMod(EndTime, 24); if (CloseStartTime < 0) CloseStartTime += 24; CloseStartTime = MathMod(CloseStartTime, 24); if (CloseEndTime < 0) CloseEndTime += 24; CloseEndTime = MathMod(CloseEndTime, 24); if (ExtraClose && ExtraCloseTime < 0) ExtraCloseTime += 24; ExtraCloseTime = MathMod(ExtraCloseTime, 24); } void start() { double l_ibands_16; double l_ibands_24; double ld_32; int l_count_40; int l_count_44; int li_48; string ls_unused_52; int li_60; double l_price_64; double ld_72; double ld_80; double ld_88; int l_datetime_0 = TimeCurrent(); int l_year_4 = TimeYear(l_datetime_0); int l_month_8 = TimeMonth(l_datetime_0); bool li_12 = FALSE; if (gi_84 == 0) { if (AccountName() == gs_88) li_12 = TRUE; if (AccountName() == gs_96) li_12 = TRUE; if (AccountName() == gs_104) li_12 = TRUE; if (AccountName() == gs_112) li_12 = TRUE; if (AccountName() == gs_120) li_12 = TRUE; if (AccountName() == gs_128) li_12 = TRUE; if (AccountName() == gs_136 && AccountNumber() == gi_144) li_12 = TRUE; if (li_12 == TRUE) gi_76 = TRUE; } if (gi_84 == 0) if (gi_76 == FALSE) return; if (l_year_4 >= 2100) if (l_month_8 > 1) return; if (gi_84 == 2) if (gi_80 == FALSE) return; string ls_96 = EAComment; string ls_104 = " "; string ls_112 = " "; string ls_120 = " "; string ls_128 = " "; Comment("\n " + ls_96 + " \n " + ls_104 + " \n " + ls_112 + " \n " + ls_120 + " \n " + ls_128 + " "); if (Bars >= OP5) { if (AccountBalance() > 0.0) { if (gi_284) { gi_284 = FALSE; g_minlot_292 = MarketInfo(Symbol(), MODE_MINLOT); g_maxlot_300 = MarketInfo(Symbol(), MODE_MAXLOT); g_leverage_308 = AccountLeverage(); g_lotsize_312 = MarketInfo(Symbol(), MODE_LOTSIZE); g_stoplevel_316 = MarketInfo(Symbol(), MODE_STOPLEVEL); } if (TP > 0 && TP < g_stoplevel_316) TP = g_stoplevel_316; if (SL > 0 && SL < g_stoplevel_316) SL = g_stoplevel_316; HideTestIndicators(TRUE); l_ibands_16 = iBands(NULL, PERIOD_M15, OP5, 2, 0, PRICE_CLOSE, MODE_LOWER, 1); l_ibands_24 = iBands(NULL, PERIOD_M15, OP5, 2, 0, PRICE_CLOSE, MODE_UPPER, 1); HideTestIndicators(FALSE); ld_32 = l_ibands_24 - l_ibands_16; l_count_40 = 0; l_count_44 = 0; for (int l_pos_136 = OrdersTotal() - 1; l_pos_136 >= 0; l_pos_136--) { if (!OrderSelect(l_pos_136, SELECT_BY_POS, MODE_TRADES)) Print("Error in OrderSelect! Position:" + l_pos_136); else { if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { TrailingPositions(0); if ((IsExtraCloseTime() && Time[0] - OrderOpenTime() > 900) || (IsCloseTime() && Bid - OrderOpenPrice() > CloseProfitPips * Point) || Bid >= l_ibands_24 + OP4 * Point) OrdClose(OrderTicket(), OrderLots(), Bid, Slippage, Violet); else l_count_40++; } else { TrailingPositions(1); if ((IsExtraCloseTime() && Time[0] - OrderOpenTime() > 900) || (IsCloseTime() && OrderOpenPrice() - Ask > CloseProfitPips * Point) || Bid <= l_ibands_16 - OP4 * Point) OrdClose(OrderTicket(), OrderLots(), Ask, Slippage, Violet); else l_count_44++; } } } } if (MathAbs(iClose(NULL, PERIOD_D1, 1) - iOpen(NULL, PERIOD_D1, 0)) <= OP1 * Point) { li_48 = -1; if (!IsTradeTime()) gi_288 = TRUE; if (IsTradeTime() && IsTradeAvailable() && (SingleMode && l_count_40 + l_count_44 < 1) || (!SingleMode && l_count_40 < 1) && Bid < l_ibands_16 - OP3 * Point && ld_32 >= OP2 * Point) { ls_unused_52 = "BUY"; li_48 = 0; li_60 = 16776960; l_price_64 = Ask; if (SL == 0) ld_72 = 0; else ld_72 = Bid - SL * Point; if (TP == 0) ld_80 = 0; else ld_80 = Ask + TP * Point; } if (IsTradeTime() && IsTradeAvailable() && (SingleMode && l_count_40 + l_count_44 < 1) || (!SingleMode && l_count_44 < 1) && Bid > l_ibands_24 + OP3 * Point && ld_32 >= OP2 * Point) { ls_unused_52 = "SELL"; li_48 = 1; li_60 = 255; l_price_64 = Bid; if (SL == 0) ld_72 = 0; else ld_72 = Ask + SL * Point; if (TP == 0) ld_80 = 0; else ld_80 = Bid - TP * Point; } ld_88 = Lots; if (MM > 0.0) { if (HedgeMode == TRUE) ld_88 = NormalizeDouble(MM * AccountBalance() / g_lotsize_312 / g_minlot_292, 0) * g_minlot_292; else ld_88 = NormalizeDouble(MM * AccountFreeMargin() / g_lotsize_312 / g_minlot_292, 0) * g_minlot_292; } ld_88 = MathMax(g_minlot_292, MathMin(g_maxlot_300, NormalizeDouble(ld_88 / g_minlot_292, 0) * g_minlot_292)); if (li_48 >= 0) OrdSend(Symbol(), li_48, ld_88, l_price_64, Slippage, ld_72, ld_80, EAComment, MagicNumber, 0, li_60); } } } } bool IsTradeTime() { if ((DayOfWeek() >= 2 && DayOfWeek() <= 4) || (!MondayMode && DayOfWeek() == 0) || (!MondayMode && DayOfWeek() == 1) || (!FridayMode && DayOfWeek() == 5) || (!FridayMode && DayOfWeek() == 6)) { if (StartTime <= EndTime && Hour() >= StartTime && Hour() < EndTime) return (TRUE); if (StartTime > EndTime && Hour() >= StartTime || Hour() < EndTime) return (TRUE); } if (MondayMode && DayOfWeek() == 1) { if (StartTime <= EndTime && (Hour() >= StartTime && Hour() < EndTime) && Hour() >= 12) return (TRUE); if (StartTime > EndTime && Hour() >= StartTime || Hour() < EndTime && Hour() >= 12) return (TRUE); } if (FridayMode && DayOfWeek() == 5) { if (StartTime <= EndTime && (Hour() >= StartTime && Hour() < EndTime) && Hour() < 12) return (TRUE); if (StartTime > EndTime && Hour() >= StartTime || Hour() < EndTime && Hour() < 12) return (TRUE); } return (FALSE); } int IsCloseTime() { if (CloseStartTime <= CloseEndTime && Hour() >= CloseStartTime && Hour() < CloseEndTime) return (1); if (CloseStartTime > CloseEndTime && Hour() >= CloseStartTime || Hour() < CloseEndTime) return (1); return (0); } int IsExtraCloseTime() { if (ExtraClose && Hour() == ExtraCloseTime && Minute() == gi_320 && Seconds() == gi_324) return (1); return (0); } int IsTradeAvailable() { if (Ask - Bid > MaxSpread * Point) return (0); if (OnceADay && !gi_288) return (0); return (1); } void TrailingPositions(int ai_0) { if (BEStep > 0 && BEStep < g_stoplevel_316) BEStep = g_stoplevel_316; if (BEStep - BEPoint < g_stoplevel_316) BEPoint = BEStep - g_stoplevel_316; if (TStep > 0 && TStep < g_stoplevel_316) TStep = g_stoplevel_316; if (ai_0 == 0) { if (UseBreakEven && BEStep > 0) { if (Bid - OrderOpenPrice() > BEStep * Point) if (OrderStopLoss() < OrderOpenPrice() + BEPoint * Point) OrdModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + BEPoint * Point, OrderTakeProfit(), 0, Orange); } if (UseTrailingStop && TStep > 0) { if (Bid - OrderOpenPrice() > MathMax(TStep * Point, BEStep * Point)) if (OrderStopLoss() < Bid - TStep * Point) OrdModify(OrderTicket(), OrderOpenPrice(), Bid - TStep * Point, OrderTakeProfit(), 0, Orange); } } if (ai_0 == 1) { if (UseBreakEven && BEStep > 0) { if (OrderOpenPrice() - Ask > BEStep * Point) if (OrderStopLoss() > OrderOpenPrice() - BEPoint * Point || OrderStopLoss() == 0.0) OrdModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - BEPoint * Point, OrderTakeProfit(), 0, DeepSkyBlue); } if (UseTrailingStop && TStep > 0) { if (OrderOpenPrice() - Ask > MathMax(TStep * Point, BEStep * Point)) if (OrderStopLoss() > Ask + TStep * Point || OrderStopLoss() == 0.0) OrdModify(OrderTicket(), OrderOpenPrice(), Ask + TStep * Point, OrderTakeProfit(), 0, DeepSkyBlue); } } if (UseTrailingStop && TStep == 0 && UseBreakEven && BEPoint == 0) return; } int OrdSend(string a_symbol_0, int ai_8, double a_lots_12, double ad_20, int a_slippage_28, double ad_32, double ad_40, string a_comment_48 = "", int a_magic_56 = 0, int a_datetime_60 = 0, color a_color_64 = -1) { int l_ticket_68; int l_ticket_72; int l_count_76 = 0; switch (ai_8) { case 0: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_76 < gi_328) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_BUY, a_lots_12, ND(ad_20), a_slippage_28, ND(ad_32), ND(ad_40), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 < 0) { Print("Error : " + GetLastError() + " " + ErrorDescription(GetLastError())); Print(Symbol() + " Buy @ " + ad_20 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_76++; } else { l_count_76 = gi_328; Print("Order opened : " + Symbol() + " Buy @ " + ad_20 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_332); } } l_ticket_72 = l_ticket_68; break; case 1: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_76 < gi_328) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_SELL, a_lots_12, ND(ad_20), a_slippage_28, ND(ad_32), ND(ad_40), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 < 0) { Print("Error : " + GetLastError() + " " + ErrorDescription(GetLastError())); Print(Symbol() + " Sell @ " + ad_20 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_76++; } else { l_count_76 = gi_328; Print("Order opened : " + Symbol() + " Sell @ " + ad_20 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_332); } } l_ticket_72 = l_ticket_68; break; default: Print("No valid type of order found"); l_ticket_72 = -1; } return (l_ticket_72); } void OrdClose(int a_ticket_0, double a_lots_4, double ad_12, int a_slippage_20, color a_color_24 = -1) { int l_ord_close_28; int l_count_36 = 0; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_36 < gi_328) { RefreshRates(); l_ord_close_28 = OrderClose(a_ticket_0, a_lots_4, ND(ad_12), a_slippage_20, a_color_24); if (l_ord_close_28 == 0 && GetLastError() > 1/* NO_RESULT */) { Print("Error : " + GetLastError() + " " + ErrorDescription(GetLastError())); Print(Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); l_count_36++; } else { l_count_36 = gi_328; Print("Order closed : " + Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); } Sleep(1000 * gi_332); } } int l_error_32 = GetLastError(); } void OrdModify(int a_ticket_0, double ad_4, double ad_12, double ad_20, int a_datetime_28, color a_color_32 = -1) { bool l_bool_36; int l_count_44 = 0; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_44 < gi_328) { RefreshRates(); l_bool_36 = OrderModify(a_ticket_0, ND(ad_4), ND(ad_12), ND(ad_20), a_datetime_28, a_color_32); if (l_bool_36 == FALSE && GetLastError() > 1/* NO_RESULT */) { Print("Error : " + ErrorDescription(GetLastError())); Print(Symbol() + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); l_count_44++; } else { l_count_44 = gi_328; Print("Order modified : " + Symbol() + " Ask @ " + Ask + " Bid @ " + Bid + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); } Sleep(1000 * gi_332); } } int l_error_40 = GetLastError(); } double ND(double ad_0) { double ld_8; ld_8 = NormalizeDouble(ad_0, Digits); return (ld_8); }