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

 
fxsaber:
Добавление ордера/сделки в историю торгов вызывает полное пересобирание HistorySelect-кеша, а не частичное. Отсюда лаги при срабатывании отложек.

b2595 - исправили, Супер!

Не на той истории проверил, не исправили пока.

 

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

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

fxsaber, 2020.09.08 19:46

2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.

b2596 стал быстрее, похоже.

2020.09.11 05:06:17.854 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:18.853 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:19.875 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:20.871 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
 
b2605 - не алертит больше. Большое дело сделали, Спасибо!
MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.09.07
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 

Подскажите, что лучше сделать, чтобы с таким не сталкиваться во время торговли?

2020.09.15 22:17:04.633 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.09.15 22:17:04.638 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.09.15 22:17:04.640 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 20 ms.
 
Результат работы этого скрипта на боевом Терминале.
2020.09.15 22:26:41.788 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 1 ms.
2020.09.15 22:26:48.322 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 2 ms.
2020.09.15 22:27:07.661 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:27:47.228 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 2 ms.
2020.09.15 22:27:53.039 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 9 ms.
2020.09.15 22:28:13.858 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:28:21.058 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 8 ms.
2020.09.15 22:28:47.813 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 4 ms.
2020.09.15 22:28:51.482 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 505: AccountInfoInteger(ACCOUNT_TRADE_EXPERT)] = 4 ms.
2020.09.15 22:29:09.053 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:29:09.353 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 506: AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)] = 1 ms.
2020.09.15 22:29:28.814 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 457: HistorySelect(Tick.time,INT_MAX)] = 2 ms.

Последняя строка - нормально.


Могут ли на лаги влиять параллельно запущенные советники? Индикаторов нет.


ЗЫ Профилирование на пустом Терминале.

SymbolInfoTick - дорогая функция.

 
fxsaber:

Могут ли на лаги влиять параллельно запущенные советники? Индикаторов нет.

Запустил параллельно пустой Терминал и в нем попробовал. Та же картина.

Конфигурация.
2020.09.15 20:35:42.481 Terminal        Windows 10 build 19042, Intel Core i7-2700K  @ 3.50GHz, 6 / 15 Gb memory, 20 / 29 Gb disk, IE 11, Admin, GMT+3
 
В общем, из-за того, что почти каждая штатная функция может вызывать тормоза, боевой советник каждый OnTick выполняет несколько десятков миллисекунд. Столько съедает сумма вызовов Order*+SymbolInfoTick+Position* и т.д. Каких-либо мат. вычислений нет. Нужны бесплатные снепшоты. Без них ЛЧИ на MT5 не катит.
 
fxsaber:
В общем, из-за того, что почти каждая штатная функция может вызывать тормоза, боевой советник каждый OnTick выполняет несколько десятков миллисекунд. Столько съедает сумма вызовов Order*+SymbolInfoTick+Position* и т.д. Каких-либо мат. вычислений нет. Нужны бесплатные снепшоты. Без них ЛЧИ на MT5 не катит.

Что-то не так в подходе... Видимо, нужны ОнТрейд-функции, а не сканирование состояние с нуля на каждом тике.

 
Andrey Khatimlianskii:

Что-то не так в подходе... Видимо, нужны ОнТрейд-функции, а не сканирование состояние с нуля на каждом тике.

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

Например, делать полноценный снепшот в самом начале OnTick. И повторять его только после вызова синхронной функции - OrderSend и CopyTicks.

Что касается OnTrade*, то обрывы связи обламывают схему, когда снепшоты делаются только в OnTrade-функциях. Иначе, конечно, была бы большая экономия.

 
fxsaber:

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

Например, делать полноценный снепшот в самом начале OnTick. И повторять его только после вызова синхронной функции - OrderSend и CopyTicks.

Конечно, объект-снепшот должен быть один.


fxsaber:

Что касается OnTrade*, то обрывы связи обламывают схему, когда снепшоты делаются только в OnTrade-функциях. Иначе, конечно, была бы большая экономия.

Определить обрыв связи и принудительно обновить снепшот на следующем тике, а потом вернуться к экономному режиму?