FORTS: Códigos de retorno de OnTradeTransaction() - página 7

 
Михаил:

La cuestión es que cuando se está ejecutando una orden, no se controla su ejecución y por tanto no se bloquea OnTick() ni OnBookEvent().

Es necesario manejar el evento de comercio en OnTradeTransaction() para controlar rápidamente la orden que se ejecuta.

Pronto publicaré el código de cómo hacerlo.

Tendré que pensarlo, ¡gracias!
 
Alexey Kozitsyn:
Ejem. Tendré que pensarlo, ¡gracias!
#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 más bien:

#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; 
                                          
  }
}
 
Михаил:
Ya veo, pero hay dudas de que esta construcción bloquee OnBookEvent(). Al fin y al cabo, el evento de cambio de cristal puede correr en racimos. Lo comprobaré, gracias de nuevo.
 
Alexey Kozitsyn:
Ya veo, pero hay dudas de que esta construcción bloquee OnBookEvent(). Al fin y al cabo, el evento de cambio de cristal puede correr en racimos. Lo comprobaré, gracias de nuevo.
Si tienes alguna duda, no uses la punta, pero a mí me pasaba lo mismo que a ti, hasta que puse un "puntal".
 
Михаил:
Si tienes dudas, no utilices los consejos, pero a mí me pasó lo mismo que a ti hasta que puse un "tope".
No, es una idea interesante y cuanto más tarde en ejecutarse una orden, mejor funcionará. En mi caso, tanto la ejecución de la orden como su eliminación tardaron un ms. Tendremos que comprobar también la lógica del Asesor Experto.
 
Alexey Kozitsyn:
No, es una idea interesante y cuanto más tarda una orden en ejecutarse, mejor es la calidad de su trabajo. En el caso que he citado, tanto la ejecución de la orden como la supresión de la misma tuvieron lugar dentro del mismo ms. También debemos comprobar la lógica del Asesor Experto.
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend(). ¿Cuál es la diferencia en este caso?
En la aplicación del "backstop"
 
Михаил:

Eso es más preciso:

No es más cierto.

Los dos últimos parámetros request y result se rellenan con valores sólo para el tipo de transacción TRADE_TRANSACTION_REQUEST, la información sobre la transacción se puede obtener del parámetro type de la variable trans.

 
Alexey Kozitsyn:

No es más cierto.

Me he anotado, por supuesto trans.order