FORTS : Codes de retour de OnTradeTransaction() - page 7

 
Михаил:

Le fait est que lorsqu'un ordre est en cours d'exécution, vous ne contrôlez pas son exécution et vous ne bloquez donc pas OnTick() ou OnBookEvent().

Vous devez traiter l'événement de transaction dans OnTradeTransaction() pour contrôler rapidement l'ordre en cours d' exécution.

Je posterai bientôt le code pour le faire.

Hm. Je vais devoir y réfléchir, merci !
 
Alexey Kozitsyn:
Ahem. Je vais devoir y réfléchir, merci !
#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; 
                                          
  }
}  
 

Ou plutôt :

#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; 
                                          
  }
}
 
Михаил:
Je vois, mais on peut douter que cette construction bloque OnBookEvent(). L'événement du changement de verre peut se dérouler en grappes, après tout. Je vais vérifier, merci encore.
 
Alexey Kozitsyn:
Je vois, mais on peut douter que cette construction bloque OnBookEvent(). L'événement du changement de verre peut se dérouler en grappes, après tout. Je vais le vérifier, merci encore.
Ayez des doutes - n'utilisez pas la pointe, mais j'ai eu la même chose que vous, jusqu'à ce que je mette un "prop".
 
Михаил:
Si vous avez des doutes, n'utilisez pas les conseils, mais j'ai vécu la même chose que vous jusqu'à ce que je mette en place un "filet de sécurité".
Non, c'est une idée intéressante et plus un ordre prend du temps à être exécuté, mieux il fonctionnera. Dans mon cas, l'exécution de la commande et sa suppression ont pris une ms. Nous devons également vérifier la logique du conseiller expert.
 
Alexey Kozitsyn:
Non, c'est une idée intéressante et plus une commande prend du temps à être exécutée, meilleure est la qualité de son travail. Dans le cas que j'ai cité, l'exécution de l'ordre et la suppression de l'ordre ont eu lieu dans le même ms. Nous devons également vérifier la logique du conseiller expert.
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend(). Quelle est la différence dans ce cas ?
Dans le cadre de la mise en œuvre du "backstop" (filet de sécurité)
 
Михаил:

C'est plus précis :

Pas plus vrai.

Lesdeux derniers paramètres request et result sont remplis de valeurs uniquement pour le type de transaction TRADE_TRANSACTION_REQUEST, les informations sur la transaction peuvent être obtenues à partir du paramètre type de la variable trans.

 
Alexey Kozitsyn:

Pas plus vrai.

Je me suis écrit, bien sûr trans.order