Скачать MetaTrader 5

Лаг OrderSend() на клиентской стороне

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Веди личную переписку в профиле. Это безопасно!
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2014.03.25 17:20 

Всем доброго времени суток!

Изучая логи работы советника с удивление обнаружил внушительный лаг между вызовом OrderSend() в сорцах советника и началом отправки ордера на сервер: 234 ms!

Имею вот такой код советника:

Print("Create sell with volume: ", DoubleToStr(volume, 2), ", price: ", DoubleToStr(price, Digits));

OrderSend(Symbol(), OP_SELL, volume, price, 100, stopLoss, takeProfit);

И вот что вижу в логе эксперта:

04:00:10.097 ... EURUSDp,M1: Create sell with volume: 0.50, price: 1.38241
04:00:10.597 ... EURUSDp,M1: open #4997207 sell 0.50 EURUSDp at 1.38220 ok

А в логе терминала:

04:00:10.331 '20929430': order sell market 0.50 EURUSDp sl: 0.00000 tp: 0.00000
04:00:10.409 '20929430': request was accepted by server
04:00:10.425 '20929430': request in process
04:00:10.597 '20929430': order was opened : #4997207 sell 0.50 EURUSDp at 1.38220 sl: 0.00000 tp: 0.00000

Прошу давно работающих с MT4 (у меня билд 610, брокер Boston Prime) прокомментировать, почему лаг между Print и сообщением "order sell market ..." в логе аж 234 ms (331-097)?

harbor
121
harbor 2014.03.26 00:56  
он не на клиентской,а на серверной
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2014.03.29 16:39  
harbor:
он не на клиентской,а на серверной
Сомневаюсь, что это связанно с сервером, потому что сообщение "request was accepted by server" в логе появляется уже после обсуждаемого здесь события.
Vasyl Nosal
18534
Vasyl Nosal 2014.03.31 05:15  
nevmerzhitsky:

Всем доброго времени суток!

Изучая логи работы советника с удивление обнаружил внушительный лаг между вызовом OrderSend() в сорцах советника и началом отправки ордера на сервер: 234 ms!

Имею вот такой код советника:

И вот что вижу в логе эксперта:

А в логе терминала:

Прошу давно работающих с MT4 (у меня билд 610, брокер Boston Prime) прокомментировать, почему лаг между Print и сообщением "order sell market ..." в логе аж 234 ms (331-097)?

Скорее всего потому что принтуется по любому и моментально, а для отправки ордера надо всё ровно проверять параметры которые в OrderSend.
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2014.04.03 21:31  
up! может найдется человек, который знает истинную причину? MetaQuotes вообще читаю посты в этом форуме?
zoritch
4326
zoritch 2014.04.03 21:42  
nevmerzhitsky:
up! может найдется человек, который знает истинную причину? MetaQuotes вообще читаю посты в этом форуме?


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

сообщение в сервис-деск... то бишь конкретно метаквотам... это они уже давно едва ли читают... устали

Paladin80
703
Paladin80 2014.04.04 05:12  
nevmerzhitsky:

Всем доброго времени суток!

Изучая логи работы советника с удивление обнаружил внушительный лаг между вызовом OrderSend() в сорцах советника и началом отправки ордера на сервер: 234 ms!

Имею вот такой код советника:

И вот что вижу в логе эксперта:

А в логе терминала:

Прошу давно работающих с MT4 (у меня билд 610, брокер Boston Prime) прокомментировать, почему лаг между Print и сообщением "order sell market ..." в логе аж 234 ms (331-097)?

Ну посудите сами. Сначала вы принтуете действие, затем запрос отправляется на сервер (нужно время), потом запрос должен быть принят сервером (+время), потом сервер должен переварить запрос (+время) и в конце концов отсылает обратно вам потверждение (+время). По названию брокера он американский, а ваше местоположение где? Учтите время прохождения сигнала от вас до брокера и получается что время не так уж и большое.
Alexey Viktorov
6700
Alexey Viktorov 2014.04.04 05:45  
nevmerzhitsky:
up! может найдется человек, который знает истинную причину? MetaQuotes вообще читаю посты в этом форуме?

Попробуй определить время не принтом, а предназначенной для этого функцией. https://docs.mql4.com/ru/common/gettickcount

Не следует забывать, что на выполнение Print() затрачивается время...

Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2014.04.04 21:59  
paladin80:
Ну посудите сами. Сначала вы принтуете действие, затем запрос отправляется на сервер (нужно время), потом запрос должен быть принят сервером (+время), потом сервер должен переварить запрос (+время) и в конце концов отсылает обратно вам потверждение (+время). По названию брокера он американский, а ваше местоположение где? Учтите время прохождения сигнала от вас до брокера и получается что время не так уж и большое.

Похоже многие не совсем понимают мой вопрос. Я спрашиваю обо времени между Print и первым сообщением после вызова OrderSend(). Если судить по текусту этого сообщения - "order sell market 0.50 EURUSDp sl: 0.00000 tp: 0.00000" -, то на сервер ещё ничего не отправлялось, т.е. 234 ms теряются на стороне клиента.


AlexeyVik:

Попробуй определить время не принтом, а предназначенной для этого функцией. https://docs.mql4.com/ru/common/gettickcount

Не следует забывать, что на выполнение Print() затрачивается время...

К сожалению, GetTickCount() вставлять некуда, потому что меня заботит время от Print() до второго сообщения в цепочке из четырех сообщений "order sell market --- order was opened", а все они выводятся транзакционно после вызова OrderSend().
Alexey Viktorov
6700
Alexey Viktorov 2014.04.05 04:55  
nevmerzhitsky:

Похоже многие не совсем понимают мой вопрос. Я спрашиваю обо времени между Print и первым сообщением после вызова OrderSend(). Если судить по текусту этого сообщения - "order sell market 0.50 EURUSDp sl: 0.00000 tp: 0.00000" -, то на сервер ещё ничего не отправлялось, т.е. 234 ms теряются на стороне клиента.


К сожалению, GetTickCount() вставлять некуда, потому что меня заботит время от Print() до второго сообщения в цепочке из четырех сообщений "order sell market --- order was opened", а все они выводятся транзакционно после вызова OrderSend().


Ну тогда посчитай сколько времени тратится на Print()

uint start = GetTickCount();
Print("Create sell with volume: ", DoubleToStr(volume, 2), ", price: ", DoubleToStr(price, Digits));
Print(GetTickCount() - start);
Bicus
2396
Bicus 2014.04.05 04:58  
nevmerzhitsky:

Я спрашиваю обо времени между Print и первым сообщением после вызова OrderSend(). Если судить по текусту этого сообщения - "order sell market 0.50 EURUSDp sl: 0.00000 tp: 0.00000" -, то на сервер ещё ничего не отправлялось, т.е. 234 ms теряются на стороне клиента.

Как это не отправлялось? А что по-вашему делает OrderSend?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий