- Execução de Programa
- Trade permission
- Eventos do Terminal Cliente
- Recursos
- Chamadas de Funções Importadas
- Erros em Tempo de Execução
- Testando Estratégias de Negociação
Eventos do Terminal Cliente
Init #
Imediatamente após o terminal cliente carregar um programa (uma Expert Advisor ou um indicador customizado) e começar o processo de inicialização de variáveis globais, o evento Init será enviado, e será processado pelo handler de evento OnInit(), caso exista. Este evento também é gerado após um instrumento financeiro e / ou prazo gráfico ser alterado, depois de um programa ser recompilado no MetaEditor, depois dos parâmetros de entrada serem alterados a partir da janela de configuração de um Expert Advisor ou um indicador personalizado. Um Expert Advisor é também inicializado após a conta ser alterada. O evento Init não é gerado para scripts.
Deinit #
Antes de variáveis globais serem desinicializadas e o programa (Expert Advisor ou indicador customizado) ser descarregado, o terminal cliente envia o evento Deinit para o programa. Deinit é também gerado quando o terminal cliente é encerrado, quando um gráfico é fechado, logo antes o ativo e/ou período ser alterado, em uma recompilação de programa bem sucedida, quando parâmetros de input são alterados e quando a conta é alterada.
O motivo de desinicialização pode ser obtido a partir do parâmetro passado para a função OnDeinit(). A execução da função OnDeinit() está restrita a 2.5 segundos. Se durante este tempo a função não for concluída, então ela é finalizada de forma forçada. O evento Deinit (Desinicializar) não é gerada para scripts.
Evento Start evento especial para executar um script ou serviço depois que ele é carregado. Este evento é tratado pela função OnStart. Evento Start não é enviado para EAs e indicadores personalizados.
NewTick #
O evento NewTick é gerado caso existam novas cotações, ele é processado pelo OnTick() de Expert Advisors anexados. No caso de uma nova cotação ser recebida enquanto a função OnTick estiver processando a cotação anterior, a nova cotação será ignorada pelo Expert Advisor, porque o evento correspondente não será enfileirado.
Todas as novas cotações que são recebidas enquanto o programa está rodando são ignoradas até que a execução da função OnTick() esteja concluída. Após isso, a função rodará somente após uma nova cotação ser recebida. O evento NewTick é gerado independentemente da negociação automática ser permitida ou não (botão "AutoTrading Permite/Proíbe"). A proibição de negociação automática significa somente que o envio de solicitações de negociação a partir de um Expert Advisor não é permitido, enquanto o Expert Advisor continua trabalhando.
A proibição de negociação automática ao apertar o botão apropriado não parará a execução corrente da função OnTick().
Calculate #
O evento Calculate é gerado somente para indicadores logo após o evento Init ser enviado e em qualquer alteração de dados de preços. Ele é processado pela função OnCalculate.
Timer #
O evento Timer é periodicamente gerado pelo terminal cliente para o Expert Advisor que ativou o timer através da função EventSetTimer. Geralmente, esta função é chamada na função OnInit. O processamento do evento Timer é realizado pela função OnTimer. Após a operação do Expert Advisor estar concluída, é necessário destruir o timer usando a função EventKillTimer, que é geralmente chamada na função OnDeinit.
Trade #
O evento Trade é gerado quando uma operação de trade é concluída em um servidor de negociação. O evento Trade é tratado pela função OnTrade() para as seguintes operações de negociação:
- envio, modificação e remoção de uma ordem pendente;
- cancelamento de uma ordem pendente com ausência de dinheiro suficiente ou expiração;
- ativação de uma ordem pendente;
- abertura, acréscimo ou encerramento de uma posição (ou parte da posição);
- modificação da posição aberta (alteração de stops - Stop Loss e/ou Take Profit).
TradeTransaction #
Ao realizar algumas ações específicas em uma conta de negociação, seu estado muda. Tais ações includem:
- Envio de uma solicitação de negociação a partir de algum aplicativo MQL5 no terminal usando as funções OrderSend e OrderSendAsync e sua posterior execução.
- Envio de uma solicitação de negociação por meio da interface gráfica do terminal e sua posterior execução.
- Ativação de ordens pendentes e ordens de stop no servidor.
- Realização de operações no lado de um servidor de negociação.
As seguintes transações de negociação são realizadas como resultado destas ações:
- tratamento de uma solicitação de negociação
- mudança de ordens de abertura
- mudança de histórico de ordens
- mudança de histórico de operações (deals)
- mudança de posições
Por exemplo, ao enviar uma ordem de compra de mercado, ela é tratada, uma ordem de compra apropriada é criada para a conta, a ordem é então executada e removida da lista de ordens em aberto, e então ela é adicionada ao histórico de ordens, uma apropriada operação (deal) é adicionada ao histórico e uma nova posição é criada. Todas estas ações são transações de negociação. A chegada de tal transação no terminal é um evento TradeTransaction. Este evento é tratado pela função OnTradeTransaction.
Tester #
O evento Tester é gerado após um teste de um Expert Advisor sob dados de histórico ter acabado. O evento é tratado pela função OnTester().
TesterInit #
O evento TesterInit é gerado no início de uma otimização no Provador de Estratégia antes do primeiro passo de otimização. O evento TesterInit é tratado pela função OnTesterInit().
TesterPass #
O evento TesterPass é gerado quando uma nova estrutura de dados é recebido. O evento TesterPass é tratado pela função OnTesterPass().
TesterDeinit #
O evento TesterDeinit é gerado após o fim de um otimização de um Expert Advisor no Provador de Estratégia. O evento TesterDeinit é tratado pela função OnTesterDeinit().
ChartEvent #
O evento ChartEvent é gerado pelo terminal cliente quando um usuário está trabalhando com um gráfico:
- pressionar de teclado, quando a janela de gráfico está com foco
- objeto gráfico criado
- objeto gráfico excluído
- pressionar de mouse sobre um objeto gráfico do gráfico
- movimentação do objeto gráfico usando o mouse
- fim de edição de texto no LabelEdit
Também existe o evento customizado ChartEvent, que pode ser enviado para um Expert Advisor através de qualquer programa mql5 por meio do uso da função EventChartCustom. O evento é processado pela função OnChartEvent.
BookEvent #
O evento BookEvent é gerado pelo terminal cliente após a Profundida de Mercado ser alterada; ele é processado pela função OnBookEvent. Para começar a geração de BookEvent para um ativo especificado, é necessário subscrever o ativo para este evento através do uso da função MarketBookAdd.
Para desfazer a subscrição de BookEvent para um ativo especificado, é necessário chamar a função MarketBookRelease. O evento BookEvent é um evento do tipo-transmissão - isso significa que é suficiente inscrever apenas um Consultor Especializado (Expert Advisor) para este evento, e todos os outros Consultores Especializados (Expert Advisors) que têm o manipulador de eventos OnBookEvent, vão recebê-lo. É por isso que é necessário analisar o nome do ativo, que é passado para um handler como um parâmetro.
Também Veja
Handlers de Evento, Execução de Programa