Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1589

 
Игорь Любченко #:
А где вкладка "Журнал" в терминале?

Вот тут

Нажмите на клавиатуре ctrl+t

 

Мой код ATR в MQl5 не открывается для торговли после успешного тестирования, что вы можете посоветовать?

 

Всем привет! Недавно начал пользоваться веб-версией мт-5. На мобильных планшетах. Разных производителей. И 1 время у меня не загружались индикаторы вообще. На график. И сам веб-интерфейс выглядел как-то странно. По сравнению с тем, как стал выглядеть потом. Не знаю, с чем это связано. Наверное, у них есть упрощенные. Версии для плохого интернет-соединения или что-то типа того. Потому что как интерфейс изменился вот этой веб-версии мт-5. Сразу стали загружаться индикаторы на график. Ну и сам интерфейс гораздо более приятный и функциональный. Даже на андроидах и Huawei их больше похож на apple.

Но почему я стал пользоваться веб-версией? Она гораздо быстрее работает, чем любое приложение при том же интернете. Графики загружаются мгновенно. На любых тайм-фреймах. И сам интерфейс более как бы понятный и дружелюбный. И 1 и тот же вне зависимости от производителя устройства. В любом браузере. И работает все четко, и никаких глюков нет. Не знаю, как было с этим раньше. Наверное, откажусь от приложений и буду пользоваться только веб-версии. Мт-5.

 

Всем доброго вечера и хорошего настроения!

Тут на днях мне нужно было придумать функцию, которая бы отслеживала время "жизни" каждой открытой позиции. Например, открыто пять разных позиций, в разное время, в разных направлениях и нужно. чтобы каждая из них "жила" не более 10-ти суток. Набросал вот такой код:

//+------------------------------------------------------------------+
//|                                                       Test_3.mq5 |
//+------------------------------------------------------------------+
input uint Time_Close_Pos = 864000; // Интервал времени для закрытия позиции (в секундах)
//+------------------------------------------------------------------+
void OnTick() {TimeClosePos();}
//+------------------------------------------------------------------+
bool TimeClosePos()
  {
   datetime date_time = TimeCurrent(); // получим последнее известное время сервера
   MqlDateTime mql_datatime = {}; // объявим и инициализируем переменную mql_datatime для упрощенного доступа к структуре MqlDateTime
   TimeToStruct(date_time, mql_datatime); // конвертируем из значения типа datetime в переменную типа структуры MqlDateTime
   uint time_close = mql_datatime.day_of_week; // объявим и инициализируем переменную time_close
   if(time_close >= 1 && time_close <= 5) // если текущее время выпадает на рабочую неделю
      time_close = Time_Close_Pos; // переменная равна значению, заланному во входных параметрах
   else // в противном случае
      time_close = Time_Close_Pos + 172800; // добавим ещё и время 2-х выходных дней
//---
   for(int i = PositionsTotal()-1; i >= 0; i--) // переберём все позиции
     {
      ulong pos_ticket = PositionGetTicket(i);  // получим тикет позиции
      datetime time_pos_open = (datetime)PositionGetInteger(POSITION_TIME); // получим время открытия позиции
      if(TimeCurrent() > time_pos_open + time_close) // если текущее время в заданном диапазоне
         return(true); // наступило время закрыть позицию
     }
   return(false);      // время закрыть позицию ещё не наступило
  }
//+------------------------------------------------------------------+

Однако код получился очень долгим по времени исполнения.

Test_3.mq5
code generated
0 errors, 0 warnings, 941 msec elapsed, cpu='X64 Regular'

Почти секунда (выделил желтым цветом).

Вопрос к настоящим программистам - подскажите, пжл, какой-нибудь более простой и более быстрый по исполнению вариант.

С уважением, Владимир.

 

Владимир, запомните дату предполагаемого закрытия самой старой позиции, и ждите наступление этой даты. Наступила дата, проверили наличие позиции, удалили, запомнили следующую дату

 
Aleksei Stepanenko #:

Владимир, проверяйте не на каждом тике, а раз в час, день.

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

Спасибо, Алексей, за совет! Попробую. На счёт каждого тика - это просто тест на время исполнения, а в самом советнике проверка идёт раз в минуту по таймеру.

С уважением, Владимир.

 
Лучший вариант я переписал, цикл запускается только один раз при удалении позиции и нахождении новой даты. 
 
Aleksei Stepanenko #:
Лучший вариант я переписал, цикл запускается только один раз при удалении позиции и нахождении новой даты. 

Это понятно.

С уважением, Владимир.

 
MrBrooklin #:


... Однако код получился очень долгим по времени исполнения.

Почти секунда (выделил желтым цветом).

Здравствуйте, Владимир.

Если я правильно понимаю, то желтым вы выделили не время выполнения, а время на компиляцию этого кода. Компиляция происходит один раз, после этого вы запускаете на графике или в тестере уже скомпилированный файл. Поэтому можно не особо переживать за этот показатель. Он не отражает, насколько медленно или быстро будет работать советник на графике.

 
Yuriy Bykov #:
вы выделили не время выполнения, а время на компиляцию этого кода
Точно!