Номинальная скорость обработки ордеров - МТ4 vs МТ5. Тестируем вместе. - страница 3

 

во-вторых, если вы споймали какого-то медленного на пинг брокера, то это тоже не есть объективно.


Почитайте первый пост.

По тестам моим и других - достигнутое минимальное время исполнения ордера в МТ4 на PromoFX- 10 ms

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
hrenfx:
Заболтали тему, к сожалению. Удаляю свои посты.
Не удаляйте! Было интересно...
 

Для сравнения:

В FXCM-платформе (не Metatrader) время постановки/удаления торгового ордера занимает 35-50мс (от момента, когда он попадает на их сторону в виде сетевого пакета).

 
Уважаемые разработчики, сообщите, пожалуйста, сколько времени уходит на подготовку к отправке клиенту сетевого пакета с текущими котировками с момента поступления их в систему? Есть ли snapshots (накапливание котировок, например, в течение 50мс) или котировки могут отправляться без специальных задержек?
 

Уважаемые разработчики, еще просьба сообщить, функция OrderSendAsync при нулевом пинге полноценно помещает ордер в систему быстрее, чем OrderSend? Или же скорости размещения в таблицах ордеров после получения соответствующего сетевого пакета для обеих функций равны? И в случае первой функции событие о удачном размещении будет получено через такое же время, как при выполнении OrderSend?

Правильно ли я понимаю равнозначность двух ситуаций на таком примере (нулевой пинг):

  1. Запущено 10 MT5-терминалов на одном и том же счете. С каждого терминала одномоментно выполняется OrderSend, длительность которого 250ms. В итоге за 250ms получаем 10 выставленных торговых приказов.
  2. Запущен 1 MT5-терминал. С него практически одномоментно  выполняется 10  OrderSendAsync, получаем 10 событий удачного размещения торговых приказов совокупно через 250 ms.

Или же как-то иначе?

И еще, если производится 10 асинхронных подряд торговых запросов

  • по одному и тому же символу, то запросы обрабатываются в порядке очереди. Какое время уходит на уменьшение очереди на единицу? Т.е. при нулевом пинге OrderSend и его брат равнозначны?
  • по разным символам, то они между собой в очереди не стоят и ставятся в соответствующие таблицы ордеров параллельно? Т.е. при нулевом пинге OrderSendAsync будет полноценно выполняться значительно быстрее?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
hrenfx:

Уважаемые разработчики, еще просьба сообщить, функция OrderSendAsync при нулевом пинге полноценно помещает ордер в систему быстрее, чем OrderSend? Или же скорости размещения в таблицах ордеров после получения соответствующего сетевого пакета для обеих функций равны? И в случае первой функции событие о удачном размещении будет получено через такое же время, как при выполнении OrderSend?

Внутри весь MetaTrader 5 с самого начала полностью асинхронный, включая все торговые операции. Время реального попадания заявки у OrderSend и OrderSendAsync полностью одинаковое.

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Renat:

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

hrenfx:

Вообще любой может написать последовательный MyOrderSend через OrderSendAsync:

  1. Вызвали OrderSendAsync.
  2. Дождались соответствующего ответа от сервера в onTrade.
  3. Вышли из MyOrderSend с этим ответом.

При такой реализации MyOrderSend будет полностью совпадать с штатной OrderSend (которую можно просто упразднить из API, реализовав через OrderSendAsync в штатной библиотеке).

, сравнение с множеством терминалов и разным количеством символов.

 

Вот мои результаты тестов по сети из Лимассола до Амстердама, пинг до MetaQuotes-Demo серверов на уровне 130 мс.

Тесты на MetaTrader 5 build 642:

2012.04.30 14:09:40     MQL5TradeSpeed.Sync.vs.Async (EURUSD,H1)        4. Открытие 10 сделок асинхронно заняло 31 ms, 3 ms на сделку, 0 ошибок
2012.04.30 14:09:40     MQL5TradeSpeed.Sync.vs.Async (EURUSD,H1)        3. Открытие 10 сделок асинхронно, подождите...
2012.04.30 14:09:40     MQL5TradeSpeed.Sync.vs.Async (EURUSD,H1)        2. Открытие 10 сделок синхронно заняло 1498 ms, 149 ms на сделку, 0 ошибок
2012.04.30 14:09:38     MQL5TradeSpeed.Sync.vs.Async (EURUSD,H1)        1. Открытие 10 сделок синхронно, подождите...

Тесты МetaTrader 4 build 419:

2012.04.30 14:19:33	MQL4.TradeSpeed.Sync EURUSD,H1: Alert: 2. Открытие 10 сделок синхронно заняло 2075 ms, 207 ms на сделку, 0 ошибок
2012.04.30 14:19:31	MQL4.TradeSpeed.Sync EURUSD,H1: Alert: 1. Открытие 10 сделок синхронно, подождите...


Видно, что 10 сделок на MetaTrader 5 в асинхронном режиме улетели за 31 мс, в среднем по 3 мс на ордер. Это скорострельность асинхронного режима "выстрелил и забыл" без какого либо подтверждения со стороны сервера. Первые ответы (пачкой) от сервера придут где-то через 145 мс, как в обычном синхронном режиме. Но как 10 заявок были выстрелены за 31 мс, так и прием их результатов тоже должен прийти пачкой через 145 мс.

Синхронный режим показывает по 149 мс исполнения каждой заявки, что при базовом пинге до торгового сервера в 130 мс является хорошим результатом. Маленький размер сетевого пакета + эффективный сетевой протокол позволяют очень быстро доставлять данные.

В MetaTrader 4 есть только синхронный режим и среднее время исполнения одной заявки оказалось 207 мс, что больше времени исполнения MetaTrader 5. Одним из объяснений этой разницы является затраты на использование отдельного сетевого контекста для торговых операций, что может привести к некоторым задержкам. Кроме того, в MetaTrader 5 мы применили более эффективные механизмы очередей заявок и исполнения.


Важно помнить, что любые замеры скоростных сетевых характеристик прямо зависят от самой сети. В моем случае базовый пинг до MetaQuotes-Demo серверов был на уровне 130 мс. Это означает, что нельзя сравнивать получаемые результаты между разными замерами без применения учета и коррекции на базовый пинг.

Я приложил два скрипта, чтобы любой мог провести собственные тесты. Используйте их на одинаковых MT4/MT5 серверах, стоящих в одном и том же физическом месте, с одинаковыми точками доступа и с одинаковыми величинами пингов. Это позволит сравнивать полученные результаты в режиме MT4 vs MT5. Адреса наших демонстрационных торговых серверов MetaTrader 4 (demo.metaquotes.net:443) и MetaTrader 5 (access.metatrader5.com:443).


 
Renat:

Видно, что 10 сделок на MetaTrader 5 в асинхронном режиме улетели за 31 мс, в среднем по 3 мс на ордер. Это скорострельность асинхронного режима "выстрелил и забыл" без какого либо подтверждения со стороны сервера. Первые ответы (пачкой) от сервера придут где-то через 145 мс, как в обычном синхронном режиме. Но как 10 заявок были выстрелены за 31 мс, так и прием их результатов тоже должен прийти пачкой через 145 мс.

Наконец-то!
 
hrenfx:
Наконец-то!
Но никаких гарантий по таймингам ответа нет - дальнейшее все зависит от исполняющей заявки среды.