Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 18

 
Vladimir Karputov:

Решился вопрос полным сносом папки [data folder]\bases (её размер был почти 40 Гб, сколько занимала история сервера 'MetaQuotes-Demo' я, к сожалению, не подумал запомнить).

Пока не знаю, как проверять такую ситуацию. 

После пяти запусков именно на сервере 'MetaQuotes-Demo' скрипта (  ) появилась ошибка 

2021.07.21 10:26:34.466 Python  type(eurusd_rates)= <class 'NoneType'>
2021.07.21 10:26:34.466 Python  mt5.copy_rates_from(EURUSD) failed. error= (-1, 'Terminal: Call failed')


Остальные три сервера отрабатывают без ошибки.



Добавлено: и остальные серверы после нескольких запусков посыпали ошибкой.

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях
Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях
  • 2021.07.20
  • www.mql5.com
В пятницу 18 июня 2021 года будет выпущена обновленная версия платформы MetaTrader 5...
 

При вызове copy_rates_from и получение ошибки 

2021.07.21 10:26:34.466 Python  mt5.copy_rates_from(EURUSD) failed. error= (-1, 'Terminal: Call failed')

- это есть аналог MQL5 ошибки

ERR_HISTORY_NOT_FOUND

4401

Requested history not found


?

Документация по MQL5: Интеграция / MetaTrader для Python / copy_rates_from
Документация по MQL5: Интеграция / MetaTrader для Python / copy_rates_from
  • www.mql5.com
copy_rates_from - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Стоит v2994

У меня такое предложение.

Вернуть функциям ChartXYToTimePrice и ChartTimePriceToXY нормальную скорость.

Приходится мудрить через канвас, но и это не панацея.

Подробнее со столкнувшейся проблемой писал здесь - https://www.mql5.com/ru/forum/373748

Вообще, работа с объектами довольно медленная. Я бы не просил чего не знал, но в МТ4 такой проблемы нет.


Также существует проблема с прогрузкой котировок, поднимал тему здесь - https://www.mql5.com/ru/forum/373465

И опять же решение через канвас...

Как сделать плавность изменения объектов, нарисованных по XY (MT4 vs MT5)
Как сделать плавность изменения объектов, нарисованных по XY (MT4 vs MT5)
  • 2021.07.19
  • www.mql5.com
Помогите решить проблему на терминале МТ5. Решил перевести свой продукт из mql4 в mql5...
 
b3003, просьба исправить поведение на прежнее (b2958).

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна

fxsaber, 2021.06.19 14:39

Веский довод, почему сейчас в Терминале неправильно. Переделал скрипт в советник.
// Скрипт позволяет увидеть, как формируется таблица истории ордеров
// при создании/удалении новых ордеров и без этого.

#property script_show_inputs

input bool inFlag = true;  // Проверка истории с открытием ордеров
input datetime inFrom = 0; // Не ноль приведет к ошибке и с новыми ордерами

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void OnTick()
{    
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick) && Tick.ask)
  {
    Print("------------\n" + (string)inFlag); // Отделили строки разных запусков скрипта.
  
    if (inFlag) // Проверка на новых ордерах.
    {
      // Попытка сформировать кеш на случай, если начальная дата будет всегда постоянной, но ненулевой.
      HistorySelect(inFrom, INT_MAX);
      
      Print("Create/Delete orders.");
      
      // Создали первый ордер.
      const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
      
      Sleep(2000); // Подождали и создали второй ордер.
      const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
      
      Print(Ticket1); // Тикет первого.
      Print(Ticket2); // Тикет второго.
      
      OrderDelete(Ticket2); // Удалили второй - попал в историю.
      
      Sleep(2000); // Подождали и удалили первый - попал в историю.
      OrderDelete(Ticket1);
    
      // Проверка последовательности ордеров в истории - последних двух.
      if (HistorySelect(inFrom, INT_MAX))
      {
        Print("Check the History. inFrom = " + (string)inFrom);
        
        const int Total = HistoryOrdersTotal();
        
        for (int i = Total - 2; i < Total; i++)
          Print(HistoryOrderGetTicket(i)); // Распечатываем тикеты в конце таблицы. 
      }
  
      ExpertRemove();  
    }  
  }  
}


Результат Тестера.

2021.06.19 15:30:46.582 Core 1  EURUSD,M1: testing of Experts\Test9.ex5 from 2021.06.18 00:00 to 2021.06.19 00:00 started with inputs:
2021.06.19 15:30:46.582 Core 1    inFlag=true
2021.06.19 15:30:46.582 Core 1    inFrom=0
2021.06.19 15:30:46.582 Core 1  EURUSD : real ticks begin from 2021.03.15 00:00:00
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   ------------
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   true
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   Create/Delete orders.
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19097)
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19069)
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   2
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   3
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   order canceled [#3 buy limit 0.1 EURUSD at 1.18097]
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   order canceled [#2 buy limit 0.1 EURUSD at 1.18097]
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   Check the History. inFrom = 1970.01.01 00:00:00
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   3
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   2
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   ExpertRemove() function called

Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.


Что имеем на данный момент. HistorySelect в Терминале и в Тестере работают разными алгоритмами. При этом в Тестере этот алгоритм удобный и логичный, да еще и супер-быстрый - дозапись всего, что приходит в историю, в конец таблицы. В Терминале же - нет.


Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.

Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.


 
Прошу помочь решить проблему.
2021.07.22 17:44:00.517 Storage invalid MQL5 login or password
В терминале захожу под учеткой без проблем, в редакторе - никак.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Интеграция MetaTrader 5 с Python для начинающих".
 
Ilyas:
Build b2982  b3003
Время компиляции 29 секунд 58 секунд
Размер EX5 839 Кб 1100 Кб

Время компиляции и размер EX5 очень сильно выросли при переходе b2982->b3003. Несколько раз перепроверил. Встроенных ресурсов в коде нет.


Попробовал ускорить через ini - не выходит.

[Experts]
ExperimentalDebugger=0
Optimize=0

Странно, что первая строка с нулем. Поделитесь методами ускорения компиляции. Пока приходится использовать Debug-EX5 - в 20 раз быстрее генерируется, чем при Release.

 

Поделитесь методами ускорения компиляции. Пока приходится использовать Debug-EX5 - в 20 раз быстрее генерируется, чем при Release.

Самый простой способ - создать Новый проект из исходного файла и отключить в самом проекте свойство: Максимальная оптимизация

 

Убрал все виды новостей


Но кол-во "99" по прежнему висит и звуковое бульканье постоянно всплывает в терминале. Это жуть, как отвлекает.

Как отключить? Порой прилетает по 5-7 звуков за раз!



Где можно включить или отключить метки новостей на графике?

 

По тестеру. По дизайну пока не знаю, что предложить (где что расположить). Думал несколько дней. И пришёл к следующему выводу.

Тестер (как и метаедитор) должен быть отдельным независимым окном со всем функционалом, с вкладками тестирования.

Т.к. сейчас тестирование происходит в отдельном окне, то это вызывает у меня (думаю у всех тех, кто не долго работал с тестером и всех, кто перешёл с МТ4) множество неудобств в пользовании.

Да, в МТ4 тестер занимал слишком много полезного пространства в самом терминале, но можно было сменять вкладки, сравнивать визуал одной и другой версии индикатора/советника, а также можно было накидывать индикаторы прямо на окно тестирования.

Сейчас в МТ5 это выглядит следующим образом. Тестер по прежнему съедает полезное пространство терминала, но тестирование идёт в новом втором окне, в котором нет вкладок, нельзя накидывать на окно тестирования ещё что-то.

Решается это конечно созданием шаблона тестера прямо с индюками. Однако и шаблон тестера разве кто знает как поменять? Почему бы сразу в терминале не сделать tester.tpl, это хоть на мысли наведёт.


Отдельная программа тестера решила бы множество проблем, связанных с понимаем, что куда тыкать.

А ещё можно было бы вызывать тестирование кода прямо из метаедитора, не запуская сам терминал.

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