Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 973
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
Olá.
Por favor, ajude-me a entender. Ao verificar o funcionamento de uma matriz simples (atribuindo um valor);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Eu recebo o resultado:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Como assim ?
Olá.
Por favor, ajude-me a entender. Ao verificar o funcionamento de uma matriz simples (atribuindo um valor);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Eu recebo o resultado:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Como assim ?
Este é um exemplo difícil de reproduzir, mas suspeito que por causa da conversão do tipo você obtém um resultado diferente do que você espera.
Experimente com este código:
então com isto:
и
e fazer uma busca no fórum por "números reais", em resumo, a conversão C é um pouco confusa no início ;)
Você mostrou um monte de exemplos usando variáveis int.
Minhas variáveis são todas duplas.
Portanto, a conversão das variáveis para o mesmo formato não funcionará.
Você mostrou um monte de exemplos usando variáveis int.
Minhas variáveis são todas duplas.
Portanto, a conversão da variável para o mesmo formato não funcionará.
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]);
Eu recebo o resultado:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Como assim ?
Você tem constantes inteiras, assim como o próprio exemplo não é reprodutível - nenhum tipo de variável, bem em geral - minha "pilha de exemplos" pode ser calculada sem PC, seu exemplo... me diga o que é e^(-91.49999).
Esqueça. Eu não posso ajudá-lo.
É uma pena que "não possa ajudar"...
Não é uma questão de quanto e^(-91.49999). A questão é por que uma variável do tipo duplo = H, está escrita incorretamente
calculado anteriormente número do tipo duplo =0,7310585786300049 , mas está escrito 1,0 (aliás, o dobro).
Se você tentar usar meu código no testador, eu acho que seu MT4 exibirá a mesma coisa.
Se assim for, você simplesmente não pode usar a MQL4 para trabalhar e isso é perigoso!
Que pena... "não posso ajudar"...
Eu ajudei, ajuda não significa fazer isso por mim ou não vou ler de qualquer maneira, e me preocupo com o resultado!
Se assim for, a MQL4 simplesmente não pode ser usada para o trabalho e é perigosa!
O comportamento da MQL4 / MQL5 no cálculo das expressões matemáticas é o mesmo que em C++. Você pode ir a qualquer fórum C++ com sua pergunta, talvez um recurso o ajude lá
Sua pergunta passou de ajuda/explicar/ensino a discussão da plataforma MT, não gosta, você a recebeu de graça?
... Nos tempos antigos, a falta de compreensão dos processos físicos provocava o pânico nas pessoas, trovões ou terremotos. no início causou pânico e especulação, depois veio a religião ))))
Você não deveria ter ficado tão zangado.
Se feri seus sentimentos pessoais, peço sinceramente desculpas.
Não estou discutindo ou julgando o MT4 de forma alguma. Eu simplesmente sugeri que você corra
Eu só me ofereci para executar o código que lhe enviei no testador do MT4 e se todas as variáveis (H,a[0][2])
são definidos como duplos e o resultado é o mesmo que para mim, tenho uma pergunta:
Qual é o problema? Dirigi-o a vocês.
Mais uma vez :Desculpe... "não posso ajudar"...
Adeus.
que todas as variáveis (H,a[0][2])
são definidos como duplos
Mais uma vez - você tem constantes em sua expressão matemática? - meu exemplo também tem constante 5 ... então eu escrevi 5.0 - não é o mesmo para o compilador! e então eu trouxe explicitamente a constante inteira 5 para o tipo duplo ---> para o compilador será o mesmo que o exemplo acima 5.0
Sua pergunta é repetida regularmente no fórum, embora eu possa não ver qual é a sua pergunta - você tem uma "fórmula pesada" e não variáveis óbvias - remover o desnecessário dos exemplos - arrays e expoente - então você verá qual é o problema, embora se você remover tudo o desnecessário, você provavelmente encontrará onde você não conseguiu o que esperava - eu normalmente faço ;)
HH: e o expoente ao poder de menos 91,49 - não é um número muito pequeno? tipo duplo tem grande precisão, mas ao centésimo poder e levando em conta o sinal de menos - na minha opinião, esta expressão perderá precisão, não quero ir ao Google, mas a primeira coisa que percorri neste Wiki
Obrigado por sua paciência!
Tentei isto :
A=91.49999999993754;//a[0][2]=91.49999999993754;
Imprimir("A=",A);
H= 1/(1+exp(-A));
//A=H;
Imprimir("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Resultado:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Vou tentar descobrir porque 1/(1+exp(-91.4999999999993754))=1.0.
Por favor, me entendam. Estou ocupado agora com o ajuste e treinamento da rede neural. O código em si é rude e até eu mesmo me confundo nele... :)
Observo que a rede repete erros. E o principal erro está no cálculo do sigmóide. NÃO DEVE SER =1.
Obrigado por sua paciência!
Tentei isto :
A=91.49999999993754;//a[0][2]=91.49999999993754;
Imprimir("A=",A);
H= 1/(1+exp(-A));
//A=H;
Imprimir("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Resultado:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Vou tentar descobrir porque 1/(1+exp(-91.4999999999993754))=1.0.
Por favor, me entendam. Estou ocupado agora com o ajuste e treinamento da rede neural. O código em si é rude e até eu mesmo me confundo nele... :)
Observo que a rede repete erros. E o principal erro está no cálculo do sigmóide. NÃO DEVE SER =1.
Para que você não encontre nada, foi isso que decidi verificar, você tem que procurar onde está o bug ou a imprecisão no código:
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3. H = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.4999999999993754