Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 154

 
paladin800:
Ou seja, precisa de converter 1.33182 para 1.3318? Cortaria simplesmente o 5º dígito após o ponto decimal ou arredondá-lo-ia para o 4º dígito, por exemplo, teria 1,3318 ou 1,3319 a partir de 1,33186?

A minha pergunta é se existe ou não um insecto. Ao converter de duplo para int no meu exemplo, o resultado é um a menos. Por favor, verifique você mesmo.

   double max=NormalizeDouble(1.33182,4);  
   //double max=1.3318;
   Alert(int(max*10000));
Alerta deve dar 13318, mas dá 13317. Se não for arredondado para int, dará 13318,0 correctamente.
 

Diga-me se existe uma diferença nas expressões:

if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)

и

if(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize))
 
sgreen:

Diga-me se existe uma diferença nas expressões:

и

Se tem uma suspeita de que algo não está bem, que o faça:

if(bufferclose[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) )
 
Rorschach:

A minha pergunta é se existe ou não um insecto. Ao converter de duplo para int no meu exemplo, o resultado é um a menos. Por favor, verifique por si próprio.

Alerta deve dar 13318, mas dá 13317. Assim, se não reduzir a int, então dá correctamente 13318.0
O alerta não dá um erro. A questão é que a normalização conduz o número a uma forma binária, que está mais próxima do análogo decimal solicitado, embora possa não coincidir com ele em mais ou menos (no seu caso) lado. Uma vez que o que é expresso por uma fracção decimal finita, nem sempre pode ser expresso por binário finito . Expressão
int(max*10000)

causa o descarte da parte fracionada em vez de arredondamento (ou seja, semelhante a MathFloor() em vez de MathRound()), e no seu caso, o número normalizado pode muito bem ser igual a 13318 exactamente, mas digamos 13317,999999999999999999997

que, quando a saída em forma fracionada com número limitado de dígitos faz com que o arredondamento corrija o resultado (esperado), e quando parte fracionada de.... é descartada vê com os seus próprios olhos.

Espero ter explicado claramente.

 
pronych:
existe um análogo do parcial do Sharp? ou como fazê-lo?

não há analógico. pode inserir uma peça de definição usando #include <partial_class_code.mqh>.

Algumas pessoas até imitam múltiplas heranças desta forma. // Eu não faço isto, habituei-me a fazer sem ele. :)

 
paladin800:

Se suspeitar que algo está errado, faça-o:

Já o fiz. Só por curiosidade.
 
sgreen:
Já o fiz. Só por curiosidade.

Estou a ver. Voltando à sua pergunta anterior, a essência do registo pode ser extraída para esta comparação:

if (A<=B && C<=D)     // 1
if ((A<=B) && (C<=D)) // 2

Não há diferença entre estas entradas. Ao mesmo tempo, recomendo-lhe que faça um escalonamento dos cálculos matemáticos no interior do if-os:

if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
MetaDriver:
O alerta não produz um erro. A questão é que a normalização leva um número a uma forma binária, que está mais próxima do análogo decimal solicitado, embora possa não coincidir com ele numa direcção maior ou menor (no seu caso). Como o que é expresso por uma fracção decimal finita, pode nem sempre ser expresso por uma fracção binária finita . Expressão

resulta em descartar a parte fracionada em vez de arredondar (ou seja, parece-se mais com MathFloor() do que MathRound()), e no seu caso o número normalizado pode muito bem ser 13317.9999999999999999997 em vez de 13318 exactamente.

que, quando a saída em forma fracionada com número limitado de dígitos faz com que o arredondamento corrija o resultado (esperado), e quando parte fracionada de.... é descartada vê com os seus próprios olhos.

Espero tê-lo explicado claramente.

Obrigado, estou a ver.

Outra questão, como é que luto contra isto se não posso fazer sem me converter em int?

 
Pode dizer-me como ter em conta a comissão do corretor ao testar uma EA?
 
Rorschach:

Obrigado, estou a ver.

Outra questão, como lidar com isto se não pode passar sem transferência para a int?

e acrescenta um par de epsilons.

DBL_EPSILON

O número mais pequeno para o qual a condição 1.0+DBL_EPSILON != 1.0 é satisfeita


Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов - Документация по MQL5
Razão: