OnTradeTransaction - página 5

 
Anatoli Kazharski:
Sim, é mais ou menos isso mesmo. Só que ainda não foi testado dessa forma.

Experimente...

Adicionado por

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

O que há de errado com este método?

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

Porque as últimas posições SL e TP conhecidas podem não coincidir com o preço do negócio e não haverá nada para comparar com ele.

E você não gosta de compartilhar seus códigos, mas olha os dos outros com muito prazer...

Isto nem sempre funcionará:

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:
Experimente...
Vou tentar um dia destes, com certeza. Vou tentar um dia destes. Obrigado. Estou ocupado com outras tarefas no momento.
 
prostotrader:

O que há de errado com este método?

Devo guardarmeu_ticket_de_ordem
 
fxsaber:
Você tem que mantermeu_ticket_de_ordem

Você ao menos sabe do que está falando?

my_order_ticket - este pedido tem um lugar para viver se você tiver

e você é obrigado a mantê-los.

 
fxsaber:
Você tem que armazenarmeu_ticket_de_ordem
Não apenas isso.
 
Anatoli Kazharski:
Vou tentar um dia destes. Obrigado (risos) Estou ocupado com outras tarefas no momento.
Boa sorte com o código!
 
Andrey Dik:
Não apenas isso.

Sim, na verdade é proposto manter e armazenar o próprio ambiente real, comparando-o com o que a OnTradeTransaction produz.

Isto não é uma solução.

 
fxsaber:

Sim, na verdade é proposto manter e armazenar o próprio ambiente real, comparando-o com o que a OnTradeTransaction produz.

Isto não é uma solução.

Você simplesmente não está acompanhando o tópico de perto. :)

O tópico inicial original escreveu:

"Como sei naOnTradeTransaction() que SL/TP desencadeou? "

Qual deve ser a solução?

Você não pode se lembrar ou verificar nada, exceto a posição em si, desde que

Você não operou nenhuma outra ordem

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

  }
break;
 
prostotrader:

Você simplesmente não está acompanhando o tópico de perto. :)

O tópico inicial original escreveu:

Você é o único que está bastante desatento, eu não souo iniciante do tema.

Você também deve mostrar um código como este:

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

Bem, o que está errado - quem precisa, termina ele mesmo, não gosta - há um empregoa! É assim?