OnTradeTransaction - página 5

 
Anatoli Kazharski:
Sí, así es. Sólo que aún no lo he probado así.

Pruébalo...

Añadido por

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

¿Qué tiene de malo este método?

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

Porque las últimas posiciones conocidas de SL y TP pueden no coincidir con el precio de la operación y no habrá nada con lo que comparar.

Y no te gusta compartir tus códigos, pero miras los de los demás con gran placer...

Esto no siempre 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:
Pruébalo...
Lo probaré algún día, seguro. Gracias. En este momento estoy ocupado con otras tareas.
 
prostotrader:

¿Qué tiene de malo este método?

Debería almacenarmi_boleto_de_pedido
 
fxsaber:
Tienes que guardarmi_orden_ticket

¿Sabes siquiera de qué estás hablando?

my_order_ticket - esta orden tiene un lugar para vivir si tiene

y estás obligado a mantenerlos.

 
fxsaber:
Tienes que almacenarmi_pedido_ticket
Y no sólo eso.
 
Anatoli Kazharski:
Lo probaré algún día. Gracias. En este momento estoy ocupado con otras tareas.
¡Buena suerte con el código!
 
Andrey Dik:
Y no sólo eso.

Sí, en realidad se propone mantener y almacenar el propio entorno, comparándolo con lo que produce OnTradeTransaction.

Esto no es una solución.

 
fxsaber:

Sí, en realidad se propone mantener y almacenar el propio entorno, comparándolo con lo que produce OnTradeTransaction.

Esto no es una solución.

Simplemente no estás siguiendo el tema de cerca. :)

El iniciador del tema original escribió:

"¿Cómo puedo saber enOnTradeTransaction() que el SL/TP se ha activado? "

¿Cuál debería ser la solución?

No se puede recordar ni comprobar nada en absoluto, excepto la propia posición, siempre que

No operó ninguna otra orden

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

  }
break;
 
prostotrader:

Simplemente no estás siguiendo el tema de cerca. :)

El iniciador del tema original escribió:

El que está poco atento eres tú, yo no soyel que inicia el tema.

También debería mostrar un código como este:

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

Bueno, cuál es el problema, quién lo necesita, lo termina él mismo, no le gusta, ¡hay trabajo! ¿Es así?