Помоготе со скриптом

 
Всем трейдерам привет, вот написал небольшой скрипт для закрытия отложенного ордера 
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
extern int TicketKurrent=0;//текущий тикет
extern int Ticket1=0;//отложенный тикет
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   
   
  if(OrderSelect(TicketKurrent/*lastorder*/, SELECT_BY_TICKET,MODE_HISTORY )==true) //Выбераю ордер из истории по номеру тикета
    { 
    
    
     if(OrderClosePrice() <= (OrderTakeProfit() + (30*Point)))//SELLS
     {
     bool chek=OrderDelete(Ticket1);
     }//-- удаление ордера по тикету
      
     }
    
  
  }
//+------------------------------------------------------------------+

Условие простое.

вводятся 2 тикета. Первый ордер открытой позиции 2 тикет отложенного ордера. Из истории выбирается ордер каждый тик и если цена закрытия меньше или равна  тейкпрофиту -30 пунктов то снимается отложенный ордер.

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

Что понимаю не так?

 
Yevheniy Kopanitskyy:
Всем трейдерам привет, вот написал небольшой скрипт для закрытия отложенного ордера 

Условие простое.

вводятся 2 тикета. Первый ордер открытой позиции 2 тикет отложенного ордера. Из истории выбирается ордер каждый тик и если цена закрытия меньше или равна  тейкпрофиту -30 пунктов то снимается отложенный ордер.

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

Что понимаю не так?

Выбор ордера по тикету не зависит от места его нахождения, в истории или в рынке. В этом случае надо проверять дополнительно время закрытия ордера. Если == 0, то ордер в рынке.

 
Alexey Viktorov:

Выбор ордера по тикету не зависит от места его нахождения, в истории или в рынке. В этом случае надо проверять дополнительно время закрытия ордера. Если == 0, то ордер в рынке.


Спасибо за подсказку
 

Алексей спасибо. Вот на базе выше сказанного написал вот этот блок. Работает безотказно.

//--------------------------проверка на наличир Отложки на ТП 
          if(ticketBuy1>0  /*&& BuyCountStop()==Buy_Lots*/)// ордер на покупку открыт
            { 
             if(OrderSelect(ticketBuy1, SELECT_BY_TICKET)==true && OrderCloseTime()!=0) //Выбераю ордер из истории по номеру тикета
               { 
                //if(OrderClosePrice() >= (OrderTakeProfit() - (10*Point)))
                if(OrderOpenPrice() > OrderTakeProfit() /*- (10*Point))*/)
                  {
                   bool chek=OrderDelete(ticketSELL2);// Udalenie otloxennogo ordera
                   Comment(chek," ",GetLastError());
                   if(chek) {ticketBuy1=0;ticketSELL2=0;}
                   
                  }//-- удаление ордера по тикету
               }
            }

//------------------------------
if(ticketSell1>0  /*&& SellCountStop()==Sell_Lots*/)// ордер на покупку открыт
            { 
             if(OrderSelect(ticketSell1, SELECT_BY_TICKET)==true && OrderCloseTime()!=0) //Выбераю ордер из истории по номеру тикета
               { 
                //if(OrderClosePrice() >= (OrderTakeProfit() - (10*Point)))
                if(OrderOpenPrice() < OrderTakeProfit() /*- (10*Point))*/)
                  {
                   bool chek=OrderDelete(ticketBuy2);// Udalenie otloxennogo ordera
                   Comment(chek," ",GetLastError());
                   if(chek) {ticketBuy2=0;ticketSell1=0;}
                   
                  }//-- удаление ордера по тикету
               }
            }


//------------------------------


Теперь мне нужно понять как на базе данного модуля можно открывать позицию после закрытия отложенного ордера.

Суть в следующем.

Если отложенный ордер небыл снят а начал торговатся то установить ещо один отложенный ордер.

С установлением отложенных ордеров проблем нет. Хочю понять условие при котором можно проверить торгуется ли отложенный ордер или он был снят

 
Yevheniy Kopanitskyy:

Алексей спасибо. Вот на базе выше сказанного написал вот этот блок. Работает безотказно.


Теперь мне нужно понять как на базе данного модуля можно открывать позицию после закрытия отложенного ордера.

Суть в следующем.

Если отложенный ордер небыл снят а начал торговатся то установить ещо один отложенный ордер.

С установлением отложенных ордеров проблем нет. Хочю понять условие при котором можно проверить торгуется ли отложенный ордер или он был снят

Просто проверить тип ордера.

 
Alexey Viktorov:

Просто проверить тип ордера.

У меня в наличии есть тикет отложенного ордера. Я его могу проверитя Но не знаю по какому признаку определить торгуется ли ордер или нет

 

После того как ордер выбран (OrderSelect) определите его тип, вызвав OrderType(). Далее в зависимости от того какой тип возвратил OrderType() :

если OrderType() возвратил тип отложенного ордера (и далее ваши условия) - удаляете отложку,

если OrderType() возвратил тип рыночного  (и далее ваши условия) - открываете нужную позицию.

 
Sergey Kolemanov:

После того как ордер выбран (OrderSelect) определите его тип, вызвав OrderType(). Далее в зависимости от того какой тип возвратил OrderType() :

если OrderType() возвратил тип отложенного ордера (и далее ваши условия) - удаляете отложку,

если OrderType() возвратил тип рыночного  (и далее ваши условия) - открываете нужную позицию.

Сергей спасибо за разьяснения, буду писать сейчас блок.
 
Yevheniy Kopanitskyy:
Сергей спасибо за разьяснения, буду писать сейчас блок.

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

Причина обращения: