Просмотр ордеров МТ4

 
Всем добрый вечер, друзья! Подскажите пожалуйста, как просмотреть скорость открытия ордеров на МТ4? Спасибо!
 
Danila Moskvich:
Всем добрый вечер, друзья! Подскажите пожалуйста, как просмотреть скорость открытия ордеров на МТ4? Спасибо!

Если вручную, то во вкладке "Журнал" окна терминал.

Если программно, то так:

uint uTick = GetTickCount();
OrderSend(...);
uint uNewTick = GetTickCount();
uint uDuration = (uNewTick > uTick)? uNewTick - uTick : UINT_MAX - uTick + uNewTick;
Но это непостоянная величина. Можно говорить лишь о средней продолжительности на основании N операций.
 
Danila Moskvich:
Всем добрый вечер, друзья! Подскажите пожалуйста, как просмотреть скорость открытия ордеров на МТ4? Спасибо!

замерить время с максимальной точностью непосредственно перед OrderSend (t1) и сразу после (t2). Разницу поделить пополам и посчитать статистики - это примерно время реакции (лучшее/худшее/типичное/прочее) на которое можно полагаться.

Большая статистика (весьма, потому что сравниваем секунды и милли/микро секунды и выход за пределы секунд) между t1 и OrderOpenTime и её расхождение с лучшей реакцией может что-то сказать про "скорость открытия ордеров сервером". Только это вот вряд-ли нужно..

 
Ihor Herasko:

Если вручную, то во вкладке "Журнал" окна терминал.

Если программно, то так:

Но это непостоянная величина. Можно говорить лишь о средней продолжительности на основании N операций.

Игорь, весь журнал просмотрели, но скорость в журнал похоже в МТ4 не пишется. Может, она как-то отдельно включается для отображения?

 
Maxim Kuznetsov:

замерить время с максимальной точностью непосредственно перед OrderSend (t1) и сразу после (t2). Разницу поделить пополам и посчитать статистики - это примерно время реакции (лучшее/худшее/типичное/прочее) на которое можно полагаться.

Большая статистика (весьма, потому что сравниваем секунды и милли/микро секунды и выход за пределы секунд) между t1 и OrderOpenTime и её расхождение с лучшей реакцией может что-то сказать про "скорость открытия ордеров сервером". Только это вот вряд-ли нужно..

Максим, спасибо за совет! Не сочтите за лень, но есть ли более быстрый, автоматический способ просматривать данный показатель?

 
Danila Moskvich:

Игорь, весь журнал просмотрели, но скорость в журнал похоже в МТ4 не пишется. Может, она как-то отдельно включается для отображения?

Как это не пишется? Вот пример с моего журнала:

0       10:01:01.189    '12752745': instant order sell 0.10 USDCAD at 1.33662 sl: 0.00000 tp: 0.00000
0       10:01:01.532    '12752745': order was opened : #571228348 sell 0.10 USDCAD at 1.33665 sl: 0.00000 tp: 0.00000

Здесь видно, что ордер был открыт за 343 мс.

Может Вы ордер забыли открыть?

 
Danila Moskvich:

Максим, спасибо за совет! Не сочтите за лень, но есть ли более быстрый, автоматический способ просматривать данный показатель?

Один раз подменить штатную функцию OrderSend своей, которая делает ещё и замеры.

// если не использовать свой класс, то так вот
int myOrderSend(...) {
 int result=false;
  ulong t1=GetMicrosecоndCount(); // замерить время раз
  result=::OrderSend(...);                 // вызвать оригинальную функцию
  ulong r2=GetMicrosecondCount(); // замерить время два
  ulong mcs=MicrosecondsBetween(t1,t2); // посчитать разницу
  if (result>=0) PushToStat(_Symbol,OrderType,mcs);             // сохранить в статистику
  return result;   // отдать результат оригинала
}
// подменить например через дефайны
#define OrderSend(.....) myOrderSend(.....)
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговый запрос проходит несколько стадий проверок на торговом сервере. В первую очередь проверяется корректность заполнения всех необходимых полей параметра , и при отсутствии ошибок сервер принимает ордер для дальнейшей обработки. При успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true. Рекомендуется...
 
Провел эксперимент: один и тот же счет открыл на домашнем компьютере и ВПС
Дома 3,1 гГц                                 Ping = 52,65
2020.08.07 10:35:51.505: order was opened : #8139 = 200 мс
2020.08.07 10:35:51.305: order buy market
2020.08.07 10:35:09.486: order was opened : #8091 = 220 мс
2020.08.07 10:35:09.266: order buy market
2020.08.07 10:35:02.938: order was opened : #8083 = 190 мс
2020.08.07 10:35:02.748: order buy market
2020.08.07 10:34:18.096: order was opened : #8002 = 195 мс
2020.08.07 10:34:17.901: order buy market
                                                                Среднее = 201,25

VPS 2,4 гГц                                  Ping =  8,72
2020.08.07 10:30:01.901: order was opened : #7690 = 156 мс
2020.08.07 10:30:01.745: order sell market
2020.08.07 10:29:07.445: order was opened : #7545 = 187 мс
2020.08.07 10:29:07.258: order sell market
2020.08.07 10:22:15.915: order was opened : #7019 = 188 мс
2020.08.07 10:22:15.727: order sell market
2020.08.07 10:20:33.813: order was opened : #6866 = 187 мс
2020.08.07 10:20:33.626: order sell market
                                                                Среднее = 179,5
                                                               Разность =  21,75
     (Ping1 - Ping2)/2 = (52,65-8,72)/2 = 43,93/2 =  21,965
Вывод: счет открывается на сервере и сообщение об этом
приходит на терминал с задержкой в половину пинга.
А первое сообщение формирует термина или сервер?
 
Konstantin Erin:
Провел эксперимент: один и тот же счет открыл на домашнем компьютере и ВПС
Дома 3,1 гГц                                 Ping = 52,65
2020.08.07 10:35:51.505: order was opened : #8139 = 200 мс
2020.08.07 10:35:51.305: order buy market
2020.08.07 10:35:09.486: order was opened : #8091 = 220 мс
2020.08.07 10:35:09.266: order buy market
2020.08.07 10:35:02.938: order was opened : #8083 = 190 мс
2020.08.07 10:35:02.748: order buy market
2020.08.07 10:34:18.096: order was opened : #8002 = 195 мс
2020.08.07 10:34:17.901: order buy market
                                                                Среднее = 201,25

VPS 2,4 гГц                                  Ping =  8,72
2020.08.07 10:30:01.901: order was opened : #7690 = 156 мс
2020.08.07 10:30:01.745: order sell market
2020.08.07 10:29:07.445: order was opened : #7545 = 187 мс
2020.08.07 10:29:07.258: order sell market
2020.08.07 10:22:15.915: order was opened : #7019 = 188 мс
2020.08.07 10:22:15.727: order sell market
2020.08.07 10:20:33.813: order was opened : #6866 = 187 мс
2020.08.07 10:20:33.626: order sell market
                                                                Среднее = 179,5
                                                               Разность =  21,75
     (Ping1 - Ping2)/2 = (52,65-8,72)/2 = 43,93/2 =  21,965
Вывод: счет открывается на сервере и сообщение об этом
приходит на терминал с задержкой в половину пинга.
А первое сообщение формирует термина или сервер?

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

 
Maxim Kuznetsov:

Один раз подменить штатную функцию OrderSend своей, которая делает ещё и замеры.

Максим, благодарим за помощь! Успехов!

 
Maxim Kuznetsov:

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

Пинг нарисовалось автоматически:

Величина Пинг зависит от взаимного расположения сервера брокера и компьютера или VPS с терминалом.

Пинг - это время передачи пакета от терминала к серверу и обратно. В одну сторону это пинг/2

От пинг/2 и зависит время, через которое откроется ордер после команды с терминала

А вот время реакции робота на терминале на изменение цены будет зависеть целиком от Пинг: через Пинг/2 робот узнает об изменении цены и еще через Пинг/2 сервер узнает о действии робота