Вопрос по OrderCloseBy

 

Вот кусок кода: Переварачивает позицию.

int start()
{

if(OrdersTotal()==1)
{

OrderSelect(NULL, SELECT_BY_POS, MODE_TRADES);

{
if(OrderType()==OP_SELL)
{

OrderClose(OrderTicket(), lots, Ask, 3,Green); // ** Эти две строки надо преобразовать в OrderCloseBy
OrderSend(Symbol(), OP_BUY, lots, Ask, 3,Stoploss, Takeprofit, "BUY", 16384, 0,Green);
}
else
{

OrderClose(OrderTicket(), lots, Bid, 3,Violet); // ** Эти две строки надо преобразовать в OrderCloseBy
OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Stoploss, Takeprofit, "SELL", 16384, 0,Violet);
}


return(0);
}






return(0);
}
Соответственно все условия входа выхода и переменные убраны. ..

Системка работает одновременно только с одной открытой позициет, И 2 открытые не допустимы...
Хотелось бы все это сделать с OrderCloseBy. Но штука такая, что у меня в программе нет парамета OrderTicket(), тоесть ваще номера открытых позиций не обсчитывается а для OrderCloseBy формат такой:
OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE),
Как сделать так ,чтобы он брал:
"int ticket" (Уникальный порядковый номер закрываемого ордера. ) прям с открытой позиции, которая вот-вот закроется,
а к "nt opposite"(Уникальный порядковый номер противоположного ордера. ) тупо прибавлял 1.
Я пробовал чтото делать но он пишет ошибки такого плана: invalid ticket for OrderCloseBy function, или типа неправельный параметр для "int ticket" или "int opposite"...

 

По краткому куску кода уже много вопросов. Опубликуйте полный код, пожалуйста.

 
Почти полный код выше...
 
Необходимо из всех открытых позиций (пройдясь в цикле) найти противоположные позиции по одному символу, запомнить их тикеты (выбрав через OrderSelect), а потом уже использовать эти номера тикетов для CloseBy.
 
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
 
Zuza писал (а):
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???
 
micral:
Zuza:
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???
Можно схлопнуть две противоположные позиции с экономией одного спреда. Если закрывать позиции по одиночке, то потратите 2 спреда.
В этом главное преимущество операции Close by.
 
OrderCloseBy(order_id,opposite_id); вот ваш код, но как и все наверное хотели знать
какие могут быть значения кроме "opposite_id". к примеру "0"????.
 
Merin095:
OrderCloseBy(order_id,opposite_id); вот ваш код, но как и все наверное хотели знать
какие могут быть значения кроме "opposite_id". к примеру "0"????.
Можно указать только два номера тикета с противоположными (BUY и SELL) позициями.
Например, есть:
#10 BUY 1.5 EURUSD at 1.2356
#22 SELL 1.5 EURUSD at 1.2412

Если хотите эти позиции закрыть одной командой, то вызываете OrderCloseBy(10,22);
 
Честно бьюсь понять как сделать чтоб заработал OrderCloseBy "с ваших подсказок", но что-то там очень серьезно зашифровано, извените но ученой степени нет.
неплохо было-бы посмотреть просто сделанного маленького советника, это было-бы наверно всем понетно, а то досих пор не могу вехать что-же это за order_id,opposite_id и с чем его едят.
Спасибо умнейшие модераторы.
 
Перевернуться? Это значит закрыть один ордер и открыть противоположный?
Никак. То есть надо просто закрыть один ордер и открыть противоположный.

А OrderCloseBy используется для одновременного закрытия 2х ордеров, при этом экономится один спред.
Нужно программно пройтись по терминалу, запомнить все номера ордеров и их характеристики, выбрать номер основного ордера, подобрать под него жалаемый (из имеющихся) встречный ордер и его-то номер и подставить.

Спасибо SKif смог растолковать.
OrderCloseBy он не переворачивает, он с одного ордера на другой перекидывает слив депозита(другими словами), а не закрывает его и в обратном напровлении открывает новый.
Оченьжаль была бы удобная функция.
Причина обращения: