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

 
Andrey Khatimlianskii:

Определить обрыв связи

Не знаю, как это сделать.

 
fxsaber:

Не знаю, как это сделать.

А почему решили, что они бывают, и ОнТрейд теряется? Из документации?

 
Andrey Khatimlianskii:

А почему решили, что они бывают, и ОнТрейд теряется? Из документации?

Потому что Релогин сбрасывает исторический кеш, который (предполагаю) дописывается через OnTrade-механизм.

 
fxsaber:

Не знаю, как это сделать.

Не вылезая из МТ5 межтиковое время, если возможно. А с торговыми операциями в отношении приказа в ДЦ без штатной помощи не придумывается что то.

 
Valeriy Yastremskiy:

Не вылезая из МТ5 межтиковое время, если возможно. А с торговыми операциями в отношении приказа в ДЦ без штатной помощи не придумывается что то.

Ничего не понял.

 
fxsaber:

Ничего не понял.

Да, что то не то. Межтиковое время только для пропуска тиков по причине обрыва связи. А в отношении запросов и корректности ответов по ордерам-приказам, сделкам и состоянии позиций, если ответ будет пропущен или изменен по причине обрыва связи и лагам из за этого дешевых решений видимо нет. Перезапрос на следующем тике не всегда вариант.

Для меня решением было бы штатная функция отслеживания состояния сделок/позиций в отношении приказов на открытие, модификацию, частичное закрытие, полное закрытие позиции. Что бы запрос на отслеживание результата можно было задать в самом приказе. И получить результат на текущем тике, а не на следующем.

 
fxsaber:

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

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.

Судя по времени записей лога, все произошло за 7мс.

Если хотите конструктивное обсуждение, то приводите все условия теста полностью (сервер, тип счета, количество выбранных символов, количество экспертов итп).


Код замера времени выполнения SymbolInfoTick:

void OnTick()
  {
   MqlTick Tick;
//---
   ulong start,end,max_time=0,avr_time=0;
   int   count=1000;
   for(int i=0; i<count; i++)
     {
      start=GetMicrosecondCount();
      SymbolInfoTick(_Symbol, Tick);
      end=GetMicrosecondCount()-start;
      //---
      if(end>max_time)
         max_time=end;
      avr_time+=end;
     }
   Print("SymbolInfoTick max time: ",DoubleToString(max_time/1000.0,3)," ms; avr time: ",DoubleToString(avr_time/1000.0/count,3)," ms; ",count," iterations");
  }

На сервере MetaQuotes-Demo (выбрано 20 символов, Netting, 4 открытых позиции):

2020.09.16 12:34:22.429 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.148 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.456 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.751 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.145 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.652 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.051 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.259 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.861 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:31.159 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.376 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.658 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:34.867 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations

Выбрано 131 символов, 10 открытых позиций:

2020.09.16 12:44:50.554 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:52.337 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:54.960 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.587 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.863 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.016 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.187 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.958 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.018 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:59.989 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:00.298 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.609 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.024 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.891 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:08.790 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.617 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.933 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:11.841 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.416 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.709 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
Windows 10 build 18363, Intel Xeon  E5-2630 v4 @ 2.20GHz, 52 / 63 Gb memory
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Anton:

Судя по времени записей лога, все произошло за 7мс.

Это три разных советника выдали.

Если хотите конструктивное обсуждение, то приводите все условия теста полностью (сервер, тип счета, количество выбранных символов, количество экспертов итп).

Реальный счет, RannForex-Server, 16 символов, на каждый открыт M1-чарт (5000 макс. баров), на каждом запущен советник, который обращается только к своему символу.

В моменте может быть около 50 позиций и столько же ордеров. Индикаторов нет, для получения цен используется только CopyTicksRange (свежие тики) и SymbolInfoTick. К барам обращения нет.

 
fxsaber:

Это три разных советника выдали.

Реальный счет, RannForex-Server, 16 символов, на каждый открыт M1-чарт (5000 макс. баров), на каждом запущен советник, который обращается только к своему символу.

В моменте может быть около 50 позиций и столько же ордеров.

Если я правильно понял, там не советник, а стресс-тестер на каждом символе. Это совершенно меняет дело. И показывает скрытие исходных условий.

То есть, на 8(4+HT) ядерном процессоре 16 потоков (+N рабочих потоков терминала параллельно) в безостановочном режиме и без задержек ломятся в один синхронизирующийся объект базы символов. Read / Write локи перемешаны, так как постоянно идет запись тиков.

Обычно в таком профиле в зависимости от крутости процессора и его шедулера потоков, каждый поток может провести в ожидании от 60% до 80% времени.

Причем вне зависимости от типа задач.

 
Renat Fatkhullin:

Если я правильно понял, там не советник, а стресс-тестер на каждом символе.

Не правильно поняли. Каждый советник является исключительно торговым (в Тестере по реальным тикам не тормозит) и не зависит от других. Вся торговая логика выполняется только в OnTick, не спамит торговыми ордерами, без рекурсий, без глобалок и ресурсов.

OnTrade*, OnBook - не используются. Секундный таймер и OnChartEvent на случай нажатия определенных клавиш.


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

Никак не думал, что дойдет до снепшот-ухищрений. Изучаю вопрос, т.к. стандартная реализация MT5-советника хромает, к сожалению.