Сработал отложник

 

Помогите пожалуйста! Выставляю отложник например BUYSTOP, он срабатывает и становится BUY.

Вопрос: как с помощью ticket данного ордера определить сработал он или ещё нет?

Например:

int TICKET=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask,4,0,0,"",0,0,0); // Открываем OP_BUYSTOP

if (OrderSelect(TICKET,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType()); // проверяем ордер по тикету

У меня получается что после срабатывания отложника по тикету он остаётся BUYSTOP. Где ошибка?

Может быть есть другой способ не перебирая все ордера контролировать момент срабатывания конкретного ордера.

 
KSA4:

Помогите пожалуйста! Выставляю отложник например BUYSTOP, он срабатывает и становится BUY.

Вопрос: как с помощью ticket данного ордера определить сработал он или ещё нет?

Например:

int TICKET=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask,4,0,0,"",0,0,0); // Открываем OP_BUYSTOP

if (OrderSelect(TICKET,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType()); // проверяем ордер по тикету

У меня получается что после срабатывания отложника по тикету он остаётся BUYSTOP. Где ошибка?

Может быть есть другой способ не перебирая все ордера контролировать момент срабатывания конкретного ордера.

есть хорошая статья

https://www.mql5.com/ru/articles/1390

/ Sobytiya_2.mq4   
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Sobytiya_2()
   {
//============================== Поиск ордеров, поменявших тип ====
   for(int oo=1;oo<=Mas_Ord_Old[0][0]; oo++)               
// Пройдёмся по старому массиву
      {
      for (int i=1;i<=Mas_Ord_Tek[0][0];i++)              
// Поищем ордер в текущ. массиве 
         {
         if (Mas_Ord_Tek[i][4] == Mas_Ord_Old[oo][4] &&    
// Если в старом был такой же ордер но другого типа, то:
             Mas_Ord_Tek[i][6] != Mas_Ord_Old[oo][6])      
            {                                                  // Отложенный стал явным
            Alert("Трансформировался ордер",Mas_Ord_Tek[i][4]);
// Сообщим текстом на экран
            PlaySound("Transform.wav" );                       
// И музычку
            }
         }
      }
//=================================================================
   return();
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

к сожалению в MT нет события которое скажем сработает


1-при закрытии ордера ( например с другого терминала )

2 при достижении TP или SL


а так же при переходе состояния отложенного в сработавший


это надо отслеживать самостоятельно

---

усложняеется это тем что при отложенниках OrderTotal() не меняет своего значения

 
YuraZ:
KSA4:

Помогите пожалуйста! Выставляю отложник например BUYSTOP, он срабатывает и становится BUY.

Вопрос: как с помощью ticket данного ордера определить сработал он или ещё нет?

Например:

int TICKET=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask,4,0,0,"",0,0,0); // Открываем OP_BUYSTOP

if (OrderSelect(TICKET,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType()); // проверяем ордер по тикету

У меня получается что после срабатывания отложника по тикету он остаётся BUYSTOP. Где ошибка?

Может быть есть другой способ не перебирая все ордера контролировать момент срабатывания конкретного ордера.

есть хорошая статья

https://www.mql5.com/ru/articles/1390

/ Sobytiya_2.mq4   
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Sobytiya_2()
   {
//============================== Поиск ордеров, поменявших тип ====
   for(int oo=1;oo<=Mas_Ord_Old[0][0]; oo++)               
// Пройдёмся по старому массиву
      {
      for (int i=1;i<=Mas_Ord_Tek[0][0];i++)              
// Поищем ордер в текущ. массиве 
         {
         if (Mas_Ord_Tek[i][4] == Mas_Ord_Old[oo][4] &&    
// Если в старом был такой же ордер но другого типа, то:
             Mas_Ord_Tek[i][6] != Mas_Ord_Old[oo][6])      
            {                                                  // Отложенный стал явным
            Alert("Трансформировался ордер",Mas_Ord_Tek[i][4]);
// Сообщим текстом на экран
            PlaySound("Transform.wav" );                       
// И музычку
            }
         }
      }
//=================================================================
   return();
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

к сожалению в MT нет события которое скажем сработает

1-при закрытии ордера ( например с другого терминала )

2 при достижении TP или SL


а так же при переходе состояния отложенного в сработавший

это надо отслеживать самостоятельно

---

усложняеется это тем что при отложенниках OrderTotal() не меняет своего значения

Спасибо за ссылку, но может быть можно как нибуть попроще?

У меня открыты несколько ордеров. Контролируется только один конкретный ордер, а не 30--100 как в ссылке.

Возможно-ли в принципе контролировать ордер по его тикету?

 
KSA4:
YuraZ:
KSA4:

Помогите пожалуйста! Выставляю отложник например BUYSTOP, он срабатывает и становится BUY.

Вопрос: как с помощью ticket данного ордера определить сработал он или ещё нет?

Например:

int TICKET=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask,4,0,0,"",0,0,0); // Открываем OP_BUYSTOP

if (OrderSelect(TICKET,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType()); // проверяем ордер по тикету

У меня получается что после срабатывания отложника по тикету он остаётся BUYSTOP. Где ошибка?

Может быть есть другой способ не перебирая все ордера контролировать момент срабатывания конкретного ордера.

есть хорошая статья

https://www.mql5.com/ru/articles/1390

/ Sobytiya_2.mq4   
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Sobytiya_2()
   {
//============================== Поиск ордеров, поменявших тип ====
   for(int oo=1;oo<=Mas_Ord_Old[0][0]; oo++)               
// Пройдёмся по старому массиву
      {
      for (int i=1;i<=Mas_Ord_Tek[0][0];i++)              
// Поищем ордер в текущ. массиве 
         {
         if (Mas_Ord_Tek[i][4] == Mas_Ord_Old[oo][4] &&    
// Если в старом был такой же ордер но другого типа, то:
             Mas_Ord_Tek[i][6] != Mas_Ord_Old[oo][6])      
            {                                                  // Отложенный стал явным
            Alert("Трансформировался ордер",Mas_Ord_Tek[i][4]);
// Сообщим текстом на экран
            PlaySound("Transform.wav" );                       
// И музычку
            }
         }
      }
//=================================================================
   return();
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

к сожалению в MT нет события которое скажем сработает

1-при закрытии ордера ( например с другого терминала )

2 при достижении TP или SL


а так же при переходе состояния отложенного в сработавший

это надо отслеживать самостоятельно

---

усложняеется это тем что при отложенниках OrderTotal() не меняет своего значения

Спасибо за ссылку, но может быть можно как нибуть попроще?

У меня открыты несколько ордеров. Контролируется только один конкретный ордер, а не 30--100 как в ссылке.

Возможно-ли в принципе контролировать ордер по его тикету?

угу

если четко есть тикет - то можно

что то типа проверки


//имеем тикет ТИКЕТ нужного нам отложенного ордера

if ( OrderSelect ( ТИКЕТ, SELECT_BY_TICKET,MODE_TRADE) == true )

{

if ( OrderType () == OP_BUY ) // если он BUY

{

/// ураааа сработал

}

if ( OrderType () == OP_SELL ) // если он SELL

{

/// ураааа сработал

}


}

 

Я тоже так думал, но после срабатывания BUYSTOP превращается в BUY, а при обращении к тикету

через OrderSelect(), OrderType() говорит что ордер как был OP_BUYSTOP так и остался.

 
KSA4:

Я тоже так думал, но после срабатывания BUYSTOP превращается в BUY, а при обращении к тикету

через OrderSelect(), OrderType() говорит что ордер как был OP_BUYSTOP так и остался.

не может быть... приведите принты, подтверждающие Ваши слова

 
KSA4:

Я тоже так думал, но после срабатывания BUYSTOP превращается в BUY, а при обращении к тикету

через OrderSelect(), OrderType() говорит что ордер как был OP_BUYSTOP так и остался.

Приведите код...

Вы где то ошиблись...

 

/+------------------------------------------------------------------+
//| $.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"
/*
Открываем по одному ордеру OP_SELLSTOP и OP_BUYSTOP.
При срабатывании любого из них печатаем Print("OrderType ",OrderType());
но ордер срабатывает а принта нет.Почему ?

*/
int opnbuy=0;int opnsell=0;

int start()
{
if (opnbuy==0)
{
int TICKET_SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid-2*Point,4,0,0,"",0,0,0);
if(TICKET_SELLSTOP>0)
{
if(OrderSelect(TICKET_SELLSTOP,SELECT_BY_TICKET,MODE_TRADES)==true)
{
Print("Открыт ",TICKET_SELLSTOP," ",OrderType()," ",OrderOpenPrice());
opnbuy=1;
}
else Print(OrderType()," не открыт, ошибка: ",GetLastError());
}
}

if (opnsell==0)
{
int TICKET_BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+2*Point,4,0,0,"",0,0,0);
if(TICKET_BUYSTOP>0)
{
if(OrderSelect(TICKET_BUYSTOP,SELECT_BY_TICKET,MODE_TRADES)==true)
{
Print("Открыт ",TICKET_BUYSTOP," ",OrderType()," ",OrderOpenPrice());
opnsell=1;
}
else Print(OrderType()," не открыт, ошибка: ",GetLastError());
}
}

if (OrderSelect(TICKET_SELLSTOP,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType());
if (OrderSelect(TICKET_BUYSTOP,SELECT_BY_TICKET)==true && OrderType()<2)Print("OrderType ",OrderType());

return(0);
}

 

Сергей, для вставки кода есть специальная кнопка

 

Учту. А что скажете по коду? Это только пример, но я хочу понять в чём ошибка.

 
KSA4:

Учту. А что скажете по коду? Это только пример, но я хочу понять в чём ошибка.

Видимо ошибка в строках:

if(OrderSelect(TICKET_SELLSTOP,SELECT_BY_TICKET,MODE_TRADES)==true)
и
if(OrderSelect(TICKET_BUYSTOP,SELECT_BY_TICKET,MODE_TRADES)==true)
bool OrderSelect( int index, int select, int pool=MODE_TRADES)
Параметры:
index - Позиция ордера или номер ордера в зависимости от второго параметра.
select - Флаг способа выбора. Mожет быть одним из следующих величин:
SELECT_BY_POS - в параметре index передается порядковый номер позиции в списке,
SELECT_BY_TICKET - в параметре index передается номер тикета.
pool -

Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин:
MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров,
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.

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