Скачать MetaTrader 5

Вопрос по OrderCloseBy

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
zuza
68
zuza  

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

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"...

MetaQuotes
Админ
25320
Renat Fatkhullin  

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

zuza
68
zuza  
Почти полный код выше...
MetaQuotes
Админ
25320
Renat Fatkhullin  
Необходимо из всех открытых позиций (пройдясь в цикле) найти противоположные позиции по одному символу, запомнить их тикеты (выбрав через OrderSelect), а потом уже использовать эти номера тикетов для CloseBy.
zuza
68
zuza  
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Andrey
6
Andrey  
Zuza писал (а):
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???
MetaQuotes
Админ
25320
Renat Fatkhullin  
micral:
Zuza:
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???
Можно схлопнуть две противоположные позиции с экономией одного спреда. Если закрывать позиции по одиночке, то потратите 2 спреда.
В этом главное преимущество операции Close by.
Владимир
28
Владимир  
OrderCloseBy(order_id,opposite_id); вот ваш код, но как и все наверное хотели знать
какие могут быть значения кроме "opposite_id". к примеру "0"????.
MetaQuotes
Админ
25320
Renat Fatkhullin  
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);
Владимир
28
Владимир  
Честно бьюсь понять как сделать чтоб заработал OrderCloseBy "с ваших подсказок", но что-то там очень серьезно зашифровано, извените но ученой степени нет.
неплохо было-бы посмотреть просто сделанного маленького советника, это было-бы наверно всем понетно, а то досих пор не могу вехать что-же это за order_id,opposite_id и с чем его едят.
Спасибо умнейшие модераторы.
Владимир
28
Владимир  
Перевернуться? Это значит закрыть один ордер и открыть противоположный?
Никак. То есть надо просто закрыть один ордер и открыть противоположный.

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

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