Ajuda para o MetaEditorDesenvolvimento de programasCriação de perfil de código

Criação de perfil de código

A criação de perfil é a coleção das características do programa durante sua execução. Ao criar o perfil, são medidos o tempo de execução e o número de chamadas de funções e linhas individuais no código do programa. Com essa ferramenta, o programador pode encontrar as seções mais lentas do código e otimizá-las.

O processo de criação de perfil pode ser realizado num gráfico habitual - na plataforma de negociação -, bem como nos dados do histórico usando o testador de estratégias. No primeiro caso, o programa será executado no gráfico, que, por sua vez, é atualizado em tempo real. Você poderá verificar como o programa irá se comportar em condições de uso do mundo real. No segundo caso, o programa será executado no testador de estratégias no modo visual. A vantagem deste método é que você não precisa esperar a entrada de dados reais a partir do servidor de negociação ou a ocorrência de certas condições de negociação.

Muitos programas, especialmente os indicadores, realizam cálculos apenas quando chega um novo tick (OnTick, OnCalculate). Assim, para avaliar o desempenho, é necessário aguardar a entrada de novos ticks em tempo real. Usando a criação de perfis em dados históricos, você pode imediatamente fornecer a carga correta e verificar o trabalho dos programas mesmo nos fins de semana, quando os mercados estão fechados.

Como funciona a criação de perfil

Para criação de perfil agora é usado o método "Sampling". O criador de perfil faz uma pausa durante a operação de um programa MQL (~10 000 vezes por segundo) e coleta estatísticas sobre quantas vezes ocorre uma pausa em uma seção específica do código. Isso inclui a análise de pilhas de chamadas para determinar a "contribuição" de cada função no tempo total de operação do código. No final da criação de perfil, você obtém informações sobre quantas vezes há uma pausa e quantas vezes cada uma das funções acaba na pilha de chamadas:

  • Atividade total da CPU [unidade de medida, %] – número total de "aparições" de uma função na pilha de chamadas.
  • Atividade intrínseca da CPU [unidade de medida, %] – número de "pausas" que ocorrerem diretamente na função especificada. Este contador é mais importante para identificar gargalos, uma vez que, de acordo com as estatísticas, a parada ocorre com mais frequência nas partes do programa que requerem mais tempo de CPU.

Sampling – este é um método leve e preciso. Ao contrário da versão anterior, o novo criador de perfil não faz nenhuma alteração no código analisado que possa afetar sua velocidade de trabalho.

Configurações de perfil

Por padrão, o programa é inciado no gráfico aberto atual na plataforma de negociação. No caso de criação de perfil com base em dados históricos, são usadas as configurações atuais do testador de estratégia. Nas configurações do MetaEditor você pode definir qualquer outro gráfico e substituir algumas configurações de teste.

Depuração

Aqui você pode ativar ou desativar o inlining (incorporação) de funções ao realizar a compilação. Durante o inlining, o código das funções é colocado diretamente no local onde são chamadas, o que permite uma aceleração significativa do programa. No entanto, isso torna difícil a criação de perfil de funções. Para obter um relatório sobre funções "puras", você pode desativar o inlining.

Esta opção desativa apenas inlining explícito. As funções geradas implicitamente pelo compilador podem permanecer. Elas serão exibidas com o prefixo [inlined] no relatório.

Para aumentar o detalhamento do relatório de criação de perfil, você pode desativar o modo de otimização de código. Sem otimização, a velocidade do código pode cair exponencialmente, mas em troca, você pode ver uma cobertura de código mais ampla. Ao usá-lo leve em consideração que afunilamentos de código serão imprecisos.

A capacidade de gerenciar a otimização de código também está nas configurações do projeto.

  • Se a otimização estiver desabilitada no projeto, a nova opção será ignorada, uma vez que para criação de perfil, a otimização está sempre desabilitada (incluindo inlining).
  • Se a otimização estiver habilitada no projeto, a nova opção será considerada na compilação para o perfil.

Iniciar criação de perfil #

Abra o arquivo do código fonte do programa (MQ4 ou MQ5). No menu "Depurar" ou na barra de ferramentas "Padrão" clique "Iniciar criação de perfis em dados reaisI niciar a criação de perfil sobre dados reais" ou "Iniciar criação de perfil em dados históricos. Iniciar a criação de perfil sobre dados históricos".

Depois disso, será compilada automaticamente uma versão especial do programa para a criação de perfis. Dependendo do tipo de criação de perfil selecionado, o programa será executado num gráfico convencional na plataforma de negociação ou no testador de estratégias (no modo visual).

Execução da criação de perfil no gráfico na plataforma de negociação

  • Por padrão, o aplicativo é iniciado no gráfico EURUSD H1. Para executar num símbolo e período diferentes, especifique-os na aba "Depurar" nas opções do MetaEditor.
  • Ao criar o perfil com base no histórico, é sempre usado o modo de testador não visual. O modo visual praticamente não faz sentido, já que os principais recursos são gastos em desenho, e não em cálculos dentro do programa MQL.

Após a execução, experimente algum tempo com o aplicativo, aproveitando ao máximo todas as suas funções. Isso é necessário para que o criador de perfil possa medir o tempo de execução de todas as funções e linhas do programa.

Em seguida, interrompa a criação de perfil: remova o programa do gráfico ou clique em "Encerrar criação de perfil Concluir a criação de perfil" do menu "Depurar" ou na barra de ferramentas "Padrão".

Recomenda-se remover manualmente o programa a partir do gráfico em vez de usar o comando, para obter resultados mais precisos de criação de perfis "Encerrar criação de perfil Concluir a criação de perfil".

Exibindo resultados de criação de perfil

Após a conclusão da criação de perfil, seus resultados serão abertos na guia "Criador de perfil" da janela "Caixa de Ferramentas". Além disso, para maior clareza, os resultados são exibidos diretamente no código – destacando linhas com funções. Quanto mais brilhante a cor da luz de fundo, mais tempo demorava para concluir a função. Dessa forma, você pode avaliar de forma rápida e visual os gargalos do programa.

O relatório de perfil é apresentado como funções ou linhas de programa que dispõem de dois indicadores:

  • Atividade total da CPU [unidade de medida, %] – número total de "aparições" de uma função na pilha de chamadas.
  • Atividade intrínseca da CPU [unidade de medida, %] – número de "pausas" que ocorrerem diretamente na função especificada. Este contador é mais importante para identificar gargalos, uma vez que, de acordo com as estatísticas, a parada ocorre com mais frequência nas partes do programa que requerem mais tempo de CPU.

Como indicador, são exibidas a quantidade absoluta e a porcentagem do total.

Por padrão, a lista mostra funções grandes localizadas nos níveis superiores. Para ir para as menores, clique duas vezes na linha.

Resultados da criação de perfil

O relatório de perfil pode ser visualizado em dois modos: por chamadas e por linhas. O segundo método permite que você explore com o máximo de detalhes – para encontrar não apenas as funções mais lentas, mas também suas partes mais lentas. Use o menu de contexto para alternar entre os modos.

Por conveniência, vários elementos da linguagem MQL são exibidos no relatório como ícones:

  • Função personalizada – função personalizada.
  • Função de sistema – função de sistema.
  • Função de processamento de eventos – função de processamento de eventos (On*).
  • Método de classe – método de classe.
  • Método protegido de classe – método protegido de classe

Além desses tipos de funções, o criador de perfil exibe:

  • Função de sistema@global_initializations – informações sobre a inicialização de todas as variáveis ​​globais.
  • Função de sistema@global_deinitializations – informações sobre a desinicialização de todas as variáveis ​​globais.

O número da linha e o caminho para o arquivo onde a função está localizada podem ser visualizados passando o cursor do mouse sobre a linha no relatório. Para visualizar a função no arquivo, clique duas vezes nele.

O criador de perfil não exibe todas as funções, mas sim apenas aquelas que foram chamadas durante o funcionamento do programa.

Menu contextual #

Os seguintes comandos estão disponíveis no menu de contexto:

  • Abrir – vai para a linha ou função no arquivo do código fonte. A mesma ação pode ser executada com um duplo clique ou Enter.
  • Expandir tudo – expande todas as funções minimizadas.
  • Recolher tudo – recolhe todas as funções implementadas.
  • Funções por linhas – muda para o modo de visualização de resultados de criação de perfil por linhas.
  • Funções por chamadas – muda para o modo de visualização de resultados de criação de perfil por chamadas.
  • Exportar – exporta os resultados de criação de perfil no formato Open XML (MS Office Excel), HTML (Internet Explorer) ou CSV (arquivo de texto).
  • Autodimensionar – ativa/desativa a configuração automática do tamanho do campo. A mesma ação é executada com a tecla "A".
  • Grade – ativa/desativa a grade que separa os campos. A mesma ação é executada com a tecla "G".