OrderGetTicket

Devuelve el ticket de una orden correspondiente y automáticamente elige la orden para trabajar con ella después usando las funciones.

ulong  OrderGetTicket(
   int  index      // número en la lista de órdenes
   );

Parámetros

index

[in]  Número de una orden en la lista de órdenes

Valor devuelto

Valor del tipo ulong. En caso de ejecución fallida devuelve 0.

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. Una orden es la indicación de realizar una operación comercial, mientras que una posición es el resultado de una o varias transacciones.

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.

La función OrderGetTicket() copia los datos sobre la orden en el entorno del programa, y las posteriores llamadas OrderGetDouble(), OrderGetInteger(), OrderGetString() devuelven los datos copiados anteriormente. Eso significa que la propia orden a lo mejor ya no existe (o se ha cambiado su precio de apertura, niveles Stop Loss / Take Profit o el plazo de vencimiento), pero todavía se puede seguir recibiendo los datos sobre esta orden. Para garantizar la recepción de datos recientes sobre una orden, se recomienda llamar a la función OrderGetTicket() justamente antes de solicitarlos.

Ejemplo:

void OnStart()
  {
//--- variables para recibir valores desde las propiedades de la orden
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
   long     positionID;
//--- número de actuales órdenes pendientes 
   uint     total=OrdersTotal();
//--- repasamos todas las órdenes en el ciclo
   for(uint i=0;i<total;i++)
     {
      //--- recibimos el ticket de la orden según su posición en la lista
      if((ticket=OrderGetTicket(i))>0)
        {
         //--- recibimos las propiedades de la orden
         open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
         time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
         symbol        =OrderGetString(ORDER_SYMBOL);
         order_magic   =OrderGetInteger(ORDER_MAGIC);
         positionID    =OrderGetInteger(ORDER_POSITION_ID);
         initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
         type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
         //--- preparamos y mostramos información sobre la orden
         printf("#ticket %d %s %G %s at %G was set up at %s",
                ticket,                 // ticket de la orden
                type,                   // tipo
                initial_volume,         // volumen colocado
                symbol,                 // símbolo
                open_price,             // precio de apertura especificado
                TimeToString(time_setup)// hora de colocación de la orden
                );
        }
     }
//---
  }

Véase también

OrdersTotal(), OrderSelect(), OrderGetInteger()