OrderGetDouble

La función devuelve la propiedad solicitada de una orden que previamente ha sido elegida a través de la función OrderGetTicket o OrderSelect. La propiedad de la orden tiene que ser del tipo double. Existen 2 variantes de la función.

1. Devuelve el valor de la propiedad directamente.

double  OrderGetDouble(
   ENUM_ORDER_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  OrderGetDouble(
   ENUM_ORDER_PROPERTY_DOUBLE  property_id,      // identificador de la propiedad
   double&                     double_var        // aquí recibimos el valor de la propiedad
   );

Parámetros

property_id

[in]  Identificador de la propiedad de la orden. Su valor puede ser uno de los valores de la enumeración ENUM_ORDER_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 pendientes con las posiciones que también se muestran en la pestaña "Operaciones" del panel "Caja de Herramientas" del terminal de cliente.

En el registro de posiciones con "compensación" (ACCOUNT_MARGIN_MODE_RETAIL_NETTING y ACCOUNT_MARGIN_MODE_EXCHANGE) de cada símbolo en cualquier momento solo puede abrirse una posición, que es el resultado de una o más operaciones. Es mejor no confundir las posiciones con las órdenes pendientes en activo, que también se muestran en la pestaña "Trading" en el panel "Herramientas".

En el caso de que las posiciones se representen independientemente (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), de cada símbolo pueden abrirse a la vez varias posiciones.

Para garantizar la recepción de datos recientes sobre una orden, se recomienda llamar a la función OrderSelect() justamente antes de solicitarlos.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- en un ciclo por la lista de todas las órdenes en la cuenta
   int total=OrdersTotal();
   for(int i=0i<totali++)
     {
      //--- obtenemos el ticket de la orden en la lista según el índice del ciclo
      ulong ticket=OrderGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- obtenemos el tipo de la orden y mostramos el encabezado de la lista de propiedades reales de la orden seleccionada
      string type=OrderTypeDescription((ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE));
      PrintFormat("Double properties of an active pending order %s #%I64u:"typeticket);
      
      //--- imprimimos bajo el encabezado todas las propiedades reales de la orden seleccionada
      OrderPropertiesDoublePrint(16);
     }
   /*
   resultado:
   Double properties of an active pending order Sell Limit #2812000714:
   Volume initial1.00
   Volume current1.00
   Price open:     145.282
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.044
   StopLimit:      0.000
   Double properties of an active pending order Buy Limit #2812001112:
   Volume initial1.00
   Volume current1.00
   Price open:     144.836
   StopLoss:       0.000
   TakeProfit:     0.000
   Price current:  145.051
   StopLimit:      0.000
   Double properties of an active pending order Buy Stop #2812001488:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10642
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10530
   StopLimit:      0.00000
   Double properties of an active pending order Sell Stop #2812001712:
   Volume initial0.50
   Volume current0.50
   Price open:     1.10374
   StopLoss:       0.00000
   TakeProfit:     0.00000
   Price current:  1.10525
   StopLimit:      0.00000
   */
  }
//+------------------------------------------------------------------+
//| Retorna la descripción del tipo de orden                         |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      case ORDER_TYPE_BUY_LIMIT        :  return("Buy Limit");
      case ORDER_TYPE_SELL_LIMIT       :  return("Sell Limit");
      case ORDER_TYPE_BUY_STOP         :  return("Buy Stop");
      case ORDER_TYPE_SELL_STOP        :  return("Sell Stop");
      case ORDER_TYPE_BUY_STOP_LIMIT   :  return("Buy Stop Limit");
      case ORDER_TYPE_SELL_STOP_LIMIT  :  return("Sell Stop Limit");
      default                          :  return("Unknown order type");
     }
  }
//+------------------------------------------------------------------+
//| Muestra en el registro las propiedades reales de la orden elegida|
//+------------------------------------------------------------------+
void OrderPropertiesDoublePrint(const uint header_width=0)
  {
//--- obtenemos el símbolo de la orden y el número de decimales del símbolo
   string symbol = OrderGetString(ORDER_SYMBOL);
   int    digits = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- mostramos en el registro el volumen inicial al colocar la orden con un encabezado de la anchura establecida
   OrderPropertyPrint("Volume initial:",header_width,2,ORDER_VOLUME_INITIAL);
   
//--- mostramos en el registro el valor del volumen no ejecutado de la orden
   OrderPropertyPrint("Volume current:",header_width,2,ORDER_VOLUME_CURRENT);
   
//--- mostramos en el registro el valor del precio indicado en la orden
   OrderPropertyPrint("Price open:",header_width,digits,ORDER_PRICE_OPEN);
   
//--- mostramos en el registro el valor del nivel de StopLoss
   OrderPropertyPrint("StopLoss:",header_width,digits,ORDER_SL);
 
//--- mostramos en el registro el valor del nivel de TakeProfit
   OrderPropertyPrint("TakeProfit:",header_width,digits,ORDER_TP);
 
//--- mostramos en el registro el valor del precio actual según el símbolo de la orden
   OrderPropertyPrint("Price current:",header_width,digits,ORDER_PRICE_CURRENT);
 
//--- mostramos en el registro el valor de precio de la colocación de la orden Limit al activarse la orden StopLimit
   OrderPropertyPrint("StopLimit:",header_width,digits,ORDER_PRICE_STOPLIMIT);
  }
//+------------------------------------------------------------------+
//| Muestra en el registro una propiedad real de la orden            |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string headeruint header_widthint digitsENUM_ORDER_PROPERTY_DOUBLE property)
  {
   double value=0;
   if(!OrderGetDouble(propertyvalue))
      PrintFormat("Cannot get property %s, error=%d"EnumToString(property), GetLastError());
   else
     {
      //--- 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
      uint w=(header_width==0 ? header.Length()+1 : header_width);
      PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
     }
  }

Véase también

OrdersTotal(), OrderGetTicket(), Propiedades de órdenes

OSZAR »