Erros, bugs, perguntas - página 2939
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Todos os preços são afixados com cinco casas decimais, e um por alguma razão na mesma lista leva-o desta forma: Porquê? É um erro ou a minha saída deve ser editada com um aspecto uniforme? Bem, digamos, vou penteá-lo com PrintFormat ou fprint, mas em princípio não é uma representação incorrecta do número?
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
Nikolai Semko, 2020.01.05 21:41
Tenho sempre esta pergunta.
Constantemente todos falam da norma IEEE 754, mas as pessoas frequentemente, quando vão à Wikipédia - seja por causa da complexidade, seja por causa da preguiça, saem sem compreender o significado da norma.
Vou gastar algum tempo para tentar explicar este padrão o mais brevemente possível e em palavras simples, a fim de me referir mais a este post.
Assim, o tipo duplo consiste em 8 bytes = 64 bits.(flutuador 4 bytes = 32 bits)
E a representação numérica doduplo e float é composta por 3 componentes:sinal, expoente e mantissa
DUPLO:
FLOAT:
Naturalmente não há representação decimal de números neste formato, apenas binário.
Um pouco de compreensão da representação binária dos números e a sua relação com os números decimais:
2 4= 100002 = 1610
2 3= 10002 = 810
2 2= 1002 = 4
2 1=102= 2
2 0=12=110
2 -1= 0.12 =(1/2)10= 0.510
2 -2= 0.012 = (1/4)10= 0.2510
2 -3= 0.0012 = (1/8)10= 0.12510
2 -4= 0.00012 = (1/16)10= 0.062510
2 -5= 0.000012 = (1/32)10= 0.0312510
2 -6= 0.0000012 = (1/64)10= 0.01562510
2 -7= 0.00000012 = (1/128)10= 0.007812510
2 -8= 0.000000012 = (1/256)10= 0.0039062510
2 -9= 0.0000000012 = (1/512)10= 0.00195312510
2 - 10= 0.00000000012 = (1/1024)10= 0.000976562510
2 - 11= 0.000000000012 = (1/2048)10= 0.0004882812510
2 - 12= 0.0000000000012 = (1/4096)10= 0.00024414062510
2 - 13= 0.00000000000012 = (1/8192)10= 0.000122070312510
Vamos rever exemplos para o dobro:
Exemplo #1
Temos um número decimal: 891677.4025191
Este número pode ser representado em formato binário:
110110011011000111011101.011001110000101101110111011111011000100000111111111010001110
(quem quiser pode verificar)))
Extraímos a mantissa do número dado simplesmente movendo a vírgula 19 dígitos para a esquerda (neste caso) para que venha depois da primeira unidade.
1.1011001101100011101011001110000101101111101111000101000001111101110001110* 2 19
Mas temos uma mantissa de apenas 52 bits. Assim, tomamos as primeiras 52 partes significativas
Мантисса = 1011001101100011101011001110000101101111101111000101
Exponente = (19+1023)10 = 100000100102(como o expoente é um número assinado e o expoente pode ser negativo (por exemplo se tivermos 0,0000042132), precisamos de adicionar 1023 a 10(01111111111112), 01111111111112 é zero, tudo mais é positivo, menos é negativo. Por outras palavras, para obter o valor inverso do expoente, precisamos de subtrair 1023 do valor de 11 bits do expoente.
No total, o nosso número 891677.4025191 terá a seguinte aparência no tipo duplo:
0100000100101011001101100011101011001110000101101111101111000101
Mas uma vez que se trata de uma representação binária, vamos convertê-la exactamente para decimal:
que seria891677.4025190999999642521142959595947265625
Exemplo #2
Temos um número decimal: -0.00000145258556224114
Este número pode ser representado em formato binário:
-0.000000000000000000011000010111101100111010110111010011010101001111001110
Seleccionar a mantissa deste número movendo simplesmente a vírgula 20 dígitos para a direita, de modo a que seja depois da primeira unidade.
1.1000010111101100111010110111010011010101001111001110 * 2 -20
Мантисса = 1000010111101100111010110111010011010101001111001110
expoente = (-20+1023)10=011111010112
sinal de menos, portanto o primeiro bit é 1.
O nosso número total -0.00000145258556224114 terá o seguinte aspecto no tipo duplo:
1011111010111000010111101100111010110111010011010101001111001110
convertê-lo exactamente para decimal:
это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875
No seu caso, o problema ocorre com o número 0,01, uma vez que no tipo duplo será representado no formulário:
0 01111111000 0100011110101110000101000111101011100001010001111011
que quando convertido no sistema de notação decimal é igual a 0,0100000000000000000000208166817117216858513294309377670288085937510
Considerando que com representação
310 = 1.5*2 = 1.12*2 1
510 = 2.5*2 = 10.12*2 1
610 = 1.5*4 = 1.12*2 2
710 = 3.5*2 = 11.12*2 1
sem problemas.
Porque é que o número duplo 0,01 é realmente superior a 0,01?
Eis a razão:
0 01111111000 01000111101101011101110100001010111101011101001010001111011011 - 0.010000000000000000000020816681711721685132943093776702880859375 erro = 0.000 000 000 000 000 208166817...
0 01111111000 01000111101101011100001010001111010 - 0.0099999999999999999999999999984747344334114097569175064563751220703125 erro = - 0.000 000 000 000 000 001 5265566...
Para compreender esta química de processo, pode brincar com estas calculadoras:
https://baseconvert.com/ieee-754-floating-point
https://baseconvert.com/ieee-754-floating-point
https://baseconvert.com/ieee-754-floating-point
Obrigado, informativo. Bem, basicamente, deveriam os MQs ter sido, mas sub-corrigidos ou a decisão foi deixada ao utilizador?
Hm. Existe alguma função ou alguma outra funcionalidade adicional (biblioteca, código) para guardar parâmetros EA?
A tarefa é colocar no local onde o código, que, por exemplo, ao executar a EA num símbolo (função adicional é também análise de período), salvaria o ficheiro de definições definido.
Por exemplo - período do nome da EA - símbolo do período.
Ficheiro com possibilidade de sobrescrever - apenas as últimas definições para o símbolo.
Por exemplo, as configurações padrão no testador são guardadas para a última execução.
Olá, tenho um problema num computador remoto, não consigo aceder ao website da MQL5 e por isso não consigo descarregar o indicador que comprei. não posso descarregar o indicador, por isso não o posso utilizar.
mas um computador remoto no Zomro?
Obrigado, informativo. Bem, basicamente, deveriam os MQs ter, mas com uma correcção insuficiente, ou a decisão é deixada ao utilizador para julgar?
mas um computador remoto no Zomro?
Sim
Bom dia. Problema num computador remoto, não consigo aceder ao website da MQL5, por isso não consigo descarregar o indicador que comprei. Não posso descarregar o indicador, por isso não o posso instalar no site da MQL5.
mas um computador remoto no Zomro?
Sim
Este fornecedor é proibido por má conduta grave:
Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais
Por que razão é bloqueado o acesso a www.mql4.com?
Renat Fatkhullin, 2020.11.17 12:16
***Portanto, eles não compreendem.
Não é essa a questão. A questão é, onde pode ser útil, especialmente para os comerciantes, não para os programadores? Nunca vi tais números no terminal nem na escala de preços nem na janela de colocação de encomendas; tudo é igual em todo o lado (algures cinco dígitos, em qualquer outro lugar).
Este fornecedor foi banido por má conduta grave:
Que pena, teremos de mudar para outro. Alguma sugestão?