HistoryDealGetDouble

La función devuelve la propiedad solicitada de una transacción. La propiedad de la transacción tiene que ser del tipo double. Existen 2 variantes de la función.

1. Devuelve el valor de la propiedad directamente.

double  HistoryDealGetDouble(
   ulong                      ticket_number,     // ticket
   ENUM_DEAL_PROPERTY_DOUBLE  property_id        // identificador de la propiedad
   );

2. Devuelve true o false dependiendo del éxito de ejecución de la función. En caso del éxito el valor de la propiedad se coloca en una variable receptora que el último parámetro pasa por referencia.

bool  HistoryDealGetDouble(
   ulong                      ticket_number,     // ticket
   ENUM_DEAL_PROPERTY_DOUBLE  property_id,       // identificador de la propiedad
   double&                    double_var         // aquí recibimos el valor de la propiedad
   );

Parámetros

ticket_number

[in]  Ticket de transacción.

property_id

[in]  Identificador de la propiedad de transacción. Su valor puede ser uno de los valores de la enumeración ENUM_DEAL_PROPERTY_DOUBLE.

double_var

[out]  Variable del tipo double que recibe el valor de la propiedad requerida.

Valor devuelto

Valor del tipo double.

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.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- solicitamos la historia de transacciones y órdenes
   if(!HistorySelect(0TimeCurrent()))
     {
      Print("HistorySelect() failed. Error "GetLastError());
      return;
     }
 
//--- en un ciclo por la lista de transacciones en la historia de la cuenta
   int total=HistoryDealsTotal();
   for(int i=0i<totali++)
     {
      //--- obtenemos un ticket para la siguiente transacción (la transacción se selecciona automáticamente para obtener sus propiedades)
      ulong ticket=HistoryDealGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- obtenemos el tipo y la dirección de la transacción y mostramos el encabezado de la lista de propiedades reales de la transacción seleccionada
      string type=DealTypeDescription((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticketDEAL_TYPE));
      string entry=DealEntryDescription((ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticketDEAL_ENTRY));
      PrintFormat("Double properties of an deal %s entry %s #%I64u:"typeentryticket);
      
      //--- imprimimos bajo el encabezado todas las propiedades reales de la transacción seleccionada
      HistoryDealPropertiesDoublePrint(ticket12);
     }
   /*
   resultado:
   Double properties of an deal Buy entry In #2785070622:
   Volume:     0.50
   Price:      1.10480
   Commission0.00
   Swap:       0.00
   Profit:     0.00 USD
   Fee:        0.00
   StopLoss:   0.00000
   TakeProfit0.00000
   Double properties of an deal Sell entry Out #2785071538:
   Volume:     0.50
   Price:      1.10491
   Commission0.00
   Swap:       0.00
   Profit:     5.50 USD
   Fee:        0.00
   StopLoss:   0.00000
   TakeProfit0.00000
   */
  }
//+------------------------------------------------------------------+
//| Muestra en el registro las propiedades reales de la transacción elegida         
//+------------------------------------------------------------------+
void HistoryDealPropertiesDoublePrint(const ulong ticketconst uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- obtenemos el símbolo de la transacción, la divisa de beneficio y el número de decimales del símbolo
   string symbol  = HistoryDealGetString(ticketDEAL_SYMBOL);
   string currencySymbolInfoString(symbolSYMBOL_CURRENCY_PROFIT);
   int    digits  = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- definimos el texto del encabezado y la anchura del campo del encabezado
//--- si la anchura del encabezado se ha transmitido a la función como igual a cero, entonces la anchura será el tamaño de la línea del encabezado + 1
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- obtenemos y mostramos en el registro el volumen de la transacción con un encabezado de la anchura establecida
   if(!HistoryDealGetDouble(ticketDEAL_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- mostramos en el registro el precio de la transacción
   header="Price:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_PRICEvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- mostramos en el registro la comisión por transacción
   header="Commission:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_COMMISSIONvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- mostramos en el registro el swap acumulado en el cierre
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- mostramos en el registro el resultado financiero de la transacción
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
   
//--- mostramos en el registro el pago por la realización de la transacción
   header="Fee:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_FEEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- mostramos en el registro el valor del nivel de StopLoss
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- mostramos en el registro el valor del nivel de TakeProfit
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!HistoryDealGetDouble(ticketDEAL_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
  }
//+------------------------------------------------------------------+
//| 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);
     }
  }

Véase también

HistoryDealsTotal(), HistorySelect(), HistoryDealGetTicket(), Propiedades de transacciones