Propriedades de uma Ordem

As solicitações para executar operações de negociação são formalizadas como ordens. Cada ordem tem uma variedade de propriedades para leitura. As informações sobre elas podem ser obtidas usando as funções OrderGet...() e HistoryOrderGet...().

Para as funções OrderGetInteger() e HistoryOrderGetInteger()

ENUM_ORDER_PROPERTY_INTEGER

Identificador

Descrição

Tipo

ORDER_TICKET

Bilhete da ordem. Um número exclusivo atribuído a cada ordem

long

ORDER_TIME_SETUP

Hora de configuração de uma ordem

datetime

ORDER_TYPE

Tipo de ordem

ENUM_ORDER_TYPE

ORDER_STATE

Estado de uma ordem

ENUM_ORDER_STATE

ORDER_TIME_EXPIRATION

Hora de expiração de uma ordem

datetime

ORDER_TIME_DONE

Hora de execução ou cancelamento de uma ordem

datetime

ORDER_TIME_SETUP_MSC

O tempo para colocar uma ordem de execução em milissegundos desde 01.01.1970

long

ORDER_TIME_DONE_MSC

Tempo de execução e cancelamento de ordens em milissegundos desde 01.01.1970

long

ORDER_TYPE_FILLING

Type de preenchimento de uma ordem

ENUM_ORDER_TYPE_FILLING

ORDER_TYPE_TIME

tempo de duração de uma ordem

ENUM_ORDER_TYPE_TIME

ORDER_MAGIC

ID de um Expert Advisor que colocou a ordem (projetado para garantir que cada Expert Advisor coloque seu próprio número único)

long

ORDER_REASON

Razão ou origem para a colocação da ordem

ENUM_ORDER_REASON

ORDER_POSITION_ID

Identificador de posição que é definido para uma ordem tão logo ela é executada. Cada ordem executada resulta em uma operação que abre ou modifica uma posição já existente. O identificador desta exata posição é atribuída à ordem executada neste momento.

long

ORDER_POSITION_BY_ID

Identificador da posição oposta para as ordens do tipo

long

Para as funções OrderGetDouble() e HistoryOrderGetDouble()

ENUM_ORDER_PROPERTY_DOUBLE

Identificador

Descrição

Tipo

ORDER_VOLUME_INITIAL

Volume inicial de uma ordem

double

ORDER_VOLUME_CURRENT

Volume corrente de uma ordem

double

ORDER_PRICE_OPEN

Preço especificado na ordem

double

ORDER_SL

Valor de Stop Loss

double

ORDER_TP

Valor de Take Profit

double

ORDER_PRICE_CURRENT

O preço corrente do ativo de uma ordem

double

ORDER_PRICE_STOPLIMIT

O preço de ordem Limit para uma ordem StopLimit

double

Para as funções OrderGetString() e HistoryOrderGetString()

ENUM_ORDER_PROPERTY_STRING

Identificador

Descrição

Tipo

ORDER_SYMBOL

Ativo (symbol) de uma ordem

string

ORDER_COMMENT

Comentário sobre a ordem

string

 

Ao enviar uma solicitação de negociação usando a função OrderSend(), algumas operações requerem a indicação do tipo da ordem. O tipo de uma ordem é especificado no campo type da estrutura especial MqlTradeRequest, e pode aceitar valores da enumeração ENUM_ORDER_TYPE.

ENUM_ORDER_TYPE

Identificador

Descrição

ORDER_TYPE_BUY

Ordem de Comprar a Mercado

ORDER_TYPE_SELL

Ordem de Vender a Mercado

ORDER_TYPE_BUY_LIMIT

Ordem pendente Buy Limit

ORDER_TYPE_SELL_LIMIT

Ordem pendente Sell Limit

ORDER_TYPE_BUY_STOP

Ordem pendente Buy Stop

ORDER_TYPE_SELL_STOP

Ordem pendente Sell Stop

ORDER_TYPE_BUY_STOP_LIMIT

Ao alcançar o preço da ordem, uma ordem pendente Buy Limit é colocada no preço StopLimit

ORDER_TYPE_SELL_STOP_LIMIT

Ao alcançar o preço da ordem, uma ordem pendente Sell Limit é colocada no preço StopLimit

ORDER_TYPE_CLOSE_BY

Ordem de fechamento da posição oposta

 

Cada ordem tem um status que descreve o seu estado. Para obter informações, use OrderGetInteger() ou HistoryOrderGetInteger() com o modificador ORDER_STATE. Valores permitidos são armazenados na enumeração ENUM_ORDEM_STATE.

ENUM_ORDER_STATE

Identificador

Descrição

ORDER_STATE_STARTED

Ordem verificada, mas ainda não aceita pela corretora (broker)

ORDER_STATE_PLACED

Ordem aceita

ORDER_STATE_CANCELED

Ordem cancelada pelo cliente

ORDER_STATE_PARTIAL

Ordem executada parcialmente

ORDER_STATE_FILLED

Ordem executada completamente

ORDER_STATE_REJECTED

Ordem rejeitada

ORDER_STATE_EXPIRED

Ordem expirada

ORDER_STATE_REQUEST_ADD

Ordem está sendo registrada (aplicação para o sistema de negociação)

ORDER_STATE_REQUEST_MODIFY

Ordem está sendo modificada (alterando seus parâmetros)

ORDER_STATE_REQUEST_CANCEL

Ordem está sendo excluída (excluindo a partir do sistema de negociação)

 

Ao enviar uma ordem de negociação para ser executada no momento atual (time in force) é necessário especificar o preço e o volume de compra/venda. Ao fazer isso, vale a pena recordar que nos mercados financeiros não existe garantia de que num dado momento para dado ativo financeiro todo o volume solicitado estará disponível ao preço pretendido. É por esse motivo que a realização de operações de negociação em tempo real é regulada pelos modos de execução com base no preço e no volume. Os modos, ou seja, as políticas de execução, definem as regras para os casos em que o preço mudou ou o volume solicitado não pode ser totalmente cumprido no momento.

Modo de execução do preço - pode ser obtido na propriedade do símbolo SYMBOL_TRADE_EXEMODE que contém uma combinação de flags a partir da enumeração ENUM_SYMBOL_TRADE_EXECUTION.

Modo de execução

Descrição

Valor em ENUM_SYMBOL_TRADE_EXECUTION

Modo de execução

 

(Request Execution)

Execução da ordem de mercado ao preço previamente recebido da corretora.

 

Antes de uma ordem de mercado ser enviada, são solicitados à corretora os preços pelos qual ela será executada. Após serem recebidos, a execução da ordem a um determinado preço pode ser confirmada ou rejeitada.

SYMBOL_TRADE_EXECUTION_REQUEST

Execução imediata

 

(Instant Execution)

Execução imediata de uma ordem de mercado ao preço especificado.

 

Ao enviar uma ordem de negociação para ser executada, a plataforma substitui automaticamente os preços atuais na ordem.

  • Se a corretora aceitar o preço, a ordem será executada.
  • Se a corretora não aceitar o preço solicitado, ocorre a chamada "recotação" (Requote) - a corretora retorna os preços aos quais a ordem pode ser executada.

SYMBOL_TRADE_EXECUTION_INSTANT

Execução a mercado

 

(Market Execution)

A decisão sobre o preço de execução é feita pela corretora sem acordo adicional com o trader.

 

O envio de uma ordem a mercado nesta modalidade implica que se aceita antecipadamente o preço a que será executada.

SYMBOL_TRADE_EXECUTION_MARKET

Execução de bolsa

 

(Exchange Execution)

As operações de negociação são realizadas aos preços das cotações atuais de mercado.

SYMBOL_TRADE_EXECUTION_EXCHANGE

Política de preenchimento de volume— especificada na propriedade ORDER_TYPE_FILLING da ordem e só pode conter valores da enumeração ENUM_ORDER_TYPE_FILLING

Política de execução

Descrição

Valor em ENUM_ORDER_TYPE_FILLING

Tudo/Nada (Fill or Kill)

A ordem pode ser executada apenas com o volume especificado.

 

Se não houver volume do ativo financeiro no mercado não for suficiente no momento, a ordem não será executada.

 

O volume necessário pode ser composto por diversas ofertas atualmente disponíveis no mercado.

 

A possibilidade de usar ordens FOK é determinada no servidor de negociação.

ORDER_FILLING_FOK

Tudo/Parcial (Immediate or Cancel)

O trader aceita executar a transação com o volume máximo disponível no mercado, dentro dos limites especificados na ordem.

 

Se a execução completa não for possível, a ordem será executada com o volume disponível, e o volume não executado da ordem será cancelado.

 

A possibilidade de usar ordens IOC é determinada no servidor de negociação.

 

ORDER_FILLING_IOC

Retornar (Return)

Em caso de execução parcial, a ordem com o volume residual continua em vigor, em vez de ser removida.

 

Ordens Return não são permitidas no modo Market Execution (execução de ordens a mercado - SYMBOL_TRADE_EXECUTION_MARKET).

ORDER_FILLING_RETURN

Ao enviar a ordem de negociação usando a função OrderSend(), a devida política de execução quanto ao volume pode ser definida no campo type_filling na estrutura especial MqlTradeRequest, com valores válidos da enumeração ENUM_ORDER_TYPE_FILLING. Para obter o valor desta propriedade em uma ordem específica ativa/concluída, use a função OrderGetInteger() ou HistoryOrderGetInteger() com o modificador ORDER_TYPE_FILLING.

Antes de enviar uma ordem para ser executada no momento atual, para a correta configuração do valor ORDER_TYPE_FILLING (tipo de execução por volume), para cada ativo financeiro por meio da função SymbolInfoInteger() você pode obter o valor da propriedade SYMBOL_FILLING_MODE que mostra os tipos de preenchimento por volume (permitidos para este símbolo) como uma combinação de flags. Deve-se observar que o tipo de preenchimento ORDER_FILLING_RETURN é sempre permitido, exceto para o modo "Execução da mercado" (SYMBOL_TRADE_EXECUTION_MARKET).

O uso de tipos de preenchimento dependendo do modo de execução pode ser representado na forma de uma tabela:

Modo de execução\Política de preenchimento

Tudo/Nada (FOK ORDER_FILLING_FOK)

Tudo/Parcial (IOC ORDER_FILLING_IOC)

Retornar (Return ORDER_FILLING_RETURN)

Execução imediata

 

(SYMBOL_TRADE_EXECUTION_INSTANT)

+ (independentemente da configuração do ativo)

+ (independentemente da configuração do ativo)

+ (sempre)

Execuções a pedido

 

SYMBOL_TRADE_EXECUTION_REQUEST

+ (independentemente da configuração do ativo)

 

+ (independentemente da configuração do ativo)

+ (sempre)

Execução a mercado

 

SYMBOL_TRADE_EXECUTION_MARKET

+ (definido nas configurações do ativo)

+ (definido nas configurações do ativo)

- (proibido independentemente da configuração do ativo)

Execução de bolsa

 

SYMBOL_TRADE_EXECUTION_EXCHANGE

+ (definido nas configurações do ativo)

+ (definido nas configurações do ativo)

+ (sempre)

Para ordens pendentes, independentemente do modo de execução (SYMBOL_TRADE_EXEMODE) é necessário utilizar o tipo de preenchimento ORDER_FILLING_RETURN, uma vez que essas ordens são executadas no momento do envio. Ao usar ordens pendentes, o trader aceita com antecedência que quando as condições para realização da transação nesta ordem forem atendidas, a corretora usará o tipo de preenchimento que é suportado por dada plataforma de negociação.

 

O período de validade de uma ordem pode ser definida no campo type_time da estrutura especial MqlTradeRequest ao enviar uma solicitação de negociação usando a função OrderSend(). Valores da enumeração ENUM_ORDER_TYPE_TIME enumeration são permitidos. Para obter o valor desta propriedade use a função OrderGetInteger() ou HistoryOrderGetInteger() com o modificador ORDER_TYPE_TIME.

ENUM_ORDER_TYPE_TIME

Identificador

Descrição

ORDER_TIME_GTC

Ordem válida até cancelamento

ORDER_TIME_DAY

Ordem válida até o final do dia corrente de negociação

ORDER_TIME_SPECIFIED

Ordem válida até expiração

ORDER_TIME_SPECIFIED_DAY

A ordem permanecerá efetiva até 23:59:59 do dia especificado. Se esta hora está fora de uma sessão de negociação, a ordem expira na hora de negociação mais próxima.

 

A propriedade ORDER_REASON contém a razão para a colocação da ordem. A ordem pode ser colocada usando um programa MQL5, a partir de um aplicativo móvel ou como resultado de um evento StopOut, etc. Os valores possíveis ORDER_REASON são descritos na enumeração ENUM_ORDER_REASON.

ENUM_ORDER_REASON

Identificador

Descrição

ORDER_REASON_CLIENT

Ordem colocada a partir de um terminal desktop

ORDER_REASON_MOBILE

Ordem colocada a partir de um aplicativo móvel

ORDER_REASON_WEB

Ordem colocada a partir da plataforma web

ORDER_REASON_EXPERT

Ordem colocada a partir de um programa MQL5, Expert Advisor ou script

ORDER_REASON_SL

Ordem colocada como resultado da ativação do Stop Loss

ORDER_REASON_TP

Ordem colocada como resultado da ativação do Take Profit

ORDER_REASON_SO

Ordem colocada como resultado do evento Stop Out