Проверка доступности рынка - страница 3

 
Vladimir Suschenko:

К сожалению, бывают моменты, когда перечисленные методы не исключают появления сообщения в терминале "...[Market closed]....". Тема неоднократно обжёвывалась на форуме, что-то вроди бы предпринималось...‌
Однако до сих пор приходится пользоваться костылями.
P.S. Если я ошибаюсь, не отследил, как проблему разрулили, ткните плиз носом "что, где когда".


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

‌2017.03.02 02:00:08.454 '3387531': order sell 0.01 EURUSD opening at 1.0549 sl: 0.0000 tp: 0.0000 failed [Market is closed]

Для того, чтобы привести его в чувство, необходимо и достаточно вызвать и закрыть советник путем Советники - Свойства- ОК и он исправно ставит пропущенную, в начале ТФ, позицию:

2017.03.02 04:27:58.100 '3387531': order #116149905 sell 0.01 EURUSD at 1.0540 was modified -> sl: 0.0000 tp: 1.0040

Что делать? 

 
Sergey Chalyshev:

Интересная идея, но не могу запустить и проверить. Можете сделать без MT4Orders.mqh ? не хочется ковыряться в дебрях MT4.

Скачайте mqh, тогда запустится. MT4 не при чем.
 
Yousufkhodja Sultonov:


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

‌2017.03.02 02:00:08.454 '3387531': order sell 0.01 EURUSD opening at 1.0549 sl: 0.0000 tp: 0.0000 failed [Market is closed]

Для того, чтобы привести его в чувство, необходимо и достаточно вызвать и закрыть советник путем Советники - Свойства- ОК и он исправно ставит пропущенную, в начале ТФ, позицию:

2017.03.02 04:27:58.100 '3387531': order #116149905 sell 0.01 EURUSD at 1.0540 was modified -> sl: 0.0000 tp: 1.0040

Что делать? 


попробуйте такую функцию

bool SessionTrade(string symbol,datetime times)
  {
   MqlDateTime last_time;
   MqlDateTime start_time;
   MqlDateTime end_time;
   datetime trade_time_start=0;
   datetime trade_time_end=0;
   datetime starts=0;
   datetime end=0;

   ResetLastError();
   datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME);
   if(expiration!=0 && times>=expiration)return(false);
   TimeToStruct(times,last_time);
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
   return(false);
  }


‌...

 
Sergey Gritsay:


попробуйте такую функцию

bool SessionTrade(string symbol,datetime times)
  {
   MqlDateTime last_time;
   MqlDateTime start_time;
   MqlDateTime end_time;
   datetime trade_time_start=0;
   datetime trade_time_end=0;
   datetime starts=0;
   datetime end=0;

   ResetLastError();
   datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME);
   if(expiration!=0 && times>=expiration)return(false);
   TimeToStruct(times,last_time);
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
   return(false);
  }


‌...


Благодарю, проверю. Кто поможет мне "вшить" эту функцию в код советника, составляющего основу проекта "комикадзе"?
 
Sergey Gritsay:


попробуйте такую функцию

bool SessionTrade(string symbol,datetime times)
  {
   MqlDateTime last_time;
   MqlDateTime start_time;
   MqlDateTime end_time;
   datetime trade_time_start=0;
   datetime trade_time_end=0;
   datetime starts=0;
   datetime end=0;

   ResetLastError();
   datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME);
   if(expiration!=0 && times>=expiration)return(false);
   TimeToStruct(times,last_time);
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
   if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
     {
      TimeToStruct(trade_time_start,start_time);
      TimeToStruct(trade_time_end,end_time);
      starts=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
      end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
      if(starts==end)return(true);
      if(times>starts && times<end)return(true);
     }
//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
   return(false);
  }


‌...


В субботу ф-ция вернула true. Разбираться нет времени. Поясните пожалуйста что делает эта ф-ция, и как с ней работать - просто, если не сложно, сохраните моё время на разбор работы ф-ции.
 
Artyom Trishkin:

В субботу ф-ция вернула true. Разбираться нет времени. Поясните пожалуйста что делает эта ф-ция, и как с ней работать - просто, если не сложно, сохраните моё время на разбор работы ф-ции.

функция получает из спецификации инструмента данные времени о торговой сессии сравнивает его со временем переданным в функцию и если время выходит за границы торговой сессии то возвращает false. Да тут есть нюанс так как TimeCurrent() не работает в выходные, нужно как-то завязать время либо на локальное время компьютера либо сделать поправку в несколько секунд например TimeCurrent()+5
 
Sergey Gritsay:

функция получает из спецификации инструмента данные времени о торговой сессии сравнивает его со временем переданным в функцию и если время выходит за границы торговой сессии то возвращает false. Да тут есть нюанс так как TimeCurrent() не работает в выходные, нужно как-то завязать время либо на локальное время компьютера либо сделать поправку в несколько секунд например TimeCurrent()+5
Ну да, так сразу и подумал. Значит данная ф-ция не поможет Юсуфу справиться с его проблемой. Ведь у него в торговое время рынок закрыт в начале дня.
 
Yousufkhodja Sultonov:


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

‌2017.03.02 02:00:08.454 '3387531': order sell 0.01 EURUSD opening at 1.0549 sl: 0.0000 tp: 0.0000 failed [Market is closed]

Для того, чтобы привести его в чувство, необходимо и достаточно вызвать и закрыть советник путем Советники - Свойства- ОК и он исправно ставит пропущенную, в начале ТФ, позицию:

2017.03.02 04:27:58.100 '3387531': order #116149905 sell 0.01 EURUSD at 1.0540 was modified -> sl: 0.0000 tp: 1.0040

Что делать? 


На стороне ДЦ признали ошибку сервера:

Нами была произведена детальная проверка сложившейся ситуации на Вашем счете #*******) в ходе которой было установлено:


2017.03.08 00:00:09 (GMT +1) открытие ордера Sell 0.01 EURUSD по цене 1.0564 было отклонено в связи с технической причиной. В момент отправки запроса, ордер не был принят на обработку ввиду задержки на стороне сервера. Технический отдел уже проинформирован об этой ситуации и занимается ее решением. В ближайшее время ситуация будет исправлена. 
 

Может здесь будет что-то полезное

https://www.mql5.com/ru/forum/91147

Торговая сессия & Котировочная сессия. Вопросы остаются...
Торговая сессия & Котировочная сессия. Вопросы остаются...
  • www.mql5.com
А собственно поиск начался с того, что все ниже перечисленные проверки, в воскресенье (и по золоту в понедельник с 00:00 по 01:00) разрешили советн...
 
fxsaber:
.....
Вставил Ваш код в советник на демо-счёте. О результатах напишу.
Причина обращения: