Как проверить определенный ордер закрытый по стопу или же еще жив?

 
tick=OrderSend(Symbol(),OP_SELL,lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"MACD trade",123457,0,Red);
if (tick>=1)

{

//Вроде как здесь идет проверка и если OrderSelect не получиться то программа должна остановиться так? а то он все равно продолжает и пытается закрыть ордера закрытые по стопу и вылазит у меня ошибка 1408

if(OrderSelect(tick-1,SELECT_BY_TICKET,MODE_TRADES)==true)
{
if(OrderType()==OP_BUY)//Знаю что здесь нужно добавить какое-то условие вот только какое не знаю(((
{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);


В коде я при селе пытаюсь закрыть предыдущий бай, вот только не которые ордера уже закрываются по стопу а OrderClose пытается закрыть их повторно и вот я не пойму как отфильтровать ордера которые уже закрыты???

 
dPositive >>:
if(OrderSelect(tick-1,SELECT_BY_TICKET,MODE_TRADES)==true)

1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.

2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.

3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.

- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)

 

В массив заносите и проверяйте, сравнивайте... ордера

 
Amba >>:

1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.

2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.

3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.

- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)


БОЛЬШОЕ БОЛЬШОООЕ СПАСИБО!!!)

 
Amba >>:

1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.

2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.

3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.

- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)


Amba я вот тут глянул в код, и оказывается tick я сам создавал

int start();

{

int tick;

}

И вообще я могу ее переименовать и тоже самое будет, как надо сделать чтобы на реале работала норм? (Заранее СПАСИБО)

 
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.

Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.


Понятно, что tick Вы объявили. Иначе не компилилось бы. Другое дело, что значение этой переменной не Вы устанавливаете, а торговый сервер. С номером тикета нельзя оперировать математически. Почувствуйте разницу между позицией ордера в списке открытых (закрытых) ордеров и его уникальным номером. Это все равно что позиция сторублевки в бумажнике по порядку и серийного номера банкноты. Извиняюсь за пример, не знаю как нагляднее...

Советую:

скачать библиотеку от KimIV b-positions.mqh (http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=63)

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

----

ЗЫ. b-positions.mqh -> .experts\\include

в коде эксперта:

#include <b-positions.mqh>


tick=OrderSend(Symbol(),OP_SELL,lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"MACD trade",123457,0,Red);
if (tick>=1)

{

ClosePositions(NULL, OP_BUY, MagicNum)


и ВСЁ. команда закроет все открытые позы BUY.

 
Amba >>:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.

Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.


Понятно, что tick Вы объявили. Иначе не компилилось бы. Другое дело, что значение этой переменной не Вы устанавливаете, а торговый сервер. С номером тикета нельзя оперировать математически. Почувствуйте разницу между позицией ордера в списке открытых (закрытых) ордеров и его уникальным номером. Это все равно что позиция сторублевки в бумажнике по порядку и серийного номера банкноты. Извиняюсь за пример, не знаю как нагляднее...

Советую:

скачать библиотеку от KimIV b-positions.mqh (http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=63)

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

Отличный пример;) я все понял)