Как цену открытия ордера записать в переменную?

 
Как записать в переменную цену открытия первого ордера?

ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,5,0,0,"OrderOpenOne",14774,0,CLR_NONE)

 
https://docs.mql4.com/ru/trading/OrderOpenPrice
 
Scripter:
Как записать в переменную цену открытия первого ордера?



   int ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,5,0,0,"OrderOpenOne",14774,0,CLR_NONE);
OrderSelect(ticket, SELECT_BY_TICKET );
double OpenPrice=OrderOpenPrice();

Можно и так, но нужно добавить контроль.

Открылась ли позиция, выбралась ли позиция

 
Vinin:

Можно и так, но нужно добавить контроль.

Открылась ли позиция, выбралась ли позиция

Кто-то писал, что что между открытием позиции и её выбором паузу надо делать, т.к. она не сразу попадает в список.
 
int ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,5,0,0,"OrderOpenOne",14774,0,CLR_NONE);
//OrderSelect(ticket, SELECT_BY_TICKET );
double OpenPrice=Bid;
 
sanyooooook:

Для тестера сгодится, для онлайна - НЕТ однозначно. После открытия ордера Bid мог уйти незнамо куда например если ордер открывался несколько десятков секунд или даже минут. А если он вообще не открылся, а значение цены переменной присвоено?
 
goldtrader:
Кто-то писал, что что между открытием позиции и её выбором паузу надо делать, т.к. она не сразу попадает в список.
Может просто RefreshRates?
 

Последняя известная цена покупки (предложение на покупку) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().

Переменная Bid обновляется с приходом тика

ЗЫ: код программы выполняется, если отправка ордера не завершена и пришел новый тик?

 
TheXpert:
Может просто RefreshRates?
Лучше сделать выбор позииции пока не выберется, если после нужно будет работать с этой позицией.
 
goldtrader:
Кто-то писал, что что между открытием позиции и её выбором паузу надо делать, т.к. она не сразу попадает в список.
Это редкий случай и его надежного решения на MQL4 нет, т.к. отсутствуют понятие событий. Но этот редкий случай почти для всех MT4 не актуален, т.к. почти никакой MT4 не реализован асинхронно. Дожидаться ответа стоит в случае асинхронной обработки торговых приказов: MT5, JForex, FIX и т.д.
 

Вот нашёл, тут правда про закрытие ордеров, но суть думаю та же:

7283
Integer 02.12.2009 00:36
keekkenen писал(а) >>

уточни про его еще невозможно выделить и получить по нему данные

что значит еще невозможно выраженное во времени ? должно быть это ограниченно тиком, потому что не замечал проблем при отслеживании пар ордеров: рыночный - отложенный, рыночный отработал по стопу, тут же (при появлении нового тика скорее всего) оперируем отложенный..

По времени - меньше 0.1 секнды.

Если сделать так:

if(OrderClose(Ticket...)){
   OrderSelect(Ticket...);
}

то ордер не получится выделить. Sleep(100) - помогает. Совсем недавно поднималась эта тема.

Если сработка стоплосс/тейкпрофит, кто его знает, как совпадет с тиком по времени. Точнее, понятно, что совпадет, но не наблюдал есть ли в этом случае проблемы, всегда делаю проверу выделился ли ордер.


Причина обращения: