HistoryDealSelect

Elige en el historial una transacción para recurrir posteriormente a ésta a través de las funciones correspondientes. Devuelve true en caso de que la ejecución de la función se finalice con éxito, de lo contrario devuelve false. Para obtener la información sobre el error hay que llamar a la función GetLastError().

bool  HistoryDealSelect(
   ulong  ticket,     // ticket de la transacción
   );

Parámetros

ticket

[in]  Ticket de la transacción.

Valor devuelto

Devuelve true en caso del éxito, de lo contrario devuelve false.

Nota

No se puede confundir las órdenes, transacciones y posiciones. Cada transacción es el resultado de la ejecución de una orden, mientras que cada posición es el resultado final de una o más transacciones.

La función HistoryDealSelect() limpia en un programa mql5 la lista de transacciones, las que están disponible, y copia en esta lista sólo una transacción, si la ejecución de la función HistoryDealSelect() se ha completado con éxito. Si hace falta repasar todas las transacciones seleccionadas por la función HistorySelect() es mejor utilizar la función HistoryDealGetTicket().

Ejemplo:

#define   TICKET    2620919264   // ticket de cualquier transacción conocida, por ejemplo, de la historia de la cuenta en el terminal
 
long      ExtTicket=TICKET;      // escribimos el ticket especificado en una variable de la macrosustitución para la prueba en el script,
                                 // o bien procesamos las transacciones en el manejador OnTradeTransaction() en el asesor:
//+------------------------------------------------------------------+
//| Expert TradeTransaction handler                                  |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransactiontrans,
                        const MqlTradeRequestrequest,
                        const MqlTradeResultresult)
  {
   //--- si es una transacción, añadimos la operación a la historia
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      //--- seleccionamos una transacción según el ticket, obtenemos sus datos y mostramos la descripción de la operación en el registro
      HistoryDealSelectProcess(trans.deal);
     }
  }
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- seleccionamos una transacción según el ticket, obtenemos sus datos y mostramos la descripción de la operación en el registro
   HistoryDealSelectProcess(ExtTicket);
   /*
   resultado:
   (Position ID #2645974677EURUSD Deal Out 0.10 Buy #2620919264 by order #2646028969 at 1.091782024.07.15 18:16:32.570
   */
  }
//+------------------------------------------------------------------+
//| Selecciona una operación según el ticket e imprime los datos de la misma en el registro|
//+------------------------------------------------------------------+
void HistoryDealSelectProcess(const ulong deal_ticket)
  {
//--- seleccionamos una operación histórica según el ticket especificado en deal_ticket
   ResetLastError();
   if(!HistoryDealSelect(deal_ticket))
     {
      PrintFormat("HistoryDealSelect(%I64u) failed. Error %d"deal_ticketGetLastError());
      return;
     }
 
//--- si la operación se ha seleccionado con éxito, obtenemos sus datos y mostramos la descripción de la operación en el registro
   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));
  }
//+------------------------------------------------------------------+
//| Retorna la descripción del tipo de transacción                   |
//+------------------------------------------------------------------+
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);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la descripción del método de cambio de posición          |
//+------------------------------------------------------------------+
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);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la hora en milisegundos                                |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

Véase también

HistorySelect(), HistoryDealGetTicket(), Propiedades de transacciones