Время для робота

 
Можно ли добавить роботу время в которое все сделки открытые на данный момент закроются?
 
Georgii Gabeev:
Можно ли добавить роботу время в которое все сделки открытые на данный момент закроются?

Можно.

 
Не подскажите какой код?
 
Georgii Gabeev:
Не подскажите какой код?

У Алексея я уверен нормальный код) А у вас? Вы как пытались уже сделать то что вам надо?

 
Georgii Gabeev:
Не подскажите какой код?

Определяете сейчас который час, желательно в секундах, затем если у вас есть позиции и если текущее время попадает в заданный вами промежуток - закрываете позицию.

 
//+------------------------------------------------------------------+
//|                                                          098.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
input string   t10="---- CalendarValueLast 1-----";              //
input datetime HoursFrom                    = D'1970.01.01';     // 1 Время старт Сигнал Календаря
input datetime HoursTo                      = D'1970.01.01';     // Время стоп Сигнал Календаря
input string   t11="---- CalendarValueLast 2-----";              //
input datetime HoursFrom1                   = D'1970.01.01';     // 2 Время старт Сигнал Календаря
input datetime HoursTo1                     = D'1970.01.01';     // Время стоп Сигнал Календаря
input string   t12="---- CalendarValueLast 3-----";              //
input datetime HoursFrom2                   = D'1970.01.01';     // 3 Время старт Сигнал Календаря
input datetime HoursTo2                     = D'1970.01.01';     // Время стоп Сигнал Календаря
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   OnTimer1();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer1(void)
  {
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom))||
      (HoursFrom1<HoursTo1 && TimeLocal()>=HoursFrom1 && TimeLocal()<HoursTo1) ||
      (HoursFrom1>HoursTo1 && (TimeLocal()<HoursTo1 || TimeLocal()>=HoursFrom1))||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      PlaySound("news.wav");
     }
  }
//+------------------------------------------------------------------+

для мт4 и мт5

Вроде в тестере сработало

Снимок 

//+------------------------------------------------------------------+
//|                                                          098.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <stdlib.mqh>
//---
input string   t10="---- Time -----";      //
input datetime HoursFrom  = D'1970.01.01'; // Закрыть всё
//---
datetime HoursTo          = D'1970.01.01'; //
uint     SLEEPTIME        = 1;
bool     CloseOpenOrders  = true;
double   Price[2];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   OnTimer1();
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool OnTimer1(void)
  {
   bool res=false;
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)))
     {
      CloseAllOrders();
      Sleep(SLEEPTIME*1000);
      CloseAllOrders();
      ObjectsDeleteAll();
      ExpertRemove();
      PlaySound("expert.wav");
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void CloseAllOrders(void)
  {
   int iOrders=OrdersTotal()-1, i;
   if(CloseOpenOrders)
     {
      for(i=iOrders; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() &&
            !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],0))
            Print(OrderError());

         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderDelete(OrderTicket()))
               Print(OrderError());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError(void)
  {
   int iError=GetLastError();
   return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError)));
  }
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo(void)
  {
   RefreshRates();
   Price[0]=MarketInfo(OrderSymbol(),MODE_ASK);
   Price[1]=MarketInfo(OrderSymbol(),MODE_BID);
   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
   if(dPoint==0)
      return(false);
   return(Price[0]>0.0 && Price[1]>0.0);
  }
//+------------------------------------------------------------------+
 

простой и функциональный скрипт (кроме стринговых строк)), можно протестировать, выбрать одну из перегруженных функций - только по часам или часы с минутами, 

не помню кто автор идеи +1 и счетчика, немного изменил названия

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
input  bool    TradeTime               = true;                                               // Ограничивать работу советника по времени
input  int     OpenHour                = 10;                                                  // Час начала торговли
input  int     OpenMinute              = 10;                                                   // Минута начала торговли
input  int     CloseHour               = 14;                                                   // Час завершения торговли
input  int     CloseMinute             = 15;                                                   // Минута завершения торговли

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {

// вызов только с часами
   if(TradeTime && !isTradeTime(OpenHour,CloseHour))
     {
      Print("Торговля по часам запрет");
      //return;
     }
   else
     {
      Print("Торговля по часам разрешена");
     }
// вызов с часами и минутами
   if(TradeTime && !isTradeTime(OpenHour,OpenMinute,CloseHour,CloseMinute))
     {
      Print("Торговля по часам и минутам запрет");
      //return;
     }
   else
     {
      Print("Торговля по часам и минутам разрешена");
     }
  }
//+——————————————————————————————————————————————————————————————————+
//|  |
//+——————————————————————————————————————————————————————————————————+
bool isTradeTime(int openHour,int openMinute,int closeHour,int closeMinute)
  {
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(),dt);
   int openTimeCode=StringToInteger("1"+IntegerToString(openHour)+IntegerToString(openMinute));
   int closeTimeCode=StringToInteger("1"+IntegerToString(closeHour)+IntegerToString(closeMinute));
   int currentTimeCode=StringToInteger("1"+IntegerToString(dt.hour)+IntegerToString(dt.min));
   return(currentTimeCode>openTimeCode && currentTimeCode<=closeTimeCode);
  }

//+——————————————————————————————————————————————————————————————————+
//|   |
//+——————————————————————————————————————————————————————————————————+
bool isTradeTime(int openHour,int closeHour)
  {
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(),dt);
   return((openHour < closeHour && dt.hour >= openHour && dt.hour < closeHour) ||
          (openHour > closeHour && ((dt.hour >= openHour && openHour <=23) || (dt.hour<closeHour && closeHour>=0))));
  }
//+------------------------------------------------------------------+
 

короткий вариант:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
input  bool    TradeTime               = true;                                               // Ограничивать работу советника по времени
input  int     OpenHour                = 10;                                                  // Час начала торговли
input  int     OpenMinute              = 10;                                                   // Минута начала торговли
input  int     CloseHour               = 14;                                                   // Час завершения торговли
input  int     CloseMinute             = 15;                                                   // Минута завершения торговли

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {

// вызов только с часами
   if(TradeTime && !isTradeTime(OpenHour,CloseHour))
     return;

// вызов с часами и минутами
   if(TradeTime && !isTradeTime(OpenHour,OpenMinute,CloseHour,CloseMinute))
     return;
}
//+——————————————————————————————————————————————————————————————————+
//|  |
//+——————————————————————————————————————————————————————————————————+
bool isTradeTime(int openHour,int openMinute,int closeHour,int closeMinute)
  {
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(),dt);
   int openTimeCode=StringToInteger("1"+IntegerToString(openHour)+IntegerToString(openMinute));
   int closeTimeCode=StringToInteger("1"+IntegerToString(closeHour)+IntegerToString(closeMinute));
   int currentTimeCode=StringToInteger("1"+IntegerToString(dt.hour)+IntegerToString(dt.min));
   return(currentTimeCode>openTimeCode && currentTimeCode<=closeTimeCode);
  }
//+——————————————————————————————————————————————————————————————————+
//|   |
//+——————————————————————————————————————————————————————————————————+
bool isTradeTime(int openHour,int closeHour)
  {
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(),dt);
   return((openHour < closeHour && dt.hour >= openHour && dt.hour < closeHour) ||
          (openHour > closeHour && ((dt.hour >= openHour && openHour <=23) || (dt.hour<closeHour && closeHour>=0))));
  }
//+------------------------------------------------------------------+
 
Большое спасибо! 
Alexsandr San:

для мт4 и мт5

Вроде в тестере сработало

 

 
Georgii Gabeev:
Большое спасибо! 

пожалуйста! 

Причина обращения: