MQL4 - automated forex trading   /  

Форум

Вопрос по OrderCloseBy

К списку тем  | 1 2 Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
21
Zuza 13.07.2006 12: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"...

Организуйте багтрекинг и техсаппорт для своей компании

В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем.


avatar
Модератор
3646
Renat 13.07.2006 13:44 

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


avatar
21
Zuza 13.07.2006 14:59 
Почти полный код выше...

avatar
Модератор
3646
Renat 13.07.2006 15:27 
Необходимо из всех открытых позиций (пройдясь в цикле) найти противоположные позиции по одному символу, запомнить их тикеты (выбрав через OrderSelect), а потом уже использовать эти номера тикетов для CloseBy.

avatar
21
Zuza 13.07.2006 18:40 
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)

avatar
5
micral 20.07.2006 15:06 
Zuza писал (а):
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???

avatar
Модератор
3646
Renat 20.07.2006 15:33 
micral писал (а):
Zuza писал (а):
Так понятно, я не верно растолковал OrderCloseBy, я думал что т если есть 1 лот открытый на покупку, то функция эта закрывает его и ставит такойже на продажу... Щас перечитал документацию и понял, что мой замысел лажа)) оставляем код без изменений тада)) Спасибо эа ответ)
Так зачем тогда вообще нужна OrderCloseBy ???
Можно схлопнуть две противоположные позиции с экономией одного спреда. Если закрывать позиции по одиночке, то потратите 2 спреда.
В этом главное преимущество операции Close by.

avatar
22
Merin095 20.08.2006 23:28 
OrderCloseBy(order_id,opposite_id); вот ваш код, но как и все наверное хотели знать
какие могут быть значения кроме "opposite_id". к примеру "0"????.

avatar
Модератор
3646
Renat 21.08.2006 18: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);

avatar
22
Merin095 24.08.2006 15:10 
Честно бьюсь понять как сделать чтоб заработал OrderCloseBy "с ваших подсказок", но что-то там очень серьезно зашифровано, извените но ученой степени нет.
неплохо было-бы посмотреть просто сделанного маленького советника, это было-бы наверно всем понетно, а то досих пор не могу вехать что-же это за order_id,opposite_id и с чем его едят.
Спасибо умнейшие модераторы.

avatar
22
Merin095 24.08.2006 15:56 
Перевернуться? Это значит закрыть один ордер и открыть противоположный?
Никак. То есть надо просто закрыть один ордер и открыть противоположный.

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

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

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