FORTS: OnTradeTransaction() Rückgabecodes - Seite 7

 
Михаил:

Wenn ein Auftrag ausgeführt wird, haben Sie keine Kontrolle über seine Ausführung und blockieren daher auch nicht OnTick() oder OnBookEvent().

Sie müssen das Handelsereignis in OnTradeTransaction() behandeln, um die Ausführung des Auftrags schnell zu kontrollieren.

Ich werde den Code dazu bald veröffentlichen.

Hm. Ich werde darüber nachdenken müssen, danke!
 
Alexey Kozitsyn:
Ahem. Ich werde darüber nachdenken, danke!
#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; 
                                          
  }
}  
 

Oder besser gesagt:

#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; 
                                          
  }
}
 
Михаил:
Ich verstehe, aber es gibt Zweifel, dass diese Konstruktion OnBookEvent() blockiert. Das Glaswechsel-Ereignis kann schließlich in Trauben laufen. Ich werde es mir ansehen, nochmals vielen Dank.
 
Alexey Kozitsyn:
Ich verstehe, aber es gibt Zweifel, dass diese Konstruktion OnBookEvent() blockiert. Das Glaswechsel-Ereignis kann schließlich in Trauben laufen. Ich werde es überprüfen, nochmals vielen Dank.
Haben Sie Zweifel - verwenden Sie nicht die Spitze, aber ich hatte das gleiche wie Sie, bis ich eine "Stütze" setzen.
 
Михаил:
Wenn Sie Zweifel haben, nehmen Sie den Rat nicht an, aber ich hatte dasselbe Problem wie Sie, bis ich eine "Rücklaufsperre" einrichtete.
Nein, es ist eine interessante Idee, und je länger es dauert, bis ein Auftrag ausgeführt wird, desto besser wird er funktionieren. In meinem Fall dauerten sowohl die Ausführung des Auftrags als auch seine Löschung eine ms. Wir werden auch die Logik des Expert Advisors überprüfen müssen.
 
Alexey Kozitsyn:
Nein, es ist eine interessante Idee, und je länger die Ausführung eines Auftrags dauert, desto höher ist seine Qualität. In dem von mir zitierten Fall fanden sowohl die Auftragsausführung als auch die Auftragslöschung innerhalb ein und derselben MS statt. Wir sollten auch die Logik des Expert Advisors überprüfen.
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend(). Worin besteht der Unterschied in diesem Fall?
Bei der Umsetzung des "Backstop"
 
Михаил:

Das ist schon genauer:

Nicht wahrer.

Dieletzten beiden Parameter request und result werden nur bei der Geschäftsart TRADE_TRANSACTION_REQUEST mit Werten gefüllt, Informationen über das Geschäft können dem Parameter type der Variablen trans entnommen werden.

 
Alexey Kozitsyn:

Nicht wahrer.

Ich habe mich natürlich trans.order aufgeschrieben