Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
A captura de tela mostra as estatísticas da seqüência de chamadas e não a função SymbolInfoTick.
No total, a corda dada foi medida 210 vezes, uma vez que foi "parada" exatamente na corda, antes da chamada SymbolInfoTick ou logo após, e 209 vezes como a corda de retorno de SymbolInfoTick
Desculpe, mas não está claro.
O resumo do profiler diz:
SymbolInfoTick () Total de CPU: 209 (0,83%)
O próprio código diz:
SymbolInfoTick () Total de CPU: 210 (2,57%)
SymbolInfoTick () ocorre apenas UMA vez no código. O que estes diferentes valores não são de forma alguma claros. OK, 209 contra 210, você disse que é porque "parou" um naquela linha (não faz sentido para mim, mas acho que não importa muito).
E quanto à %?
0 2021.07.10 11: 52: 19.032 MQL5 Profiler Medidas totais 25039, erros 0/0, memória de pilha de 99 MB analisada (92872/10737418424)
Portanto 209 (0,83%) significa 100% = 25039. OK
Mas 210 (2,57%) significa 100% = 8171?!? O que é 8171 para CPU Total?
E quanto a isto ( post #1 )?
Como você pode ver, SymbolInfoTick () é mostrado como a parte mais difícil do código. O que é incorreto. Este é o mesmo código dos seguintes posts (que mostra SymbolInfoTick com Total CPU = 209 (0,83%), o que é correto), a diferença é que eu comentei a linha onde SymbolInfoTick () era Total CPU = 1. O tempo total de execução (de acordo com dados históricos) não mudou com esta pequena mudança, mas os resultados do perfilador foram diferentes.
Eu posso fornecer o código em particular se você quiser verificar.
Sinto muito, mas não está claro.
O resumo do profiler diz:
SymbolInfoTick () Total de CPU: 209 (0,83%)
O próprio código diz:
SymbolInfoTick () Total de CPU: 210 (2,57%)
SymbolInfoTick () ocorre apenas UMA vez no código. O que estes diferentes valores não são de forma alguma claros. OK, 209 contra 210, você disse que é porque "parou" um naquela linha (não faz sentido para mim, mas acho que não importa muito).
E quanto à %?
0 2021.07.10 11: 52: 19.032 MQL5 Profiler Medidas totais 25039, erros 0/0, memória de pilha de 99 MB analisada (92872/10737418424)
Portanto 209 (0,83%) significa 100% = 25039. OK
Mas 210 (2,57%) significa 100% = 8171?!? O que é 8171 para CPU Total?
Você está comparando estatísticas para "linha de código" e para "função"
Há uma linha de código
Um total de 210 vezes esta seqüência foi incluída nas estatísticas:
Há uma função SymbolInfoTick, esta função atingiu as estatísticas 209 vezes.
A função só é chamada a partir desta linha de código, talvez por isso você tenha se confundido com os contadores
Quanto aos números:
não é, os números são apenas semelhantes: 209 / 0,83 * 100 = 25180
Mas 210 (2,57%) significa 100% = 8171?!? O que é 8171 para CPU Total?
Correto, de 25039 medidas, 8171 delas vieram da linha de código com a chamada SymbolInfoTick
Alain Verleyen:
O backtest funcionando em:
2021.07.10 08:00: 37.101 Core 01 EURUSD, H1: 230861 carrapatos, 998 barras geradas. O teste passou em 0: 03: 09.367 (incluindo o pré-processamento de carrapatos 0: 00: 00.515).
Adicionei código para medir o tempo de execução do SymbolInfoTick () usando GetMicrosecondCount ().
Resultado:
2021.07.10 08:00: 37.101 Core 01 2021.05.30 23:59:59 Total = 1209572 Executado = 836973 em 661874 microssegundos
Assim, o SymbolInfoTick () levou um total de 661 milissegundos sobre os dados históricos em 3 minutos e 9 segundos. Entretanto, o perfilador mostra que utiliza 74,71% das medidas. Como isto é preciso ou útil, eu não entendo.
Deixe-me ser claro, testar não se trata apenas de executar o código MQL + o profiler, capturando estatísticas, retarda um pouco a execução.
Dito isto, no relatório, 74,71% é um número relativo ao código MQL, e não testes em geral.
Olá @Ilyas!
Obrigado. Vou verificar novamente com suas respostas e mantê-lo-ei informado.
Quanto aos números:
não é, os números são apenas semelhantes: 209 / 0,83 * 100 = 25180
Correto, de 25039 medidas, 8171 delas vieram da linha de código com a chamada SymbolInfoTick
Eu me enganei nos números.
De fato, 209 é 0,83469% de 25039, o que foi arredondado para 0,83
8171 amostras foram coletadas na linha com SymbolInfoTick chamada 210 vezes, ou seja, 2,57%.
Eu me enganei nos números.
De fato, 209 é 0,83469% de 25039 arredondado para 0,83
8171 execuções foram em um ramo de execução de programa onde a linha que chama SymbolInfoTick foi executada 210 vezes, ou seja, 2,57%.
Execução da OnTimer (), então não está bem claro porque é 8171? Quando OnTimer () Total de CPU mostra 29683.
Por favor, forneça o código, eu verificarei novamente o funcionamento dos balcões
Por favor, forneça o código, eu verificarei novamente o funcionamento dos balcões
Ilyas, ajude-me a descobrir isso também.
1. Por que uma chamada de função vazia pode levar 34,5% de Auto CPU? Ao mesmo tempo, a chamada da função que a segue, cujos internos ocupam 38,16% do total da CPU, não aparece de forma alguma no relatório?
Código de função:
2. Este exemplo mostra o segundo problema: a linha com TimeCurrent() leva um tempo exageradamente longo não apenas dentro da função, mas no programa em geral:
Antes de comentar o corpo da CheckTimeSeries(), a carga principal estava em sua linha TimeCurrent().
É realmente uma função tão pesada? Com o que substituí-lo? Ou como torná-lo econômico (caching dentro de um loop da execução do programa)?
Onde quer que eu possa, eu salvo os cálculos, diluindo-os (uma vez por barra, uma vez a cada X segundos, uma vez a cada Y ms, etc.). Mas acontece que a verificação em si, se deve ou não fazer os cálculos, é bastante intensiva em recursos.
Obrigado pela ajuda.