OnTradeTransaction - pagina 5

 
prostotrader:

Cosa c'è di sbagliato in questo metodo?

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

Perché le ultime posizioni SL e TP conosciute potrebbero non coincidere con il prezzo dell'affare e non ci sarà nulla con cui confrontarlo.

E non ti piace condividere i tuoi codici, ma guardi quelli degli altri con grande piacere...

Questo non funzionerà sempre:

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:
Prova...
Lo proverò di sicuro qualche volta. Lo proverò qualche volta, grazie. Al momento sono occupato con altri compiti.
 
prostotrader:

Cosa c'è di sbagliato in questo metodo?

Dovrebbe memorizzaremy_order_ticket
 
fxsaber:
Devi tenereil mio biglietto_ordine

Sai almeno di cosa stai parlando?

my_order_ticket - questo ordine ha un posto dove vivere se avete

e siete obbligati a mantenerli.

 
fxsaber:
Devi memorizzaremy_order_ticket
Non solo.
 
Anatoli Kazharski:
Lo proverò qualche volta. Grazie. Al momento sono occupato con altri compiti.
Buona fortuna con il codice!
 
Andrey Dik:
Non solo.

Sì, in realtà si propone di mantenere e memorizzare l'ambiente reale stesso, confrontandolo con quello che produce OnTradeTransaction.

Questa non è una soluzione.

 
fxsaber:

Sì, in realtà si propone di mantenere e memorizzare l'ambiente reale stesso, confrontandolo con quello che produce OnTradeTransaction.

Questa non è una soluzione.

Semplicemente non stai seguendo l'argomento da vicino. :)

L'iniziatore dell'argomento originale ha scritto:

"Come faccio a sapere inOnTradeTransaction() che SL/TP è scattato? "

Quale dovrebbe essere la soluzione?

Non si può ricordare o controllare assolutamente nulla, tranne la posizione stessa, a condizione che

Non hai operato altri ordini

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

  }
break;
 
prostotrader:

Semplicemente non stai seguendo l'argomento da vicino. :)

L'iniziatore dell'argomento originale ha scritto:

Sei tu quello che è piuttosto disattento, io non sonol'iniziatore dell'argomento.

Dovreste anche mostrare un codice come questo:

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

Beh, cosa c'è che non va - chi ne ha bisogno, lo finisce da solo, non gli piace - c'è una joba! È così?

 
prostotrader:

Potresti non ricordare proprio nulla

Sono d'accordo che questo funzionerebbe (nel caso di un versamento completo)
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_DEAL_ADD) && (Trans.position > 0) && !PositionSelectByTicket(Trans.position))
    Print("Position #" + (string)Trans.position + " - triggered SL/TP.");
}

Ma la conversazione sembra allargarsi un po'.