Как зацепится за стоплосс?

 

Есть OrderSend , у него есть переменная стоплосс, надо от этого стоплосс производить расчета.

За цену открытия зацепится получилось, а за стоплосс как? Как узнать значение стоплосс когда была произведена покупка, в print выбивает постоянно разные значения.

StopLossLevel = Bid - StopLoss*Point;


ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

if(OrderSelect(ticket, SELECT_BY_POS)==true){

double num = OrderOpenPrice()+ 2*Point;   // цена покупки

}

 
OrderStopLoss()
 
luxerman:

Есть OrderSend , у него есть переменная стоплосс, надо от этого стоплосс производить расчета.

За цену открытия зацепится получилось, а за стоплосс как? Как узнать значение стоплосс когда была произведена покупка, в print выбивает постоянно разные значения.

StopLossLevel = Bid - StopLoss*Point;


ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

if(OrderSelect(ticket, SELECT_BY_POS)==true){

double num = OrderOpenPrice()+ 2*Point;   // цена покупки

}

Кусочек из справки по OrderSelect:

SELECT_BY_POS - в параметре index передается порядковый номер ордера в списке,
SELECT_BY_TICKET - в параметре index передается номер тикета.

навевает мысль о том, что стоило бы заменить SELECT_BY_POS на SELECT_BY_TICKET.

Но это не все. После "ticket = ..." надежнее подождать, когда обновится список открытых и отложенных ордеров, с которым работает советник. То есть в терминал, а затем и в экземпляр памяти этого советника придет коррекция списка от сервера. Например, так:

if (ticket < 0) {сообщение с GetLastError() и выход по return}

if (!OrderSelect(ticket, SELECT_BY_TICKET)) Sleep (200);

if(OrderSelect(ticket, SELECT_BY_TICKET)==true) { ... дальше как было с учетом предыдущего сообщения об OrderStopLoss()}