- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnTradeTransaction
É chamada em EAs quando ocorre o evento TradeTransaction. A função é projetada para processar os resultados de execução da solicitação de negociação.
void OnTradeTransaction()
|
Parâmetros
trans
[in] Variável do tipo MqlTradeTransaction com descrição da transação feita na conta de negociação.
request
[in] Variável do tipo MqlTradeRequest com descrição da solicitação que gerou a transação. Contém os valores apenas para a transação de tipo TRADE_TRANSACTION_REQUEST.
result
[in] Variável do tipo MqlTradeResult com resultado da execução da solicitação que gerou a transação. Contém os valores apenas para a transação de tipo TRADE_TRANSACTION_REQUEST.
Valor retornado
Sem valor retornado
Observação
OnTradeTransaction() é chamada para manipular o evento TradeTransaction que o servidor de negociação envia para o terminal nos seguintes casos:
- envio da solicitação de negociação a partir do programa MQL5 usando as funções OrderSend()/OrderSendAsync() e sua posterior execução;
- envio manual da solicitação de negociação através da interface gráfica e sua posterior execução;
- desencadeamento de ordens pendentes e ordens stop no servidor;
- execução de operações no lado do servidor de negociação.
Informações sobre o tipo de transação são contidas no campo type da variável trans. Os tipos de trasações comerciais são descritas na enumeração ENUM_TRADE_TRANSACTION_TYPE:
- TRADE_TRANSACTION_ORDER_ADD adição de uma nova ordem ativa
- TRADE_TRANSACTION_ORDER_UPDATE alteração da ordem ativa
- TRADE_TRANSACTION_ORDER_DELETE remoção da ordem da lista de ordens ativas
- TRADE_TRANSACTION_DEAL_ADD adição da transação ao histórico
- TRADE_TRANSACTION_DEAL_UPDATE alteração da transação no histórico
- TRADE_TRANSACTION_DEAL_DELETE remoção da transação do histórico
- TRADE_TRANSACTION_HISTORY_ADD adição da ordem ao histórico como resultado da execução ou do cancelamento
- TRADE_TRANSACTION_HISTORY_UPDATE alteração da ordem que se encontra no histórico de ordens
- TRADE_TRANSACTION_HISTORY_DELETE remoção da ordem do histórico de ordens
- TRADE_TRANSACTION_POSITION alteração da posição não relacionada à execução da transação
- TRADE_TRANSACTION_REQUEST notificação de que a solicitação de negociação foi processada pelo servidor e o resultado de seu processamento foi recebido.
Ao processar transações do tipo TRADE_TRANSACTION_REQUEST, para obter informações adicionais, é necessário analisar os segundo e terceiro parâmetros da função OnTradeTransaction() request e result.
O envio de uma solicitação de compra leva a uma cadeia de transações comerciais feitas na conta de negociação: 1) a solicitação é aceita para ser processada, 2) para a conta é criada a respectiva solicitação de compra, 3) é executada a ordem, 4) a ordem executada é removida da lista de ordens ativas, 5) adicionada ao histórico de ordens, 6) a transação correspondente é adicionada ao histórico e 7) é criada uma nova posição. Todas essas ações são transações comerciais. A chegada de cada transação desse tipo no terminal é um evento TradeTransaction. FFNeste caso, não é garantida a ordem de recepção destas transações ao terminal, portanto, não se pode construir seu próprio algoritmo de negociação na expectativa de receber certas transações comerciais após a chegada de outras.
Quando EA processa transações comerciais usando o manipulador OnTradeTransaction(), o terminal continua processando as transações recém-chegadas. Assim, o estado da conta de negociação pode mudar já durante o funcionamento da OnTradeTransaction(). Por exemplo, enquanto o programa MQL5 manipula o evento de adição de nova ordem, ela pode ser executada, excluída da lista de pedidos ordens abertas e movida para o histórico. No futuro, o programa será notificado de todos esses eventos.
O comprimento da fila de transações é de 1 024 itens. Se a OnTradeTransaction() demorar a processar a seguinte transação muito tempo, as transações anteriores na fila poderão ser substituídas por transações mais recentes.
O manipulador OnTrade() é chamado após as respectivas chamadas da OnTradeTransaction(). Em geral, não há correlação exata no número de chamadas da OnTrade() e da OnTradeTransaction(). Uma chamada da OnTrade() corresponde a uma ou mais chamadas da OnTradeTransaction.
Cada evento Trade pode ser o resultado de uma ou mais solicitações de negociação. As solicitações de negociação são enviadas para o servidor usando OrderSend() ou OrderSendAsync(). Cada solicitação pode gerar vários eventos de negociação. Você não pode confiar na regra «Uma solicitação - Um evento 'Trade'», já que o processamento de solicitações pode ocorrer em vários estágios e cada operação pode alterar o status de ordens, de posições e do histórico de negociação.
Exemplo de EA com manipulador OnTradeTransaction()
//+------------------------------------------------------------------+
|
Veja também
OrderSend, OrderSendAsync, OnTradeTransaction, Estrutura do pedido de negociação, Estrutura da transação comercial, Tipos de transações comerciais, Tipos de operações de negociação, Eventos do terminal do cliente