FORTS: codici di ritorno di OnTradeTransaction() - pagina 7

 
Михаил:

Il fatto è che quando un ordine viene eseguito, tu non controlli la sua esecuzione e quindi non blocchi OnTick() o OnBookEvent().

Dovete gestire l'evento trade in OnTradeTransaction() per controllare rapidamente l'ordine che viene eseguito.

Pubblicherò presto il codice su come farlo.

Dovrò pensarci, grazie!
 
Alexey Kozitsyn:
Ahem. Dovrò pensarci, grazie!
#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
bool is_busy;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_busy = false;
  return( INIT_SUCCEEDED ); 
}
//----------------------------
void OnBookEvent( const string &a_symbol ) 
{
  if ( ( a_symbol == _Symbol ) && ( !is_busy ) )
  {
    //Работаем дальше
  }
}  
//------------
void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
  switch( trans.type )
  {
    case TRADE_TRANSACTION_DEAL_ADD: if ( trans.order_state == ORDER_STATE_STARTED )
                                     {
                                       is_busy = true;
                                       //Обнуляем билет этого ордера, если одер залился полностью
                                       is_busy = false;
                                     }
                                     break; 
                                          
  }
}  
 

O meglio:

#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
bool is_busy;
ulong order_ticket;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_busy = false;
  return( INIT_SUCCEEDED ); 
}
//----------------------------
void OnBookEvent( const string &a_symbol ) 
{
  if ( ( a_symbol == _Symbol ) && ( !is_busy ) )
  {
    //Работаем дальше
  }
}  
//------------
void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
  switch( trans.type )
  {
    case TRADE_TRANSACTION_DEAL_ADD: if ( trans.order_state == ORDER_STATE_STARTED )
                                     {
                                       if ( result.order == order_ticket )
                                       { 
                                         is_busy = true;
                                         //Обнуляем билет этого ордера, если одер залился полностью
                                         is_busy = false;
                                       }  
                                     }
                                     break; 
                                          
  }
}
 
Михаил:
Capisco, ma ci sono dubbi che questa costruzione blocchi OnBookEvent(). Dopotutto, l'evento del cambio di vetro può andare a grappoli. Lo controllerò, grazie ancora.
 
Alexey Kozitsyn:
Capisco, ma ci sono dubbi che questa costruzione blocchi OnBookEvent(). Dopotutto, l'evento del cambio di vetro può andare a grappoli. Lo controllerò, grazie ancora.
Non avere dubbi - non usare la punta, ma ho avuto la stessa cosa di te, finché non ho messo un "puntello".
 
Михаил:
Abbi dei dubbi - non usare il consiglio, ma ho avuto la stessa cosa di te fino a quando non ho messo un "backstop" in atto.
No, è un'idea interessante e più tempo un ordine impiega per essere eseguito, meglio funzionerà. Nel mio caso, sia l'esecuzione dell'ordine che la sua cancellazione hanno richiesto un ms. Dobbiamo anche controllare la logica dell'Expert Advisor.
 
Alexey Kozitsyn:
No, è un'idea interessante e più tempo impiega un ordine per essere eseguito, migliore è la qualità del suo lavoro. Nel caso che ho citato, sia l'esecuzione che la cancellazione dell'ordine hanno avuto luogo nello stesso ms. Dovremmo anche controllare la logica dell'Expert Advisor.
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend(). Qual è la differenza in questo caso?
Nell'attuazione del "backstop"
 
Михаил:

Questo è più accurato:

Non più vero.

Gliultimi due parametri request e result sono riempiti con valori solo per il tipo di transazione TRADE_TRANSACTION_REQUEST, le informazioni sulla transazione possono essere ottenute dal parametro type della variabile trans.

 
Alexey Kozitsyn:

Non più vero.

Mi sono scritto, naturalmente trans.order