Как выбрать ордер по magic?

 
Как выбрать ордер по magic?

ticket=OrderSend(Symbol(),OP_SELLLIMIT,0.39,pricethirteenSell+4400*Point,0,0,0,"Order",12345,0,CLR_NONE);

и удалить по magic?
 
перебираешь все ордера и выделяешь по позиции, попутно сравнивая их магики с искомым, как только находишь, на нем и останавливаешь(он уже будет выбран). Сразу и удалить сможешь, запросив тикет выбранного ордера
 
Scripter:
Как выбрать ордер по magic?


и удалить по magic?
void CloseAllOrders()
{
   for (int k=OrdersTotal()-1;k>=0;k--)
   {
      RefreshRates();
      if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true&&OrderMagicNumber()==MAGIK)
      {
         int cmd=OrderType();
         if(cmd>1)
         {
            OrderDelete(OrderTicket());
         }
         if (cmd==OP_BUY)
         {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);
         }
         if (cmd==OP_SELL)
         {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);  
         }
      }
   }
}
 
sanyooooook:



спасибо буду пробовать внедрить код.
 

Здравствуйте. Есть проблемка небольшая. Пробовал прикрутить данный фрагмент кода к своему случаю, но что-то никак не хочет работать. Есть 2 противоположно направленных отложенных ордера, у каждого свои TP,  но если открылись оба, то как убрать TP с них чтоб получился лок без TP и SL ? Пробовал сделать как в коде приведенном ниже, но не работает. В старой версии компилятора я использовал готовые шаблоны с фкнуциями , которые проверяли есть ли бай, есть ли селл, есть ли отложка и присваивали переменным какие-то значения и потом использовал эти переменные дальше в коде, в новом компиляторе такой вариант не проходит , ищу новое решение такой задачи. Подводя итог , как из списка открытых и отложенных ордеров выбрать несколько, которые нужно изменить, если соблюдаются определенные условия, в данном конкретном случае условие такое что нужно выбрать 2 сработавших разнонаправленных ордера убрать у них TP.

Причем желательно чтоб проверка была не только когда tip==2 а когда tip==3 и  tip==4 тоже, так как кроме открытого лока могут присутствовать еще отложенные ордера, соответственно одновременно может быть от 1 до 4 типов ордеров из которых нужно выбрать только 2 открытых противоположно направленных

for(int k=OrdersTotal()-1;k>=0;k--)
     {
      RefreshRates();
      if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
        {
         int tip=OrderType();
         if(tip==2)
           {
            if(tip==OP_BUY)
              {
               bool check=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,clrNONE);
              }
            if(tip==OP_SELL )
              {
               bool check=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,clrNONE);
              }
           }
        }
     }

 
Игорь:

Здравствуйте. Есть проблемка небольшая. Пробовал прикрутить данный фрагмент кода к своему случаю, но что-то никак не хочет работать. Есть 2 противоположно направленных отложенных ордера, у каждого свои TP,  но если открылись оба, то как убрать TP с них чтоб получился лок без TP и SL ? Пробовал сделать как в коде приведенном ниже, но не работает. В старой версии компилятора я использовал готовые шаблоны с фкнуциями , которые проверяли есть ли бай, есть ли селл, есть ли отложка и присваивали переменным какие-то значения и потом использовал эти переменные дальше в коде, в новом компиляторе такой вариант не проходит , ищу новое решение такой задачи. Подводя итог , как из списка открытых и отложенных ордеров выбрать несколько, которые нужно изменить, если соблюдаются определенные условия, в данном конкретном случае условие такое что нужно выбрать 2 сработавших разнонаправленных ордера


и убрать у них TP

for(int k=OrdersTotal()-1;k>=0;k--)
     {
      RefreshRates();
      if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
        {
         int tip=OrderType();
         if(tip>1)
           {
            if(tip==OP_BUY)
              {
               bool check=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,clrNONE);
              }
            if(tip==OP_SELL )
              {
               bool check=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,clrNONE);
              }
           }
        }
     }


Если почитаешь документацию, то поймёшь что типы > 1 это отложенные ордера

OP_BUY

0

Покупка

OP_SELL

1

Продажа

OP_BUYLIMIT

2

Отложенный ордер BUY LIMIT

OP_SELLLIMIT

3

Отложенный ордер SELL LIMIT

OP_BUYSTOP

4

Отложенный ордер BUY STOP

OP_SELLSTOP

5

Отложенный ордер SELL STOP


И пользуйся кнопкой SRC при вставки кода. Расположена чуть выше окна ввода текста.

Свойства ордеров - Торговые константы - Стандартные константы, перечисления и структуры - Справочник MQL4
Свойства ордеров - Торговые константы - Стандартные константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Свойства ордеров - Торговые константы - Стандартные константы, перечисления и структуры - Справочник MQL4
 
Alexey Viktorov:

Если почитаешь документацию, то поймёшь что типы > 1 это отложенные ордера

OP_BUY

0

Покупка

OP_SELL

1

Продажа

OP_BUYLIMIT

2

Отложенный ордер BUY LIMIT

OP_SELLLIMIT

3

Отложенный ордер SELL LIMIT

OP_BUYSTOP

4

Отложенный ордер BUY STOP

OP_SELLSTOP

5

Отложенный ордер SELL STOP


И пользуйся кнопкой SRC при вставки кода. Расположена чуть выше окна ввода текста.

Ах вот оно что ) ясно, но все-равно вопрос остается в силе, там сверху подредактировал сообщение, 3 дня пытаюсь понять как сделать такую выборку, но никак не выходит
 
другми словами, как одновременно проверить есть ли и бай и селл и только если есть оба, то менять что-то?
 
Игорь:
Ах вот оно что ) ясно, но все-равно вопрос остается в силе, там сверху подредактировал сообщение, 3 дня пытаюсь понять как сделать такую выборку, но никак не выходит

Может поможет, здесь есть всё, ну или почти всё

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
наверно нужно что-то типа условия  if(tip==0 && tip==1)  , но почему-то так тоже не работает
 
Vitaly Muzichenko:

Может поможет, здесь есть всё, ну или почти всё

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