Ao realizar algumas ações específicas em uma conta de negociação, seu estado muda. Tais ações includem:
As seguintes transações de negociação são realizadas como resultado destas ações:
Por exemplo, ao enviar uma ordem de mercado para compra, ele é processado, para a conta cria-se a respetiva ordem para compra, a ordem é executada, excluída da lista de ordens abertas, adicionada ao histórico de ordens, a seguir, a transação respetiva é adicionada ao histórico e, finalmente, é criada uma nova posição. Todas estas ações são transações financeiras.
Para obter transações financeiras, aplicadas à conta, a MQL5 dispõe de um processador especial chamado de OnTradeTransaction (). Ao primeiro parâmetro deste processador é transferida a estrutura MqlTradeTransaction, que descreve a transação financeira.
struct MqlTradeTransaction
|
Descrição dos Campos
Campo |
Descrição |
|---|---|
deal |
Bilhetagem (ticket) da operação. |
order |
Bilhetagem (ticket) da ordem. |
symbol |
O nome do ativo da negociação, para o qual a transação é realizada. |
type |
Tipo de transação de negociação. O valor pode ser um dos valores da enumeração ENUM_TRADE_TRANSACTION_TYPE. |
order_type |
Tipo de ordem de negociação. O valor pode ser um dos valores da enumeração ENUM_ORDER_TYPE. |
order_state |
Estado da ordem de negociação. O valor pode ser um dos valores da enumeração ENUM_ORDER_STATE. |
deal_type |
Tipo de operação. O valor pode ser um dos valores da enumeração ENUM_DEAL_TYPE. |
time_type |
Tipo de ordem quanto a expiração. O valor pode ser um dos valores da enumeração ENUM_ORDER_TYPE_TIME. |
time_expiration |
Período de expiração de uma ordem pendente (para ordens dos tipos ORDER_TIME_SPECIFIED e ORDER_TIME_SPECIFIED_DAY). |
price |
Preço. Dependendo do tipo de transação de negociação, ele pode ser um preço de uma ordem, de uma operação (deal), ou de uma posição. |
price_trigger |
Preço stop (de ativação) de uma ordem Stop Limit (ORDER_TYPE_BUY_STOP_LIMIT e ORDER_TYPE_SELL_STOP_LIMIT). |
price_sl |
Preço Stop Loss. Dependendo do tipo de transação de negociação, ele pode estar relacionado a uma ordem, a uma operação (deal) ou a uma posição. |
price_tp |
Preço Take Profit. Dependendo do tipo de transação de negociação, ele pode estar relacionado a uma ordem, a uma operação (deal) ou a uma posição. |
volume |
Volume em lotes. Dependendo do tipo de transação de negociação, ele pode indicar o valor corrente de uma ordem, de uma operação (deal), ou de uma posição. |
position |
Bilhete da posição que foi afetado pela transação. |
position_by |
Bilhete da posição oposta. Utiliza-se ao fechar uma posição usando outra oposta, se estiver aberta no mesmo instrumento, mas na direção oposta. |
O parâmetro essencial para análise de uma transação recebida é o seu tipo, especificado no campo type. Por exemplo, se uma transação é do tipo TRADE_TRANSACTION_REQUEST (um resultado de operar uma negociação requisitada pelo servidor foi recebido), a estrutura possui apenas um campo único que é completamente preenchido - type. Outros campos não são analisados. Neste caso, nós podemos analisar dois parâmetros adicionais, request e result, submetidos ao handler OnTradeTransaction(), como mostrado abaixo.
Tendo dados sobre um tipo de operação de negociação, você pode decidir sobre a análise do estado corrente de ordens, posições e operações (deals) em um conta de negociação. Lembre-se que uma solicitação de negociação enviada ao servidor a partir do terminal pode gerar várias novas transações. A prioridade de chegada delas no terminal não é garantida.
A estrutura MqlTradeTransaction é preenchida de diferentes maneiras dependendo do tipo de transação de negociação (ENUM_TRADE_TRANSACTION_TYPE):
TRADE_TRANSACTION_ORDER_* e TRADE_TRANSACTION_HISTORY_*
Os seguintes campos na estrutura MqlTradeTransaction são preenchidos para transações de negociação relacionados a manipulação de abertura de ordens (TRADE_TRANSACTION_ORDER_ADD, TRADE_TRANSACTION_ORDER_UPDATE e TRADE_TRANSACTION_ORDER_DELETE) e histórico de ordens (TRADE_TRANSACTION_HISTORY_ADD, TRADE_TRANSACTION_HISTORY_UPDATE, TRADE_TRANSACTION_HISTORY_DELETE):
TRADE_TRANSACTION_DEAL_*
Os seguintes campos na estrutura MqlTradeTransaction são preenchidos para transações de negociação relacionados a manipulação de operações (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE e TRADE_TRANSACTION_DEAL_DELETE):
TRADE_TRANSACTION_POSITION
Os seguintes campos na estrutura MqlTradeTransaction são preenchidos para transações de negociação relacionado a mudança de posições não conectados com execução de operações (deals) (TRADE_TRANSACTION_POSITION):
Alteração de Posição (adição, alteração, encerramento), como resultado de uma execução de operação (deal), não leva a ocorrência de transação de TRADE_TRANSACTION_POSITION. |
TRADE_TRANSACTION_REQUEST
Somente um campo na estrutura MqlTradeTransaction é preenchido para transações de negociação descrevendo o fato de que uma solicitação de negociação foi processada por um servidor e que o resultado do processamento foi recebido (TRADE_TRANSACTION_REQUEST):
Somente o campo type (tipo de transação de negociação) de ser analisado para tais transações. O segundo e terceiro parâmetros (request e result) da função OnTradeTransaction deve ser analisado para dados adicionais. |
Exemplo:
input int MagicNumber=1234567; |
Também Veja