OnTradeTransaction - страница 5

 
Anatoli Kazharski:
Да, примерно так. Просто не тестировал так пока.

Попробуйте...

Добавлено

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
    if(trans.symbol==Symbol())
    {
      if(проверяем магик)
      {    
        //Сработал SL или TP
      }
    }
  }
break;


 

 
prostotrader:

А чем не устроил этот метод?

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
   //Сработал SL или TP
  }
break;

А тем, что последние известные SL и TP позиции могут не совпасть с ценой сделки и сравнивать будет не с чем и не возможно будет определить что именно сработало!

А Вы я посмотрю своими кодами делится не любите зато с удовольствием смотрите чужие...  

Вот это будет работать не всегда:

int    G_LastTicket  = 0;   //Последний известный тикет
double G_LastSLlevel = 0.0; //Последний известный уровень SL
double G_LastTPlevel = 0.0; //Последний известный уровень TP
//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
  {
    if(PositionsAny (G_Symbol))
    {
      G_LastSLlevel = GetSLlevel (G_Symbol);
      G_LastTPlevel = GetTPlevel (G_Symbol);
      Print ("SLlevel: " + G_LastSLlevel);
      Print ("TPlevel: " + G_LastTPlevel);
    }
    
    if(trans.deal != G_LastTicket)
    {
      if(trans.price == G_LastSLlevel)
        Print ("Сработал SL");
        
      if(trans.price == G_LastTPlevel)
        Print ("Сработал TP");
    }
  }
}


 

 
prostotrader:
Попробуйте...
Как-нибудь попробую конечно. Спасибо. Сейчас другими задачами занят. 
 
prostotrader:

А чем не устроил этот метод?

Надо хранить my_order_ticket
 
fxsaber:
Надо хранить my_order_ticket

Вы вообще в курсе о чём речь?

my_order_ticket - этот ордер имеет место жить, если Вы во время жизни позиции

дополнительно оперируете ордерами (Вы их обязаны хранить). 

 
fxsaber:
Надо хранить my_order_ticket
И не только.
 
Anatoli Kazharski:
Как-нибудь попробую конечно. Спасибо. Сейчас другими задачами занят. 
Удачного кода!
 

Да, фактически предлагается самому поддерживать и хранить актуальное окружение, сравнивая его с тем, что выдает OnTradeTransaction.

Это не решение. 

 
fxsaber:

Да, фактически предлагается самому поддерживать и хранить актуальное окружение, сравнивая его с тем, что выдает OnTradeTransaction.

Это не решение. 

Вы просто не внимательно следите за топиком. :)

Изначально топик-стартер писал:

"Как узнать в OnTradeTransaction () что сработал SL/TP?

Какое решение должно быть?

Можно вовсе ничего не помнить и не проверять, кроме самой позиции, при условии, что

Вы не оперировали другими ордерами

 

case TRADE_TRANSACTION_DEAL_ADD:
  if (!PositionSelect(Symbol())
  {
   //Сработал SL или TP

  }
break;
 
prostotrader:

Вы просто не внимательно следите за топиком. :)

Изначально топик-стартер писал:

Это Вы весьма невнимательны, я не топик-стартер.

Вы бы ещё такой код показали:

//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  
}  

Ну а что такого - кому надо допишет сам, не нравится - есть джоба! Так что ли?

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