carrapatos do testador de estratégia mt5 - página 11

 
RaptorUK:

Quero ser capaz de controlar os dados históricos que uso para poder repetir testes (Strategy Tester) sob condições controladas.

Que condições controladas?

Obrigado.

 
WhooDoo22:

Que condições controladas?

Obrigada.

As condições que eu escolho não são as condições que meu Corretor escolhe. De que outra forma você propõe testar ? conjunto aleatório de condições para cada teste ? mas não vamos sair do tópico.
 
RaptorUK:
As condições que eu escolho não são as condições que meu Corretor escolhe. De que outra forma você propõe testar ? conjunto aleatório de condições para cada teste ? mas não vamos sair do tópico.

Entendido.

Obrigado.

 
angevoyageur:

Não. Se você ler meu link e/ou o do RaptorUK, isso será mais claro para você. Caso contrário, leia novamente :-D

1.000000000006551e-005 é simplesmente outra notação para 0.000010000000000000006551.

Olá angevoyageur,

1.000000000006551e-005

0.00001000000000006551

O segundo decimal do duplo é movido para a esquerda cinco vezes MAS ;) não pode ser retornado no testador neste formato porque o duplo retorna um valor máximo de dezesseis dígitos (dígitos significativos) para a direita de um decimal.



Moderador
1651
angevoyageur 2013.04.14 09:39
WhooDoo22:

Olá comunidade MQL5,

https://www.mql5.com/en/docs/common/comment

"Os dados do tipo duplo são emitidos com a precisão de até 16 dígitos após um ponto decimal, e podem ser emitidos em formato tradicional ou científico, dependendo de qual notação será mais compacta. Os dados do tipo flutuador são emitidos com 5 dígitos após uma vírgula decimal. Para emitir números reais com outra precisão ou em um formato predefinido, use a função DoubleToString()".

A representação de preço do USDJPY em 98.370 são dados do tipo float (saída a 5 dígitos após o decimal).

A representação de preço do USDJPY em -0,0019999999999999995339 são dados de tipo duplo, formato tradicional (saída com até 16 dígitos após o ponto decimal).

Por que o duplo -0,0019999999999999533[9] retorna um 18o dígito após o decimal, se uma saída dupla só tem até 16 dígitos após o decimal?

Obrigado

Os preços são sempre o dobro, 98,370 é o dobro. 16 dígitos significativos. Os zeros não são significativos.


Se os zeros não são significativos, por que o valor 0,00001000000000006551 não poderia ser devolvido no testador em vez de 1,000000000006551e-005? Eu preferiria cálculos de crocante no formato 0,000010000000000000006551 !

Obrigado

 
WhooDoo22:


Se os zeros não são significativos, por que o valor 0,00001000000000006551 não poderia ser devolvido no testador em vez de 1,000000000006551e-005? Eu preferiria cálculos de crocante no formato 0,000010000000000000006551 !

Um número de ponto flutuante ( duplo ) é sempre mantido internamente neste formato . . . 1.000000000006551e-005, você leu e entendeu as informações nos links fornecidos ?

A partir daqui:números de ponto flutuante

"Um flutuador IEEE-754 (4 bytes) ou duplo (8 bytes) tem três componentes (há também um formato análogo de precisão estendida de 96 bits sob IEEE-854): um bit de sinal informando se o número é positivo ou negativo, um expoente dando sua ordem de magnitude e uma mantissa especificando os dígitos reais do número. Usando bóias de precisão única como exemplo, aqui está a disposição dos bits:".

3 partes

AssineMantissaExponente
+1.000000000006551-005

Se você quiser ver 0,00001000000000xyz, use DoubleToStr() para formatar a saída ao seu gosto.

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
RaptorUK:

Um número de ponto flutuante ( duplo ) é sempre mantido internamente neste formato . . . 1.000000000006551e-005, você leu e entendeu as informações nos links fornecidos ?

A partir daqui:números de ponto flutuante

"Um flutuador IEEE-754 (4 bytes) ou duplo (8 bytes) tem três componentes (há também um formato análogo de precisão estendida de 96 bits sob IEEE-854): um bit de sinal informando se o número é positivo ou negativo, um expoente dando sua ordem de magnitude e uma mantissa especificando os dígitos reais do número. Usando bóias de precisão única como exemplo, aqui está a disposição dos bits:".

3 partes

AssineMantissaExponente
+1.000000000006551-005

Se você quiser ver 0,00001000000000xyz, use DoubleToStr() para formatar a saída ao seu gosto.

Sim, eu li todos os links fornecidos e os achei úteis, obrigado novamente por fornecê-los. Meu gosto seria incorporar o DoubleToString e escolher o valor do segundo a último lugar (exemplo: CADJPY 95,9[5]9) como o segundo parâmetro do DoubleToString. Eu não acho que este problema do "pode preço!=preço" seja muito difícil de resolver! O que você diz a isto?

Obrigado

 
WhooDoo22:

Sim, eu li todos os links fornecidos e os achei úteis, obrigado novamente por fornecê-los. Meu gosto seria incorporar o DoubleToString e escolher o valor do segundo a último lugar (exemplo: CADJPY 95,9[5]9) como o segundo parâmetro do DoubleToString. Eu não acho que este problema do "pode preço!=preço" seja muito difícil de resolver! O que você diz a isto?

Então você quer dizer algo como isto?

double value = 95.959;

Print("Value: ", DoubleToStr(value, _Digits - 1) );

Preço de lata != preço é um problema diferente, mas ligeiramente ligado, não pode ser realmente resolvido, primeiro você precisa entender qual é o problema ... depois você trabalha em torno dele.

 
RaptorUK:

Então você quer dizer algo como isto?

Pode o preço != preço é um problema diferente, mas ligeiramente ligado, não pode ser realmente resolvido, primeiro você precisa entender qual é o problema . . . depois você trabalha em torno dele.

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

O que você pensa sobre o que é esta questão do "preço de lata != preço"?

Obrigado

 

WhooDoo22:

...

Os preços são sempre o dobro, 98.370 é o dobro. 16 dígitos significativos. Os zeros não são significativos.

Se os zeros não são significativos, por que o valor 0,00001000000000006551 não poderia ser devolvido no testador em vez de 1,000000000006551e-005? Eu preferiria cálculos de crocante no formato 0,000010000000000000006551 !

Obrigado

Isso poderia ser, é apenas uma escolha de valor de saída da formatação.

Todos os equivalentes
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

É precisamente porque os zeros não são significativos

WhooDoo22:

Sim, eu li todos os links fornecidos e os achei úteis, obrigado novamente por fornecê-los. Meu gosto seria incorporar o DoubleToString e escolher o valor do segundo a último lugar (exemplo: CADJPY 95,9[5]9) como o segundo parâmetro do DoubleToString. Eu não acho que este problema do "pode preço!=preço" seja muito difícil de resolver! O que você diz a isto?

Obrigado

Desculpe, mas não entendo esta frase.
 
angevoyageur:

Isso poderia ser, é apenas uma escolha de valor de saída da formatação.

Todos os equivalentes
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

É precisamente porque os zeros não são significativos

Desculpe, mas não entendo esta frase.

"Desculpe, mas não entendo esta frase".

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Obrigado.