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

 

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

Изучая логи работы советника с удивление обнаружил внушительный лаг между вызовом 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:
он не на клиентской,а на серверной
Сомневаюсь, что это связанно с сервером, потому что сообщение "request was accepted by server" в логе появляется уже после обсуждаемого здесь события.
 
nevmerzhitsky:

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

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

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

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

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

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

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


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

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

 
nevmerzhitsky:

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

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

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

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

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

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

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

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

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

 
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().
 
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);
 
nevmerzhitsky:

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

Как это не отправлялось? А что по-вашему делает OrderSend?
Причина обращения: