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

 
ANDREY:

Bom dia a todos!

Estou tentando de mql4 a mql5.

Pergunta: Por que o mql5 calcula e exibe alguma expressão desconhecida para mim, como por exemplo 2,9999999999 - (menos) 05 em vez da diferença entre o preço atual e o valor da variável Hay, que deveria ser <1 (como em mql4)?

Como posso fazer o mql5 calcular corretamente a diferença entre esses valores? Eu normalizo todos os valores usando NormalizeDouble(), mas os valores acima

valores são exibidos inalterados. Isto é estranho para mim, pois ambos os valores são do tipo doble

Obrigado a todos por sua ajuda.


2,999999999999 -(menos)05= 2,99999999999999 / 100000 = 0,00002999999999999. É assim que se faz em matemática.

-(menos)05 é dividir por 10 até a quinta potência.

 
IndependentMK:

Olá novamente.
Por favor, preste atenção à pergunta de um novato.
Preciso apontar erros no código, porque no testador, o Assessor Especialista não abre ordens...
O compilador não mostra erros ou avisos e a mesma coisa no diário, não há erros...

Ela não abre porque uma das condições não é cumprida.

É

while(MA_Smoth_B > MA_Smoth_S)

ou isto

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Comente os dois flashes // e você verá qual deles. É assim que você vai encontrar o erro.

 
Александр:

2,999999999999 -(menos)05= 2,99999999999999 / 100000 = 0,0000299999999999999. É assim que se faz em matemática.

-(menos)05 é dividir por 10 até a quinta potência.

Obrigado pela resposta, mas por que o programa não calcula a diferença entre o preço 1,33671 e Hay 1,33664 em vez da expressão, que deveria ser 0,00007, mas em vez disso produz a expressão?

Ao mesmo tempo, quando substituo a variável Hay por 1,33664 com a constante 1,33664( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1,33664 ), o programa calcula a diferença real entre estes valores, ou seja, 0,00007. Na verdade, a variável Hay no código toma o valor do preço de abertura do pedido no tick anterior, que é um valor duplo de 1,33664.

Obrigado antecipadamente por sua ajuda.

 
ANDREY:

Obrigado pela resposta, mas por que o programa não calcula a diferença entre o valor do preço 1,33671 e Hay 1,33664 em vez da expressão, que deveria ser 0,00007, mas em vez disso produz a expressão?

Obrigado antecipadamente pela dica.

DoubleToString(). Não se trata de MQL5, trata-se de uma saída incorreta de valores reais no log. Isto é igualmente verdade para a MQL4.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). E não se trata da MQL5, trata-se da saída incorreta de valores reais no log. Isto também se aplica à MQL4 exatamente na mesma medida.

Entendi. Obrigado. Eu nunca enfrentei tais problemas antes. Agora eu vou saber.

Não sei bem o que significa o formato de precisão em relação ao meu código. Parece-me ser o número de casas decimais.
Mas em MT4, exatamente no mesmo código (exceto OrderSend), se bem me lembro, a função Imprimir sempre produz o valor real da diferença entre dois valores de preço, ou seja, o número inferior a 1 (0,00000) com 5 casas decimais após 0.

 
ANDREY:

Entendi. Obrigado. Eu nunca tinha me deparado com isto antes. Agora eu vou saber.

Ainda não sei bem o que significa o formato de precisão em relação ao meu código. Parece-me ser o número de casas decimais.
Mas em MT4, exatamente no mesmo código (exceto OrderSend), se bem me lembro, a função Imprimir sempre produz o valor real da diferença entre dois valores de preço, ou seja, o número inferior a 1 (0,00000) com 5 casas decimais após 0.

Os valores reais dos dados são impressos em todos os lugares. É apenas um formato diferente de representação de números reais. Se o terminal não especificar o formato de saída, ele decide por si mesmo qual formato é mais conveniente. Naturalmente, isto pressupõe que você conheça todos os formatos de representação numérica.

Tudo isso está na ajuda.

 
Artyom Trishkin:

Os valores reais dos dados são exibidos em todos os lugares. É apenas um formato diferente para representar números reais. Se o terminal não for informado sobre o formato de saída, ele decide qual formato é mais conveniente. Naturalmente, isto pressupõe que você conheça todos os formatos de números.

Tudo está na ajuda.

Então, MT4 e MT5 têm formatos diferentes para representação de números reais?
O que devo ler em mql5 Ajuda para lidar com esta pergunta?

Obrigado pela ajuda.

 
Michail_David:
Olá, colegas especialistas. Preciso de sua ajuda para corrigir o indicador. A essência do indicador é a seguinte. Calcule a magnitude do aumento de preço em relação à barra anterior. Para zero leva uma barra estelar. Ou seja, o preço de abertura é igual ao preço de fechamento. Ao compilar sem erros, mas ao testar um erro na linha 80 20 caracteres. A linha de sinal também é desenhada incorretamente. Mas acho que esta é a razão para o cálculo incorreto do tampão principal. Por favor, ajude-me a consertá-lo.

Certo. Parece que apenas alguns poucos conseguem ajuda por aqui.

 
Michail_David:

Certo. Parece que apenas alguns poucos conseguem ajuda por aqui.

Tente isto.

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Tente isto.

Obrigado, Vitaly. Mas ainda recebo um erro na linha ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); no elemento [i}.

Razão: