HistoryDealSelect

Wählt den Deal in der Historie für den weiteren Zugang dazu durch die entsprechenden Funktionen. Gibt true beim erfolgreichen Beenden der Funktion zurück. Gibt false beim erfolglosen Beenden der Funktion zurück. Für den Erhalt der fehlerbezogenen Information muss die Funktion GetLastError() aufgerufen werden.

bool  HistoryDealSelect(
   ulong  ticket,     // Dealsticket
   );

Parameter

ticket

[in]  Dealsticket

Rückgabewert

Gibt true im Erfolgsfall zurück, anderenfalls false.

Hinweis

Man darf Order, Deal und Position nicht miteinander verwechseln. Jeder Deal ist das Ergebnis der Ausführung eines Auftrags (order), jede Position ist das Abschlussergebnis eines oder mehrerer Deals.

Die Funktion HistoryDealSelect() löscht im mql5-Programm die Liste der Deals, die für Aufrufe zugänglich sind, und kopiert, bei erfolgreicher Ausführung von HistoryDealSelect(), den einzigen, ausgewählten Deal. Wenn es notwendig ist, alle Deals durchzusehen, die von der Funktion HistorySelect() gewählt wurden, ist es besser die Funktion HistoryDealGetTicket() zu verwenden.

Beispiel:

#define   TICKET    2620919264   // Ticket eines beliebigen, bekannten Deals, zum Beispiel aus der Kontohistorie des Terminals
 
long      ExtTicket=TICKET;      // weise das angegebene Ticket der Variablen aus der Makrosubstitution für den Test im Skript zu,
                                 // oder verwalte die Deals in der Ereignisbehandlung von OnTradeTransaction() im EA:
//+------------------------------------------------------------------+
//| Ereignisbehandlung TradeTransaction im Experten                  |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransactiontrans,
                        const MqlTradeRequestrequest,
                        const MqlTradeResultresult)
  {
   //--- wenn eine Transaktion einen Deal der Historie hinzufügt
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      //--- einen Deal per Ticket auswählen, seine Daten abrufen und die Dealbeschreibung im Journal ausdrucken
      HistoryDealSelectProcess(trans.deal);
     }
  }
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- wähle einen Deal per Ticket aus, rufe seine Daten ab und drucke die Dealbeschreibung ins Journal
   HistoryDealSelectProcess(ExtTicket);
   /*
   Ergebnis:
   (Position ID #2645974677EURUSD Deal Out 0.10 Buy #2620919264 by order #2646028969 at 1.091782024.07.15 18:16:32.570
   */
  }
//+------------------------------------------------------------------+
//| Einen Deal per Ticket auswählen und die Daten im Journal drucken |
//+------------------------------------------------------------------+
void HistoryDealSelectProcess(const ulong deal_ticket)
  {
//--- wähle einen historischen Deal anhand des in deal_ticket angegebenen Tickets
   ResetLastError();
   if(!HistoryDealSelect(deal_ticket))
     {
      PrintFormat("HistoryDealSelect(%I64u) failed. Error %d"deal_ticketGetLastError());
      return;
     }
 
//--- wenn ein Deal erfolgreich ausgewählt wurde, ruf seine Daten ab und druck die Dealbeschreibung im Journal aus
   ENUM_DEAL_TYPE    deal_type  = (ENUM_DEAL_TYPE)HistoryDealGetInteger(ExtTicketDEAL_TYPE);
   ENUM_DEAL_ENTRY   deal_entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(ExtTicketDEAL_ENTRY);
   ENUM_DEAL_REASON  deal_reason= (ENUM_DEAL_REASON)HistoryDealGetInteger(ExtTicketDEAL_REASON);
   long              deal_time  = HistoryDealGetInteger(ExtTicketDEAL_TIME_MSC);
   long              deal_order = HistoryDealGetInteger(ExtTicketDEAL_ORDER);
   long              deal_pos_idHistoryDealGetInteger(ExtTicketDEAL_POSITION_ID);
   string            deal_symbolHistoryDealGetString(ExtTicketDEAL_SYMBOL);
   double            deal_volumeHistoryDealGetDouble(ExtTicketDEAL_VOLUME);
   double            deal_price = HistoryDealGetDouble(ExtTicketDEAL_PRICE);
   int               digits     = (int)SymbolInfoInteger(deal_symbolSYMBOL_DIGITS);
   
   PrintFormat("(Position ID #%I64d) %s Deal %s %.2f %s #%I64u by order #%I64d at %.*f, %s",
               deal_pos_iddeal_symbolDealEntryDescription(deal_entry), deal_volume,
               DealTypeDescription(deal_type), ExtTicketdeal_orderdigitsdeal_price,
               TimeMscToString(deal_time));
  }
//+------------------------------------------------------------------+
//| Rückgabe der Beschreibung des Deal-Typs                          |
//+------------------------------------------------------------------+
string DealTypeDescription(const ENUM_DEAL_TYPE type)
  {
   switch(type)
     {
      case DEAL_TYPE_BUY                     :  return("Buy");
      case DEAL_TYPE_SELL                    :  return("Sell");
      case DEAL_TYPE_BALANCE                 :  return("Balance");
      case DEAL_TYPE_CREDIT                  :  return("Credit");
      case DEAL_TYPE_CHARGE                  :  return("Additional charge");
      case DEAL_TYPE_CORRECTION              :  return("Correction");
      case DEAL_TYPE_BONUS                   :  return("Bonus");
      case DEAL_TYPE_COMMISSION              :  return("Additional commission");
      case DEAL_TYPE_COMMISSION_DAILY        :  return("Daily commission");
      case DEAL_TYPE_COMMISSION_MONTHLY      :  return("Monthly commission");
      case DEAL_TYPE_COMMISSION_AGENT_DAILY  :  return("Daily agent commission");
      case DEAL_TYPE_COMMISSION_AGENT_MONTHLY:  return("Monthly agent commission");
      case DEAL_TYPE_INTEREST                :  return("Interest rate");
      case DEAL_TYPE_BUY_CANCELED            :  return("Canceled buy deal");
      case DEAL_TYPE_SELL_CANCELED           :  return("Canceled sell deal");
      case DEAL_DIVIDEND                     :  return("Dividend operations");
      case DEAL_DIVIDEND_FRANKED             :  return("Franked (non-taxable) dividend operations");
      case DEAL_TAX                          :  return("Tax charges");
      default                                :  return("Unknown deal type: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| Rückgabe der Änderungsmethode der Position                       |
//+------------------------------------------------------------------+
string DealEntryDescription(const ENUM_DEAL_ENTRY entry)
  {
   switch(entry)
     {
      case DEAL_ENTRY_IN      :  return("In");
      case DEAL_ENTRY_OUT     :  return("Out");
      case DEAL_ENTRY_INOUT   :  return("Reverce");
      case DEAL_ENTRY_OUT_BY  :  return("Out by");
      case DEAL_ENTRY_STATE   :  return("Status record");
      default                 :  return("Unknown deal entry: "+(string)entry);
     }
  }
//+------------------------------------------------------------------+
//| Rückgabe der Zeit in Millisekunden                               |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Siehe auch

HistorySelect(), HistoryDealGetTicket(), Eigenschaften der Deals