OrderGetInteger

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 datetime, int. Existen 2 variantes de la función.

1. Devuelve el valor de la propiedad directamente.

long  OrderGetInteger(
   ENUM_ORDER_PROPERTY_INTEGER  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  OrderGetInteger(
   ENUM_ORDER_PROPERTY_INTEGER  property_id,      // identificador de la propiedad
   long&                        long_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_INTEGER.

long_var

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

Valor devuelto

Valor del tipo long.

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("Integer properties of an active pending order %s #%I64u:"typeticket);
      
      //--- imprimimos bajo el encabezado todas las propiedades enteras de la orden seleccionada
      OrderPropertiesIntegerPrint(17);
     }
   /*
  resultado:
   Integer properties of an active pending order Buy Limit #2812945317:
   Ticket:          2812945317
   Time setup:      2024.09.04 19:17:16
   Type:            Buy Limit
   State:           Placed
   Time expiration0
   Time done:       0
   Time setup msc:  2024.09.04 19:17:16.686
   Time done msc:   0
   Type filling:    Return
   Type time:       Time GTC
   Magic:           0
   Reason:          Client
   Position ID:     0
   Position By ID:  0
   */
  }
//+------------------------------------------------------------------+
//| Muestra en el registro las propiedades reales de la orden elegida        
//+------------------------------------------------------------------+
void OrderPropertiesIntegerPrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   long   value=0;
   
//--- mostramos en el registro el ticket de la orden
   OrderPropertyPrint("Ticket:"header_widthORDER_TICKET);
   
//--- mostramos en el registro el valor de hora de ejecución de la orden
   OrderPropertyPrint("Time setup:"header_widthORDER_TIME_SETUP);
   
//--- mostramos en el registro el tipo de la orden
   OrderPropertyPrint("Type:"header_widthORDER_TYPE);
   
//--- mostramos en el registro el estado de la orden
   OrderPropertyPrint("State:"header_widthORDER_STATE);
   
//--- mostramos en el registro la hora de expiración de la orden
   OrderPropertyPrint("Time expiration:"header_widthORDER_TIME_EXPIRATION);
   
//--- mostramos en el registro la hora de ejecución o retirada de la orden
   OrderPropertyPrint("Time done:"header_widthORDER_TIME_DONE);
   
//--- mostramos en el registro la hora de colocación de la orden para su ejecución en milisengundos desde el 01.01.1970
   OrderPropertyPrint("Time setup msc:"header_widthORDER_TIME_SETUP_MSC);
   
//--- mostramos en el registro la hora de ejecución o retirada de la orden en milisengundos desde el 01.01.1970
   OrderPropertyPrint("Time done msc:"header_widthORDER_TIME_DONE_MSC);
   
//--- mostramos en el registro el tipo de ejecución según el resto
   OrderPropertyPrint("Type filling:"header_widthORDER_TYPE_FILLING);
   
//--- mostramos en el registro el tiempo de vida útil de la orden
   OrderPropertyPrint("Type time:"header_widthORDER_TYPE_TIME);
   
//--- mostramos en el registro el identificador del experto que ha colocado la orden
   OrderPropertyPrint("Magic:"header_widthORDER_MAGIC);
   
//--- mostramos en el registro el motivo o fuente de la colocación de la orden
   OrderPropertyPrint("Reason:"header_widthORDER_REASON);
   
//--- mostramos en el registro el identificador de la posición colocado en la orden al realizarse su ejecución
   OrderPropertyPrint("Position ID:"header_widthORDER_POSITION_ID);
   
//--- mostramos en el registro el identificador de la posición opuesta para las órdenes del tipo ORDER_TYPE_CLOSE_BY
   OrderPropertyPrint("Position By ID:"header_widthORDER_POSITION_BY_ID);
  }
//+------------------------------------------------------------------+
//| Muestra en el registro el valor de propiedad entera de la orden  |
//+------------------------------------------------------------------+
void OrderPropertyPrint(const string headeruint header_widthENUM_ORDER_PROPERTY_INTEGER property)
  {
   string svalue="";
   long   lvalue=0;
   if(!OrderGetInteger(propertylvalue))
      PrintFormat("Cannot get property %s, error=%d"EnumToString(property), GetLastError());
   else
     {
      switch(property)
        {
         case ORDER_TICKET          :
         case ORDER_MAGIC           :
         case ORDER_POSITION_ID     :
         case ORDER_POSITION_BY_ID  :
           svalue=(string)lvalue;
           break;
           
         case ORDER_TIME_SETUP      :
         case ORDER_TIME_EXPIRATION :
         case ORDER_TIME_DONE       :
           svalue=(lvalue!=0 ? TimeToString((datetime)lvalueTIME_DATE|TIME_MINUTES|TIME_SECONDS) : "0");
           break;
           
         case ORDER_TIME_SETUP_MSC  :
         case ORDER_TIME_DONE_MSC   :
           svalue=(lvalue!=0 ? TimeMscToString(lvalue) : "0");
           break;
           
         case ORDER_TYPE            :
           svalue=OrderTypeDescription((ENUM_ORDER_TYPE)lvalue);
           break;
         case ORDER_STATE           :
           svalue=OrderStateDescription((ENUM_ORDER_STATE)lvalue);
           break;
         case ORDER_TYPE_FILLING    :
           svalue=OrderTypeFillingDescription((ENUM_ORDER_TYPE_FILLING)lvalue);
           break;
         case ORDER_TYPE_TIME       :
           svalue=OrderTypeTimeDescription((ENUM_ORDER_TYPE_TIME)lvalue);
           break;
         case ORDER_REASON          :
           svalue=OrderReasonDescription((ENUM_ORDER_REASON)lvalue);
           break;
         
         default                    :
           svalue="Unknown property";
           break;
        }
      
      //--- 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%-s"wheadersvalue);
     }
  }
//+------------------------------------------------------------------+
//| 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: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la descripción del estado de la orden                    |
//+------------------------------------------------------------------+
string OrderStateDescription(ENUM_ORDER_STATE state)
  {
   switch(state)
     {
      case ORDER_STATE_STARTED         :  return("Started");
      case ORDER_STATE_PLACED          :  return("Placed");
      case ORDER_STATE_CANCELED        :  return("Canceled");
      case ORDER_STATE_PARTIAL         :  return("Partial");
      case ORDER_STATE_FILLED          :  return("Filled");
      case ORDER_STATE_REJECTED        :  return("Rejected");
      case ORDER_STATE_EXPIRED         :  return("Expired");
      case ORDER_STATE_REQUEST_ADD     :  return("Request Add");
      case ORDER_STATE_REQUEST_MODIFY  :  return("Request Modify");
      case ORDER_STATE_REQUEST_CANCEL  :  return("Request Cancel");
      default                          :  return("Unknown state: "+(string)state);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la descripción de la política de ejecución del volumen de la orden            
//+------------------------------------------------------------------+
string OrderTypeFillingDescription(const ENUM_ORDER_TYPE_FILLING type)
  {
   switch(type)
     {
      case ORDER_FILLING_FOK     :  return("Fill or Kill");
      case ORDER_FILLING_IOC     :  return("Immediate or Cancel");
      case ORDER_FILLING_BOC     :  return("Book or Cancel");
      case ORDER_FILLING_RETURN  :  return("Return");
      default                    :  return("Unknown type filling: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la descripción de la línea de acción de la orden         |
//+------------------------------------------------------------------+
string OrderTypeTimeDescription(const ENUM_ORDER_TYPE_TIME type)
  {
   switch(type)
     {
      case ORDER_TIME_GTC           :   return("Time GTC");
      case ORDER_TIME_DAY           :   return("Time Day");
      case ORDER_TIME_SPECIFIED     :   return("Time Specified");
      case ORDER_TIME_SPECIFIED_DAY :   return("Time Specified Day");
      default                       :  return("Unknown type time: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| Retorna la descripción del motivo de la colocación de la orden   |
//+------------------------------------------------------------------+
string OrderReasonDescription(const ENUM_ORDER_REASON reason)
  {
   switch(reason)
     {
      case ORDER_REASON_CLIENT   :  return("Client");
      case ORDER_REASON_MOBILE   :  return("Mobile");
      case ORDER_REASON_WEB      :  return("Web");
      case ORDER_REASON_EXPERT   :  return("Expert");
      case ORDER_REASON_SL       :  return("Stop Loss");
      case ORDER_REASON_TP       :  return("Take Profit");
      case ORDER_REASON_SO       :  return("Stop Out");
      default                    :  return("Unknown reason: "+(string)reason);
     }
  }
//+------------------------------------------------------------------+
//| 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

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