Открытие локирующего ордера mql4

 

Здравствуйте, с наступающими праздниками!

Подскажите, как решить задачу. Вручную выставляется лимитный ордер, робот должен выставить один лок со стопом на ордере. При пробое стопа у лока, позиция вновь должна быть залокирована. Как определить, что у ордера нет лока?

void OnTick()
  {
    int Count = 0;
    for(int i = 0; i < OrdersTotal(); i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          {
            if(OrderSymbol() == Symbol() && OrderType() == OP_SELLLIMIT)
              {
                double Price = OrderOpenPrice();
                double Lot = OrderLots();
                Count++;
              }
          }
      }


    if(Price > 0 && нет лока)
      {
        int B = OrderSend(Symbol(),OP_BUYSTOP,Lot,Price+100*Point,0,Price,0,"Comment",0,0,clrNONE);
      }
    if(IsTesting() && OrdersTotal() < 1)
      {
        int S = OrderSend(Symbol(),OP_SELLLIMIT,0.1,Bid+100*Point,0,0,0,"Comment",0,0,clrNONE);
      }
  }

 
sniperprofit:

Здравствуйте, с наступающими праздниками!

Подскажите, как решить задачу. Вручную выставляется лимитный ордер, робот должен выставить один лок со стопом на ордере. При пробое стопа у лока, позиция вновь должна быть залокирована. Как определить, что у ордера нет лока?

Добрый вечер. Нужно сравнить цену ордера со стопами других ордеров. Если есть совпадения - ничего не делаем (лок стоит), если нет - выставляем соответствующий отложенный ордер.
 
Tapochun:
Добрый вечер. Нужно сравнить цену ордера со стопами других ордеров. Если есть совпадения - ничего не делаем (лок стоит), если нет - выставляем соответствующий отложенный ордер.
Спасибо за идею!
 
Еще вариант в комментарии отложенного ордера записывать номер открытого ордера.
 
grizzly_v:
Еще вариант в комментарии отложенного ордера записывать номер открытого ордера.
Спасибо за идею!
 

Примерно так. А куда ставить ордер это уже другая тема.

    input int Magic = 7;
    
    int Total[6];

void OnTick()
{
 f();
  if(Total[OP_BUYSTOP] > Total[OP_SELLSTOP]) // открываем SellStop или Limit
   if(Total[OP_BUYSTOP] < Total[OP_SELLSTOP]) // открываем BuyStop или Limit
}

void f()
{
 int i, type, TotalOpen_ = OrdersTotal();
  ArrayInitialize(Total, 0);
   for(i = 0; i < TotalOpen_; i++)
    {
     if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
      {
        type = OrderType();
        Total[type]++;
      }
    }
}
 
AlexeyVik:

Примерно так. А куда ставить ордер это уже другая тема.

Спасибо, буду пытаться применить!
 
А не проще ли не следить за отложенными ордерами а проверять стоит ли открывать рыночный ордер или нет? 
 
dimeon:
А не проще ли не следить за отложенными ордерами а проверять стоит ли открывать рыночный ордер или нет? 
Открывать стоит, но в зависимости от стратегии торговли локирующие ордера представляют интерес, как альтернатива стоплоссу.
 

Пардон ми бойз,

Локирующий в данном контексте есть реверсивный(противоположный по направлению) отложенный ордер

 
elugovoy:

Пардон ми бойз,

Локирующий в данном контексте есть реверсивный(противоположный по направлению) отложенный ордер

Да, слово lock от "запереть".