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

 
fxsaber:

Как думаете, какой Терминал потребляет больше CPU?

2-ой и вот почему

 
fxsaber:

Для уменьшения CPU рекомендую закрывать все подокна Терминала (Обзор рынка, Навигатор, Инструменты и т.д.), минимизировать все чарты и минимизировать сам Терминал.

Из Обзора рынка убирать все неиспользуемые символы. Особенно актуально для своих VPS.


Предлагаю эти действия как-то автоматизировать. Перед выходом из VPS нажал и вышел. Когда заходишь - нажал, все видишь.

Я давно говорю, что для алготрейдеров нужна другая версия терминала, без всего этого тюнинга!

Кроме всего вышеперечисленного добавил еще в каждого советника:

ChartSetInteger(0,CHART_SHOW,false);

Все равно тормоза :(

 
A100:

2-ой и вот почему

Да, второй.

 
Как архитектурно устроен SymbolInfoTick? Нет понимания, почему он может выполняться десятки миллисекунд.
 

b2560 колоссально проигрывает по производительности, если сравнивать с b2592. Ждем исправления бага.

Ветка получилась полезной.

 
fxsaber:

b2560 колоссально проигрывает по производительности, если сравнивать с b2592. Ждем исправления бага.

b2593 - исправили. Спасибо!

 
Добавление ордера/сделки в историю торгов вызывает полное пересобирание HistorySelect-кеша, а не частичное. Отсюда лаги при срабатывании отложек.
// Демонстрация полного (не частичного) пересбора 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 (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Результат.
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.


Почему это важно. Представим, что работает HFT-робот. На этом же счете совершается руками сделка. Все, в HFT-роботе сброшен HistorySelect-кеш с соответствующими последствиями. Конечно, у HFT-робота история - не жалкие 10К ордеров/сделок, а гораздо больше. Пересобрать полностью кеш для такой истории - дорогое удовольствие. Поэтому логично дописывать.


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

 

Очень не хватает функций, позволяющих делать полные (массивы структур) снепшоты текущего торгового окружения (позиции и ордера).

Вариант через Position* и Order* функции вызывает коллизии (активная торговля) при проходе этих двух списков в цикле. Что-то теряется или не учитывается.

Мгновенные полные снепшоты позволили бы избежать таких проблем.


ЗЫ Полные снепшоты для Обзора рынка - пока не оценить восстребованность. Делаем MT5 ближе к HFT (ЛЧИ).

 

Удалось (не специально) вогнать Терминал (и ни один) в состояние, когда CPU 100%, а время ожидания OrderSend больше секунды.

Наверное, найти причину будет не просто.


ЗЫ Похоже, такие тормоза вызывает подобная конструкция.

void OnTrade()
{
  OnTick();
}

Мне не удалось создать код для воспроизведения.


Факт, можно советниками вогнать Терминал в состояние, когда торговые приказы будут исполняться секунды (лог Терминала) при пинге 50 мс. Стоит только удалить советники, как торговые приказы начинают исполняться в пределах 100 мс.

 
fxsaber:

Очень не хватает функций, позволяющих делать полные (массивы структур) снепшоты текущего торгового окружения (позиции и ордера).

Вариант через Position* и Order* функции вызывает коллизии (активная торговля) при проходе этих двух списков в цикле. Что-то теряется или не учитывается.

Мгновенные полные снепшоты позволили бы избежать таких проблем.


ЗЫ Полные снепшоты для Обзора рынка - пока не оценить восстребованность. Делаем MT5 ближе к HFT (ЛЧИ).

И штатных функций отслеживания приказа-сделки-позиции по тикету и в обратную сторону по тикету позиции понимать что за приказ был и условия сделки. Отслеживать по истории состояние это злая реальность. 

Полное окружение по щелчку это круто, но видимо дорого и не так часто нужно. хотя при обвале рынка)))) 

Для себя делю приказ и ордер. Приказ на исполнение ордер - отложка. Маркетный ордер вносит путаницу.

Не судите строго не проф-ное мнение.