Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 829

 

Há uma questão deste formato: existe este código

int P=3;

if(P===5){então é necessário entrar na biblioteca e calcular algo}

Nesta situação P=3, ou seja, a condição é falsa. A questão é: o compilador vai entrar na biblioteca e rodar o código ociosamente ou o compilador vai ler o código no arquivo atual? Explicarei por que eu estava perguntando isso. Bem, olhe, suponha que escrevemos a seguinte condição de formato

int Y=4;

if(Y===4){do something} else{do something else}. Nesta situação obtemos a seguinte figura Y==4, a primeira que podemos dizer, o operador prioritário foi executado, mas o outro bloco (fazer outra coisa) também será verificado e computado (apenas computado e sempre), mas não executado, porque a prioridade é uma expressão if(Y===4). Em outras palavras, independentemente do resultado verdadeiro, a máquina faz todos os cálculos, ou seja, gasta energia nos cálculos, independentemente de o operador secundário ser executado ou não. Se eu usar grandes programas e bibliotecas, e o compilador irá sempre cavar o código da biblioteca, eventualmente irá retardar o programa. Quão eficaz será o uso de bibliotecas neste caso, devo usar o código mql4 em si o mais conciso possível para tornar o desempenho do robô alto? Quem tem alguma idéia sobre este assunto?

 
Pavel Soin:

Olá.

Digamos que eu tenho 2 indicadores, o primeiro tem 4 amortecedores, o segundo tem 2. Coloquei-os em um gráfico e abri a janela de dados (CTRL+D). A lista contém 6 buffers de 0 a 5. Como posso ler o valor do buffer 5, digamos, a partir desta lista em MQL? Não é conveniente usar o iCustom pelo indicador requerido. É mais conveniente utilizar esta lista. Eu sei que eles fazem isso, mas como?

Alguém pode me ajudar?

 
Seric29:

Há uma questão deste formato: existe este código

int P=3;

if(P===5){então é necessário entrar na biblioteca e calcular algo}

Nesta situação P=3, ou seja, a condição é falsa. A questão é: o compilador vai entrar na biblioteca e executar o código ociosamente ou o compilador vai ler o código no arquivo atual? Explicarei por que eu estava perguntando isso. Bem, olhe, suponha que escrevemos a seguinte condição de formato

int Y=4;

if(Y===4){do something} else{do something else}. Nesta situação obtemos a seguinte figura Y==4, a primeira que podemos dizer, o operador prioritário foi executado, mas o outro bloco (fazer outra coisa) também será verificado e computado (apenas computado e sempre), mas não executado, porque a prioridade é uma expressão if(Y===4). Em outras palavras, independentemente do resultado verdadeiro, a máquina faz todos os cálculos, ou seja, gasta energia nos cálculos, independentemente de o operador secundário ser executado ou não. Se eu usar grandes programas e bibliotecas, e o compilador irá sempre cavar o código da biblioteca, eventualmente irá retardar o programa. Quão eficaz será o uso de bibliotecas neste caso, devo usar o código mql4 em si o mais conciso possível para tornar o desempenho do robô alto? Quem tem alguma idéia sobre este assunto?

O depurador incorporado do MetaEditor responde muito bem a estas perguntas. Você deve escrever um roteiro com condições semelhantes e executá-lo passo a passo no depurador. Você verá que o programa não entrará no local onde não tem nada a fazer. Além disso, tal condição

int P = 3, Y = 4;
if(P == 5 && Y == 4)

Após verificar que P != 3 nada mais será verificado.

 
Boa tarde. Você pode me dizer o que fazer para manter todos os elementos gráficos no gráfico no fim de semana?
 
Lomonosov1991:
Boa tarde. Você pode me dizer o que fazer para manter todos os elementos gráficos no gráfico no fim de semana?
Não exclua-os
 
Alexey Viktorov:

O depurador incorporado no MetaEditor responde muito bem a estas perguntas. Escreva um roteiro com condições semelhantes e execute-o passo a passo no depurador. Você verá como o programa não entra no local onde não tem nada a fazer. Além disso, esta condição

Após verificar que P != 3 nada mais será verificado.

Aqui está um exemplo

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 neste caso é 8, mas o compilador jura pelo grande número, que eu quero colocar em uma variável, mas não vou colocar este número em uma variável porque pp=8 está correto, mas por alguma razão o compilador começa a cavar o que eu escrevi e verifica se pode ser, então concluímos que é o compilador que verifica e conta, bem, este é certamente um erro grosseiro, poderíamos cometer um erro menos grave, mas o compilador ainda verificará se pode ou não ser. Não pretendo escrever esse tipo de coisa nele, mas o compilador verificará o que deve fazer, mas não o fará e contará. Tentei trabalhar com o depurador MQL4 e li as instruções aquihttps://www.metatrader5.com/ru/metaeditor/help/development/debug, mas nem sequer vi uma guia ativa "verificar com o histórico", embora as instruções sugiram que ela deveria estar ativa.

 
Seric29:

Aqui está um exemplo

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 neste caso é 8, mas o compilador jura pelo grande número que eu quero colocar em uma variável, mas eu não vou colocar este número em uma variável porque pp=8 está correto, mas por alguma razão o compilador começa a cavar o que eu escrevi e verifica se pode ser, então concluímos que é o compilador que verifica e adiciona tudo, é claro que este é um erro grosseiro, poderíamos cometer um erro menos grave, mas o compilador ainda verificará se pode ou não ser. Não pretendo escrever esse tipo de coisa nele, mas o compilador verificará o que deve fazer, mas não o fará e contará. Tentei trabalhar com o depurador MQL4 e li as instruções daquihttps://www.metatrader5.com/ru/metaeditor/help/development/debug, mas a guia "verificar com o histórico" nem sequer está ativa, embora as instruções sugiram que deveria estar. Tentei verificar com dados reais, mas neste caso os valores das variáveis não são mostrados, não vi nada, apenas me perguntando o que está acontecendo.

O compilador verifica os valores válidos em tempo de compilação, mas não em tempo de execução. Leia mais sobre os tipos de variáveis e dentro de que faixas os valores dessas variáveis são permitidos. Se o compilador não verificar estes intervalos, você pode perder valores no momento da execução do código e obter resultados errados dos cálculos. Portanto, este comportamento é bom para o programador. O compilador sempre nos avisará sobre a possível perda de precisão.

E o depurador MT4 não funciona com dados históricos. É uma prerrogativa do testador MT5. Mas não faz sentido depurar scripts sobre a história de qualquer maneira, e você pode observar o que eu sugiro no testador MT4. Basta definir um ponto de parada no início do código e depois observar a seqüência de execução e os valores das variáveis passo a passo.

 
Você acha que não há problema em discutir pedaços de código descompilado?
Eles deveriam ao menos renomear as variáveis. Não é tão descarado...
 
Artyom Trishkin:
Você acha que não há problema em discutir pedaços de código descompilado?

Eles deveriam ao menos renomear as variáveis. Caso contrário, é muito descarado...

Este EA está disponível online no formato MQL4. Trio Dancer. Estou apenas refazendo-o para mim.

 
Lomonosov1991:

Este assessor está disponível online. Trio Dancer. Estou apenas modificando isso para mim.

E daí? Há lugares onde eles compram e vendem mercadorias roubadas.
Este fórum não se encontra nessa categoria.
Ela foi invadida (roubada do autor) há algum tempo e agora você está fazendo isso por si mesmo. Por favor, não o faça neste site. Temos aqui a ética.