MT5 и скорость в боевом исполнении - страница 24

 
Artyom Trishkin:

Скорее всего - после выхода очередной релизной версии (сейчас беты)

Спасибо
 
Artyom Trishkin:

Скорее всего - после выхода очередной релизной версии (сейчас беты)

А массив сделок не будет?

 

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

MT5 и скорость в боевом исполнении

fxsaber, 2020.08.13 04:36

  1. Зайти на демо-счет MetaQuotes-Demo с относительно большой торговой историей. 
    1. Если на демо-счете небольшая торговая история, то разрешить авто-торговлю и параллельно запустить скрипт OrderSend-Test2.ex5 (в приложении, исходник).

Этот древний скрипт покажет многие тормоза, если запустить его на одном чарте MQ-Demo и в Обзор рынка добавить побольше торговых символов (у меня было 100). 

Лог Терминала.

2020.09.04 17:51:33.112 Trades  '34510052': cancel order #702851395 buy stop 0.01 EURCAD at 1.55852
2020.09.04 17:51:33.512 Trades  '34510052': accepted cancel order #702851395 buy stop 0.01 EURCAD at 1.55852
2020.09.04 17:51:33.514 Trades  '34510052': cancel #702851395 buy stop 0.01 EURCAD at market done in 401.845 ms

Удаление отложки произошло за 401 мс. Разработчики имеют доступ к логам торгового сервера и могут посмотреть, сколько длилось исполнение там. Для примера.

Воспроизвести у себя может каждый.


На всякий случай, так выглядит торговый приказ с результатом.

2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Alert: EURCAD 702851395 Request executed 401.915 + 0.003 (0) ms.
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.action = TRADE_ACTION_REMOVE (8)
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.magic = 0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.order = 702851395
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.symbol = EURCAD
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.volume = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.price = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.stoplimit = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.sl = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.tp = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.deviation = 0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.type = ORDER_TYPE_BUY (0)
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.type_filling = ORDER_FILLING_FOK (0)
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.type_time = ORDER_TIME_GTC (0)
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.expiration = 1970.01.01 00:00:00
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.comment = 
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.position = 0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Request.position_by = 0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.retcode = 10009
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.deal = 0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.order = 702851395
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.volume = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.price = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.bid = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.ask = 0.0
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.comment = Request executed 401.915 + 0.003 (0) ms.
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.request_id = 6133
2020.09.04 17:51:33.514 OrderSend-Test2 (EURUSD,M1)     Result.retcode_external = 0


Пинг.

2020.09.04 17:51:57.567 AccountInfoString(ACCOUNT_SERVER) = MetaQuotes-Demo
2020.09.04 17:51:57.567 TerminalInfoInteger(TERMINAL_PING_LAST) = 74808


Скрипт работал около 10 минут.


Меня эти тормоза не волнуют. Хочется только знать, где и что можно подкрутить, чтобы улучшить ситуацию? Это Терминал или торговый сервер? В общем, у разработчиков есть все возможности воспроизвести и при желании разобраться.

Особенности исполнения торговых приказов MT5
Особенности исполнения торговых приказов MT5
  • 2020.02.06
  • www.mql5.com
Анализировал с владельцем MT5-сервера тормоза торговых приказов. Запускался OrderSend-Test2.mq5 в том же месте, где MT5-сервер стоит. Т.е. нулевой пинг. Демо, все внутри. Изучались логи MT5-сервера (2170) и MT5-клиента (2280). Логи сервера не буду приводить, просто словами опишу. Думаю, результаты буду интерсны всем, т.к. это поможет раскрыть...
 
fxsaber:

Этот древний скрипт покажет многие тормоза, если запустить его на одном чарте MQ-Demo и в Обзор рынка добавить побольше торговых символов (у меня было 100). 

Помню такой случай

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

Новая версия платформы MetaTrader 5 build 1880: Расчет полной истории синтетических инструментов

A100, 2018.07.25 21:55

Нагрузку нужно учитывать в любом случае:

У меня есть медленный компьютер... а есть оооочень медленный... так вот... если в оооочень медленном в Обзор рынка добавить 63 символа и нажать после этого F10 то MetaTrader зависает капитально (требуется перезагрузка)... при том что во всех остальных режимах работает вполне себе нормально

но так он и зависал после этого как минимум год - правда это еще на 32х разрядной версии было

 
A100:

Помню такой случай

Количество символов в Обзоре рынка не имеет принципиального значения для воспроизведения тормозов. Просто я так сделал у себя.

Воспроизводится легко.
2020.09.04 18:25:06.131 Trades  '34510052': buy limit 0.01 USDPLN at 3.77653
2020.09.04 18:25:06.202 Trades  '34510052': accepted buy limit 0.01 USDPLN at 3.77653
2020.09.04 18:25:06.202 Trades  '34510052': order #702911224 buy limit 0.01 / 0.01 USDPLN at 3.77653 done in 70.966 ms
2020.09.04 18:25:06.202 Trades  '34510052': cancel order #702911224 buy limit 0.01 USDPLN at 3.77653
2020.09.04 18:25:06.274 Trades  '34510052': accepted cancel order #702911224 buy limit 0.01 USDPLN at 3.77653
2020.09.04 18:25:06.274 Trades  '34510052': cancel #702911224 buy limit 0.01 USDPLN at market done in 71.859 ms
2020.09.04 18:25:06.274 Trades  '34510052': buy stop 0.01 USDPLN at 3.79653
2020.09.04 18:25:06.481 Trades  '34510052': instant sell 0.1 NZDSGD at 0.91421, close #702903930 buy 0.1 NZDSGD 0.91462
2020.09.04 18:25:06.982 Trades  '34510052': accepted buy stop 0.01 USDPLN at 3.79653
2020.09.04 18:25:07.030 Trades  '34510052': order #702911229 buy stop 0.01 / 0.01 USDPLN at 3.79653 done in 755.302 ms
2020.09.04 18:25:07.030 Trades  '34510052': accepted instant sell 0.1 NZDSGD at 0.91421, close #702903930 buy 0.1 NZDSGD 0.91462
2020.09.04 18:25:07.030 Trades  '34510052': deal #681898561 sell 0.1 NZDSGD at 0.91421 done (based on order #702911234)
2020.09.04 18:25:07.031 Trades  '34510052': cancel order #702911229 buy stop 0.01 USDPLN at 3.79653
2020.09.04 18:25:07.031 Trades  '34510052': order #702911234 sell 0.1 / 0.1 NZDSGD at 0.91421 done in 550.273 ms
2020.09.04 18:25:07.103 Trades  '34510052': accepted cancel order #702911229 buy stop 0.01 USDPLN at 3.79653
2020.09.04 18:25:07.103 Trades  '34510052': cancel #702911229 buy stop 0.01 USDPLN at market done in 72.558 ms
2020.09.04 18:25:07.103 Trades  '34510052': instant buy 0.01 USDHUF at 297.871 (deviation: 100)
2020.09.04 18:25:07.130 Trades  '34510052': instant sell 0.01 GBPCAD at 1.73255, close #702904086 buy 0.01 GBPCAD 1.73271
2020.09.04 18:25:07.174 Trades  '34510052': accepted instant buy 0.01 USDHUF at 297.871 (deviation: 100)
2020.09.04 18:25:07.174 Trades  '34510052': deal #681898572 buy 0.01 USDHUF at 297.871 done (based on order #702911246)
2020.09.04 18:25:07.175 Trades  '34510052': order #702911246 buy 0.01 / 0.01 USDHUF at 297.871 done in 72.051 ms
Между двумя красными временами локального времени всего 1 мс, а на самом деле должно быть 550 мс (последовательный OrderSend). Видимо, здесь сказываются еще Print-snapshots.
 
Renat Fatkhullin:

Ради своей позиции любой самострел в тему?

// Демонстрация тормозов HistorySelect.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (Request.tp) // Если позиция выставлена - меняем тейк.
  {
    static bool Flag = false;

    Request.action = TRADE_ACTION_SLTP;
    Request.tp += (1 - ((Flag = !Flag) << 1)) * _Point;
        
    if (Result.order)
      Request.position = Result.order;
  }
  else // Иначе выставляем позицию.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.tp = Request.price + 1000 * _Point;         
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?
}


Результат на b2592 MQ-Demo.

2020.09.04 23:30:32.661 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:33.681 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:34.655 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:35.674 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:36.657 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:37.668 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:38.661 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.04 23:30:39.666 Alert: Time[Test6.mq5 35: HistorySelect(0,INT_MAX)] = 5 ms.

На каждом вызове лаг.

 
Тоже по поводу задержек

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

Ошибки, баги, вопросы

A100, 2020.08.31 15:55

На графике (в частности EURUSD) с месячным и недельным таймфреймом перекрестие очень медленно двигается вслед за курсором - для воспроизведения достаточно плавно перемещать курсор по диагонали. На остальных таймфреймах - нормально. Ранее такой задержки не было

да и все графические построения вручную (трендовая, Фибоначчи и др.) происходят также медленно

Настройки все по умолчанию:

  • Сервер: MetaQuotes-Demo
  • История: доступна с 01.01.1971
  • точная шкала времени: нет
  • Макс.баров в окне: 100000
  • Тип графика: японские свечи
  • уменьшение масштаба графика: максимальное

Символ, период баров задержка
EURUSD, Mounthly 597 есть
EURUSD, Weekly
2590 есть
EURUSD, Daily  

12797

нет

Какая то обратная зависимость: чем меньше баров, тем медленнее

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

 
A100:

Какая то обратная зависимость: чем меньше баров, тем медленнее

Скорее, прямая — чем выше ТФ, тем больше задержка.

Видимо, из-за точного расчета координат по младшему ТФ. Где-то накосячили с получением индиксов баров, входящих в искомый недельный/месячный бар.

ps: у меня все летает, кол-во баров то же

 
Andrey Khatimlianskii:

Скорее, прямая — чем выше ТФ, тем больше задержка.

Видимо, из-за точного расчета координат по младшему ТФ. Где-то накосячили с получением индиксов баров, входящих в искомый недельный/месячный бар.

ps: у меня все летает, кол-во баров то же

Естественно, что никаких экспертов\индикаторов\скриптов не запущено - только ручные построения. Указанная задержка воспроизводится на любом среднестатистическом современном 64-битном планшете. Если у Вас комп на i7, то допускаю что не сталкивалисть с такой задержкой
 
A100:
Естественно, что никаких экспертов\индикаторов\скриптов не запущено - только ручные построения. Указанная задержка воспроизводится на любом среднестатистическом современном 64-битном планшете. Если у Вас комп на i7, то допускаю что не сталкивалисть с такой задержкой

Наверное, стоило сразу указать, что используется планшет.

У меня i5