//+------------------------------------------------------------------+ //| Generic A-TLP v.9.02.mq4 | //| Trade Like A Pro | //| http://tradelikeapro.ru | //| open source | //+------------------------------------------------------------------+ // author of the idea // Sergey5 bashni2001@mail.ru // Senior Programmer // yur4ello // Huge gratitude to for the help in realization of the idea // nixxer // grabli // LeoK #property copyright "Trade Like A Pro" #property link "http://tradelikeapro.ru" #property version "9.02" #property strict #define _TRADE_ 1 #define _PAUSE_ 2 enum _EventYesNo{ YES = 1, //ДА NO = 2 //НЕТ }; enum _EventFilter{ ON = 1, OFF = 2 }; input int MagicNumber = 11052016; input string Comm = "Generic A-TLP v9.0"; //Комментарий input double Max_Spread = 3; input int Slipage = 1; extern double Stop_Loss = 38; extern double Take_Profit = 35; input bool use_dyn_TP = false; //использовать динамический TP input int TP_perc = 80; //%% TP от размера канала input int min_TP = 10; input bool use_BE = false; //использовать перевод в безубыток input double X = 7; //Если текущая цена лучше цены входа на Х пунктов input double Y = 1; //перемещаем СЛ на Y пунктов в профит input int Channel_Period = 13; input int Entry_Break = 1; input int Exit_Distance = -13; input int MaxDailyRange = 1000; input double Lots = 0.1; input double Auto_Risk = 0.0; input int Min_Volatility = 20; input int Exit_Profit_Pips = -12; int ma_period = 2; input int Reverse_Profit = 20; input int Exit_Minutes = 140; input int Time_Profit_Pips = 0; input _EventFilter Filter_1 = 1; //Фильтр №1 (на выход из сделки) input _EventFilter Filter_2 = 1; //Фильтр №2 (на выход из сделки) input _EventFilter Filter_3 = 1; //Фильтр №3 (на выход из сделки) input color Col_info = C'176,162,168'; //Цвет инфо панели double maxlot = 0.01; double lotstep = 0.01; double old_point = 0.0001; double minlot = 0.0; int lotsize = 0; int stoplevel = 0; double lots = 0; int count_sell; int count_buy; datetime day_of_trade; string tr_hr = ""; string tp_info = ""; string be_info = ""; int slippage; datetime need_to_verify_market_info; //--- параметры для записи данных в файл string InpFileName; // Имя файла string fileName = "EA_Generic"; // Имя файла string InpDirectoryName = "LOGS"; // Имя каталога //--- input string S1 = " DayOfWeek Filter"; input _EventYesNo monday = 1; //торгуем в ПОНЕДЕЛЬНИК? input string monday_open = "00:00"; input string monday_pause_start = "01:00"; input string monday_pause_stop = "22:00"; input string monday_close = "23:59"; input _EventYesNo tuesday = 1; //торгуем во ВТОРНИК? input string tuesday_open = "00:00"; input string tuesday_pause_start = "01:00"; input string tuesday_pause_stop = "22:00"; input string tuesday_close = "23:59"; input _EventYesNo wednesday = 1; //торгуем в СРЕДУ? input string wednesday_open = "00:00"; input string wednesday_pause_start = "01:00"; input string wednesday_pause_stop = "22:00"; input string wednesday_close = "23:59"; input _EventYesNo thursday = 1; //торгуем в ЧЕТВЕРГ? input string thursday_open = "00:00"; input string thursday_pause_start = "01:00"; input string thursday_pause_stop = "22:00"; input string thursday_close = "23:59"; input _EventYesNo friday = 1; //торгуем в ПЯТНИЦУ? input string friday_open = "00:00"; input string friday_pause_start = "01:00"; input string friday_pause_stop = "22:00"; input string friday_close = "23:59"; input _EventYesNo sunday = 2; //торгуем в ВОСКРЕСЕНЬЕ? input string sunday_open = "08:30"; input string sunday_pause_start = "15:30"; input string sunday_pause_stop = "17:55"; input string sunday_close = "21:35"; input string S2 = " Roll Over Filter"; input _EventYesNo use_rollover_filter = 1; //закрывать сделки в ролловер input string rollover_start = "23:55"; //время начала ролловера input string rollover_end = "00:35"; //время окончания ролловера int flag_trade; datetime time1, time2, time3, time4; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { need_to_verify_market_info = iTime(NULL,PERIOD_W1,1); day_of_trade = iTime(NULL,PERIOD_D1,1); //trade_flag = false; fRectLabelCreate(0,"info_panel",0,0,28,160,300,Col_info); string s = ""; switch(Period()){ case PERIOD_M1: s = "M1"; break; case PERIOD_M5: s = "M5"; break; case PERIOD_M15: s = "M15"; break; case PERIOD_M30: s = "M30"; break; case PERIOD_H1: s = "H1"; break; case PERIOD_H4: s = "H4"; break; case PERIOD_D1: s = "D1"; break; case PERIOD_W1: s = "W1"; break; case PERIOD_MN1: s = "MN1"; break; } InpFileName = fileName + "_" + Symbol() + "_" + s + ".txt"; slippage = (int)NormalizeDouble(Slipage / Point * old_point,0); Comment(""); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); fRectLabelDelete(0,"info_panel"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(day_of_trade != iTime(NULL,PERIOD_D1,0)){ tr_hr = fInfoTradeHours(); fChoiceOfDay(); day_of_trade = iTime(NULL,PERIOD_D1,0); } long tick_volume = iVolume(NULL, PERIOD_M1, 0); if (DayOfWeek() == 1 && iVolume(NULL, PERIOD_D1, 0) < 5) return; double channel_upper; double channel_lower; double channel_upper_M1; double channel_lower_M1; double ma_shift_1; double ma_shift_2; double channel_width; double channel_width_M1; double stoploss; double takeprofit; string info_panel = ""; if(need_to_verify_market_info != iTime(NULL,PERIOD_W1,0)){ need_to_verify_market_info = iTime(NULL,PERIOD_W1,0); stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL); minlot = MarketInfo(Symbol(), MODE_MINLOT); maxlot = MarketInfo(Symbol(), MODE_MAXLOT); lotsize = (int)MarketInfo(Symbol(), MODE_LOTSIZE); lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); if (Digits <= 3) old_point = 0.01; else old_point = 0.0001; } if(!IsTesting() && IsDllsAllowed() == FALSE) { Comment("Warning: Set Parameter **AllowDLL Imports** ON in menu Tools -> Options -> ExpertAdvisors."); Print("Warning: Set Parameter **AllowDLL Imports** ON in menu Tools -> Options -> ExpertAdvisors."); Sleep(30000); return; } if(Auto_Risk > 0.0) lots = MathMax(minlot, MathMin(maxlot, MathCeil(MathMin(100, Auto_Risk) / 100.0 * AccountFreeMargin() / lotstep / (lotsize / 100)) * lotstep)); else lots = Lots; if(!IsTesting() && !IsOptimization()){ if(day_of_trade != iTime(NULL,PERIOD_D1,0)){ tr_hr = fInfoTradeHours(); if(use_dyn_TP) tp_info = "\n Dynamic Take Profit - " + IntegerToString(TP_perc) + "%"; else tp_info = "\n Dynamic Take Profit - NO"; if(use_BE) be_info = "\n Break Event - YES"; else be_info = "\n Break Event - NO"; day_of_trade = iTime(NULL,PERIOD_D1,0); } info_panel = info_panel + "\n -----------------------------------------------" + "\n GENERIC A-TLP" + "\n -----------------------------------------------" + "\n A FREE PRODUCT POWERED" + "\n BY" + "\n http://TRADELIKEAPRO.ru" + "\n -----------------------------------------------" + "\n USE ON M15 CHART" + "\n -----------------------------------------------" + tr_hr + "\n -----------------------------------------------" + tp_info + "\n Take Profit = " + DoubleToStr(Take_Profit,1) + " pips" + "\n Stop Loss = " + DoubleToStr(Stop_Loss,1) + " pips" + be_info + "\n -----------------------------------------------" + "\n Max Spread = " + DoubleToStr(Max_Spread,1) + " pips" + "\n Spread = " + DoubleToStr((Ask - Bid) / old_point, 1) + " pips"; if(Ask - Bid > Max_Spread * old_point) info_panel = info_panel + " - HIGH !!!"; else info_panel = info_panel + " - NORMAL"; if(Auto_Risk > 0.0){ info_panel = info_panel + "\n AutoRisk - Activated" + "\n Risk = " + DoubleToStr(Auto_Risk, 1) + "%"; } info_panel = info_panel + "\n Trading Lots = " + DoubleToStr(lots, 2); info_panel = info_panel + "\n -----------------------------------------------"; Comment(info_panel); } if(IsTradeAllowed()){ if(IsTradeContextBusy() == FALSE){ HideTestIndicators(TRUE); channel_upper = iMA(NULL, PERIOD_M15, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1) + 2.0 * iStdDev(NULL, PERIOD_M15, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1); channel_lower = iMA(NULL, PERIOD_M15, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1) - 2.0 * iStdDev(NULL, PERIOD_M15, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1); ma_shift_1 = iMA(NULL, PERIOD_M1, ma_period, 0, MODE_SMA, PRICE_CLOSE, 1); ma_shift_2 = iMA(NULL, PERIOD_M1, ma_period, 0, MODE_SMA, PRICE_CLOSE, 2); channel_upper_M1 = iMA(NULL, PERIOD_M1, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1) + 2.0 * iStdDev(NULL, PERIOD_M1, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1); channel_lower_M1 = iMA(NULL, PERIOD_M1, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1) - 2.0 * iStdDev(NULL, PERIOD_M1, Channel_Period, 0, MODE_SMA, PRICE_CLOSE, 1); HideTestIndicators(FALSE); channel_width = channel_upper - channel_lower; channel_width_M1 = channel_upper_M1 - channel_lower_M1; if(use_dyn_TP){ Take_Profit = MathMax(NormalizeDouble(channel_width/old_point /100 * TP_perc,1), min_TP); } Take_Profit = MathMax(Take_Profit,NormalizeDouble(stoplevel * Point / old_point,1)); Stop_Loss = MathMax(Stop_Loss,NormalizeDouble(stoplevel * Point / old_point,1)); count_buy = 0; count_sell = 0; for(int pos = OrdersTotal() - 1; pos >= 0; pos--){ if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)){ string q = __FUNCTION__ + ": не удалось выделить ордер! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } else{ if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){ RefreshRates(); if(OrderType() == OP_BUY){ count_buy++; if(OrderStopLoss() == 0.0){ stoploss = NormalizeDouble(OrderOpenPrice() - Stop_Loss * old_point, Digits); takeprofit = NormalizeDouble(OrderOpenPrice() + Take_Profit * old_point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), stoploss, takeprofit, 0, clrGreen)){ string q = __FUNCTION__ + ": не удалось модифицировать ордер #" + IntegerToString(OrderTicket()) + "! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } continue; } if(use_BE && X > Y && Bid - OrderOpenPrice() >= X * old_point && OrderStopLoss() < OrderOpenPrice()){ stoploss = NormalizeDouble(OrderOpenPrice() + Y * old_point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), stoploss, OrderTakeProfit(), 0, clrGreen)){ string q = __FUNCTION__ + ": не удалось модифицировать ордер #" + IntegerToString(OrderTicket()) + "! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } } if(fGetRollOver()) return; bool condition_for_the_exit_1 = false; bool condition_for_the_exit_2 = false; bool condition_for_the_exit_3 = false; if(tick_volume <= 1.0){ // if(Filter_1 == 1 && TimeCurrent() - OrderOpenTime() > 60 * Exit_Minutes && // ордер открыт более Exit_Minutes (2 ч 20 мин) И Bid - OrderOpenPrice() > Time_Profit_Pips * old_point){ // плавающая прибыль более Time_Profit_Pips (0) condition_for_the_exit_1 = true; string q = "BUY: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №1. Ордер открыт более " + IntegerToString(Exit_Minutes) + " минут и плавающая прибыль более " + DoubleToStr(Time_Profit_Pips,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(Filter_2 == 1 && Bid >= channel_upper + Exit_Distance * old_point && // цена вышла за верхнюю границу канала И Bid - OrderOpenPrice() > Exit_Profit_Pips * old_point){ // плавающая прибыль более Exit_Profit_Pips (-12) condition_for_the_exit_2 = true; string q = "BUY: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №2. Цена поднялась выше " + DoubleToStr(channel_upper,Digits) + "(верхняя граница канала) на " + DoubleToStr(Exit_Distance,1) + " пунктов и плавающая прибыль более " + DoubleToStr(Exit_Profit_Pips,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(Filter_3 == 1 && ma_shift_1 < ma_shift_2 && // скользящая средняя снижается И Bid - OrderOpenPrice() > Reverse_Profit * old_point){ // плавающая прибыль более Reverse_Profit (20) condition_for_the_exit_3 = true; string q = "BUY: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №3. Скользящая средняя снижается" + " и плавающая прибыль более " + DoubleToStr(Reverse_Profit,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(condition_for_the_exit_1 || condition_for_the_exit_2 || condition_for_the_exit_3){ RefreshRates(); if(!OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), slippage, clrViolet)){ string q = __FUNCTION__ + ": Ордер " + OrderSymbol() + " #" + IntegerToString(OrderTicket()) + " не был закрыт! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } else{ Sleep(1000); return; } Sleep(5000); continue; } } count_buy++; continue; } if(OrderType() == OP_SELL){ count_sell++; if (OrderStopLoss() == 0.0){ stoploss = NormalizeDouble(OrderOpenPrice() + Stop_Loss * old_point, Digits); takeprofit = NormalizeDouble(OrderOpenPrice() - Take_Profit * old_point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), stoploss, takeprofit, 0, clrGreen)){ string q = __FUNCTION__ + ": не удалось модифицировать ордер #" + IntegerToString(OrderTicket()) + "! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } continue; } if(use_BE && X > Y && OrderOpenPrice() - Ask >= X * old_point && OrderStopLoss() > OrderOpenPrice()){ stoploss = NormalizeDouble(OrderOpenPrice() - Y * old_point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), stoploss, OrderTakeProfit(), 0, clrGreen)){ string q = __FUNCTION__ + ": не удалось модифицировать ордер #" + IntegerToString(OrderTicket()) + "! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } } if(fGetRollOver()) return; bool condition_for_the_exit_1 = false; bool condition_for_the_exit_2 = false; bool condition_for_the_exit_3 = false; if(tick_volume <= 1.0){ // if(Filter_1 == 1 && TimeCurrent() - OrderOpenTime() > 60 * Exit_Minutes && // ордер открыт более Exit_Minutes (2 ч 20 мин) И OrderOpenPrice() - Ask > Time_Profit_Pips * old_point){ // плавающая прибыль более Time_Profit_Pips (0) condition_for_the_exit_1 = true; string q = "SELL: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №1. Ордер открыт более " + IntegerToString(Exit_Minutes) + " минут и плавающая прибыль более " + DoubleToStr(Time_Profit_Pips,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(Filter_2 == 1 && Bid <= channel_lower - Exit_Distance * old_point && // цена вышла за нижнюю границу канала И OrderOpenPrice() - Ask > Exit_Profit_Pips * old_point){ // плавающая прибыль более Exit_Profit_Pips (-12) condition_for_the_exit_2 = true; string q = "SELL: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №2. Цена опустилась ниже " + DoubleToStr(channel_lower,Digits) + "(нижняя граница канала) на " + DoubleToStr(Exit_Distance,1) + " пунктов и плавающая прибыль более " + DoubleToStr(Exit_Profit_Pips,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(Filter_3 == 1 && ma_shift_1 > ma_shift_2 && // скользящая средняя повышается И OrderOpenPrice() - Ask > Reverse_Profit * old_point){ // плавающая прибыль более Reverse_Profit (20) condition_for_the_exit_3 = true; string q = "SELL: ордер #" + IntegerToString(OrderTicket()) + " Фильтр на выход №3. Скользящая средняя повышается" + " и плавающая прибыль более " + DoubleToStr(Reverse_Profit,1) + " пунктов."; Print(q); fWriteDataToFile(q); } if(condition_for_the_exit_1 || condition_for_the_exit_2 || condition_for_the_exit_3){ RefreshRates(); if(!OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), slippage, clrViolet)){ string q = __FUNCTION__ + ": Ордер " + OrderSymbol() + " #" + IntegerToString(OrderTicket()) + " не был закрыт! " + fMyErDesc(); Print(q); fWriteDataToFile(q); } else{ Sleep(1000); return; } Sleep(5000); continue; } } count_sell++; continue; } } //if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) } // else if (!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) } //for (int pos = OrdersTotal() - 1; pos >= 0; pos--) if(!IsTime()) return; if(tick_volume > 1.0 || count_buy >= 1 || count_sell >= 1) return; RefreshRates(); double spread = Ask - Bid; if(spread > Max_Spread * old_point){ string q = Symbol() + ": Spread = " + DoubleToStr((spread) / old_point, 1) + " pips" + " - HIGH !!!"; Print(q); return; } if(Bid < channel_lower - Entry_Break * old_point){ string q = "Касание нижней границы канала. "; if(channel_width >= Min_Volatility * old_point){ q = q + "Ширина канала допустимая: " + DoubleToStr(channel_width/old_point,1) + " pips. "; if(iOpen(NULL,PERIOD_D1,0) - Bid < MaxDailyRange * old_point){ OpenTrade("BUY"); return; } else{ q = q + "DailyRange больше допустимого: " + DoubleToStr((iOpen(NULL,PERIOD_D1,0) - Bid)/old_point,1); } } else{ q = q + "Ширина канала меньше допустимой: " + DoubleToStr(channel_width/old_point,1) + " pips."; } Print(q); fWriteDataToFile(q); return; } if(Bid > channel_upper + Entry_Break * old_point){ string q = "Касание верхней границы канала. "; if(channel_width >= Min_Volatility * old_point){ q = q + "Ширина канала допустимая: " + DoubleToStr(channel_width/old_point,1) + " pips. "; if(Bid - iOpen(NULL,PERIOD_D1,0) < MaxDailyRange * old_point){ OpenTrade("SELL"); return; } else{ q = q + "DailyRange больше допустимого: " + DoubleToStr((Bid - iOpen(NULL,PERIOD_D1,0))/old_point,1); } } else{ q = q + "Ширина канала меньше допустимой: " + DoubleToStr(channel_width/old_point,1) + " pips."; } Print(q); fWriteDataToFile(q); return; } } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void OpenTrade(string type){ double price = 0; double range = 0; int cmd = -1; color col_type = clrNONE; if(type == "BUY"){ cmd = OP_BUY; col_type = clrAqua; range = (iOpen(NULL,PERIOD_D1,0) - Bid)/old_point; } if(type == "SELL"){ cmd = OP_SELL; col_type = clrRed; range = (Bid - iOpen(NULL,PERIOD_D1,0))/old_point; } for(int count = 0; count < 5; count++){ RefreshRates(); if(type == "BUY") price = Ask; if(type == "SELL") price = Bid; int ticket = OrderSend(Symbol(), cmd, lots, price, slippage, 0, 0, Comm, MagicNumber, 0, col_type); Sleep(3000); if(ticket > 0){ if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)){ string q = __FUNCTION__ + ": не удалось выделить ордер " + IntegerToString(ticket) + "! " + fMyErDesc(); Print(q); fWriteDataToFile(q); break; } else{ string q = __FUNCTION__ + ": ордер " + type + " открыт по цене " + DoubleToStr(OrderOpenPrice(),Digits) + "; DailyRange = (" + DoubleToStr(range,1) + ") пипс."; Print(q); fWriteDataToFile(q); break; } } else{ string q = __FUNCTION__ + ": ордер " + type + " не был открыт!: " + fMyErDesc(); Print(q); fWriteDataToFile(q); } } } //+------------------------------------------------------------------+ // возвращает ИСТИНА, если сейчас время ролловера + // иначе - ЛОЖЬ + //+------------------------------------------------------------------+ bool fGetRollOver(void){ if(use_rollover_filter == 2){ //не закрывать сделки в ролловер if(StrToTime(rollover_start) > StrToTime(rollover_end)){ if(TimeCurrent() >= StrToTime(rollover_start) || TimeCurrent() < StrToTime(rollover_end)) return(true); } else{ if(TimeCurrent() >= StrToTime(rollover_start) && TimeCurrent() < StrToTime(rollover_end)) return(true); } } return(false); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ string fInfoTradeHours(void){ switch(DayOfWeek()){ case 0: { if(sunday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(sunday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + sunday_open + "\n End Hour (Broker Time) = " + sunday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + sunday_open + "\n End First Session = " + sunday_pause_start + "\n Start Second Session = " + sunday_pause_stop + "\n End Second Session = " + sunday_close); } } break; } case 1: { if(monday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(monday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + monday_open + "\n End Hour (Broker Time) = " + monday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + monday_open + "\n End First Session = " + monday_pause_start + "\n Start Second Session = " + monday_pause_stop + "\n End Second Session = " + monday_close); } } break; } case 2: { if(tuesday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(tuesday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + tuesday_open + "\n End Hour (Broker Time) = " + tuesday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + tuesday_open + "\n End First Session = " + tuesday_pause_start + "\n Start Second Session = " + tuesday_pause_stop + "\n End Second Session = " + tuesday_close); } } break; } case 3: { if(wednesday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(wednesday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + wednesday_open + "\n End Hour (Broker Time) = " + wednesday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + wednesday_open + "\n End First Session = " + wednesday_pause_start + "\n Start Second Session = " + wednesday_pause_stop + "\n End Second Session = " + wednesday_close); } } break; } case 4: { if(thursday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(thursday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + thursday_open + "\n End Hour (Broker Time) = " + thursday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + thursday_open + "\n End First Session = " + thursday_pause_start + "\n Start Second Session = " + thursday_pause_stop + "\n End Second Session = " + thursday_close); } } break; } case 5: { if(friday == 2){ return( "\n" + "\n no trade today" + "\n" + "\n"); } else{ if(friday_pause_start == "0"){ return( "\n Start Hour (Broker Time) = " + friday_open + "\n End Hour (Broker Time) = " + friday_close + "\n" + "\n"); } else{ return( "\n Start First Session = " + friday_open + "\n End First Session = " + friday_pause_start + "\n Start Second Session = " + friday_pause_stop + "\n End Second Session = " + friday_close); } } break; } default:{ return( "\n" + "\n no trade today" + "\n" + "\n"); } } } ///////////////////////////////////////////////////////////////////////// //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool IsTime(void){ if(flag_trade == _PAUSE_){ if((TimeCurrent() >= time1 && TimeCurrent() < time2) || (TimeCurrent() >= time3 && TimeCurrent() < time4)) return(true); else return(false); } else{ if(TimeCurrent() >= time1 && TimeCurrent() < time4) return(true); else return(false); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ ///////////////////////////////////////////////////////////////////////// void fChoiceOfDay(void) { switch(DayOfWeek()) { case 0: { if(sunday == 1) fSetTimeTrade(sunday_open,sunday_pause_start,sunday_pause_stop,sunday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } case 1: { if(monday == 1) fSetTimeTrade(monday_open,monday_pause_start,monday_pause_stop,monday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } case 2: { if(tuesday == 1) fSetTimeTrade(tuesday_open,tuesday_pause_start,tuesday_pause_stop,tuesday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } case 3: { if(wednesday == 1) fSetTimeTrade(wednesday_open,wednesday_pause_start,wednesday_pause_stop,wednesday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } case 4: { if(thursday == 1) fSetTimeTrade(thursday_open,thursday_pause_start,thursday_pause_stop,thursday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } case 5: { if(friday == 1) fSetTimeTrade(friday_open,friday_pause_start,friday_pause_stop,friday_close); else{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } break; } default:{ flag_trade = _TRADE_; //time1 = StrToTime("01:20"); //time4 = StrToTime("01:10"); time1 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:20")); time4 = StrToTime(StringConcatenate(TimeToStr(TimeCurrent(),TIME_DATE)," ","01:10")); } } } //+------------------------------------------------------------------+ void fSetTimeTrade(string open,string pause_start,string pause_stop,string close) { if(pause_start == "0" || pause_start == pause_stop) { //no pause //return((TimeCurrent() >= StrToTime(open)) && (TimeCurrent() = StrToTime(open)) && (TimeCurrent() = StrToTime(pause_stop)) && (TimeCurrent()