Скачать MetaTrader 5

Вопрос по OrderCloseBy

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

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

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
Админ
25027
Renat Fatkhullin 2006.07.13 11:44  

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

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

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

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