OrderGetTicket

Retorna o ticket de uma ordem correspondente, selecionando automaticamente a ordem para trabalhos posteriores usando funções.

ulong  OrderGetTicket(
   int  index      // Número na lista de posições
   );

Parâmetros

index

[in]  Número de ordem na lista de ordens atuais.

Valor do Retorno

Valor do tipo ulong. Se a função falhar, será retornado 0.

Observação

Não confunda atuais ordens pendentes com posições, que também são exibidos na aba "negócios" da "caixa de ferramentas" do terminal do cliente. Uma ordem é um pedido para conduzir a transação, enquanto que uma posição é um resultado de um ou mais negócios.

Ao usar o registro de posições com "cobertura" (ACCOUNT_MARGIN_MODE_RETAIL_NETTING e ACCOUNT_MARGIN_MODE_EXCHANGE) segundo cada símbolo, a qualquer momento, pode estar aberta apenas a posição que seja o resultado de uma o mais transações. Não confunda as posições e as ordens pendentes ativas que são exibidas na guia "Negociação" na janela "Caixa de ferramentas".

Ao usar a exibição independente de posições, (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) segundo cada símbolo, podem ao mesmo tempo existir várias posições.

OrderGetTicket() função copia os dados sobre uma ordem para o ambiente do programa, e posteriormente chamadas de OrderGetDouble(), OrderGetInteger(), OrderGetString() retornar os dados copiados anteriormente. Isto significa que a própria ordem pode já não existir (ou seu preço de abertura, Stop Loss/Take Profit, níveis de lucro ou expiração mudou), mas ainda podem ser obtidos dados dessa ordem. Para garantir o recebimento de novos dados sobre a posição, é recomendado chamar PositionSelect() logo antes referindo-se a eles.

Exemplo:

void OnStart()
  {
//--- variáveis ​​para retornar valores das propriedades de ordem
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
   long     positionID;
//--- Numero de ordens atuais pendentes
   uint     total=OrdersTotal();
//--- passar por ordens em um loop
   for(uint i=0;i<total;i++)
     {
      //--- voltar ticket ordem por sua posição na lista
      if((ticket=OrderGetTicket(i))>0)
        {
         //--- retorna propriedades de uma Ordem
         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)));
         //--- preparar e apresentar informações sobre a ordem
         printf("#ticket %d %s %G %s em %G foi criado em %s",
                ticket,                 // ticket de ordem
                type,                   // tipo
                initial_volume,         // volume colocado
                symbol,                 // simbolo
                open_price,             // preço de abertura especificada
                TimeToString(time_setup)// tempo de colocar a ordem
                );
        }
     }
//---
  }

Também Veja

OrdersTotal(), OrderSelect(), OrderGetInteger()