Erros, bugs, perguntas - página 2160
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
Do ponto de vista da MQ, aparentemente correctamente. Como sempre, decidiu por nós o que é mais conveniente.
Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais
Não há mensagens no meu perfil.
Renat Fatkhullin, 2018.03.08 10:31
Removido temporariamente para reduzir a quantidade de funcionalidade a trabalhar em modo de compatibilidade.
Acrescentaremos novas funcionalidades assim que o processo de migração estiver concluído.
Este é um novo sistema muito grande e rico em características.
Estão a ser introduzidas novas salas de chat.
Do ponto de vista da MQ, aparentemente correctamente. Como sempre, decidimos por nós como estar mais confortáveis.
Passando ao nível do telepático... )))))
Insecto pouco claro no indicador principal. Aparece apenas nos prazos abaixo de H1, e apenas no arranque do terminal. Texto de erro "S-v5 (EURUSD,M10) array fora do intervalo em 'S-v5.mq5' (211,54)" . O desenho está correcto, mas em ordem inversa, embora a bandeira da série cronológica esteja definida para todos os amortecedores.
A composição do modelo - o indicador principal (#1) (onde o erro ocorre), indicador adicional (#2) (combinação de várias pegas do indicador principal com parâmetros diferentes (período de tempo), indicador (#3) que exibe setas no gráfico principal sobre os sinais do indicador #1), indicador (#4) que exibe setas no gráfico principal sobre os sinais do indicador #2.
Alternando o período de tempo, reaplicando o modelo, se remover quaisquer 2 indicadores de 2 para 4 ou apenas no número 1, a saída de um novo símbolo da visão geral do mercado e aplicação deste modelo - o erro não é reproduzido e a renderização de todos os indicadores está correcta.
Erro de compilação
A mensagem de erro não permite que a causa seja compreendida no extenso código
abaixo é claro
Nenhuma mensagem de erro
além disso, está a funcionar e há mesmo um resultado (!)
Nesta variante:
nenhum salto para a linha de erro (por Enter)
Erro de compilação
Numa tentativa de acelerar as coisas quando estava a criar este exemplo, deparei-me com uma estranheza completamente por acidente, que acabei de colocar na prateleira.
E agora, quando tentei lidar com esta estranheza, fiquei ainda mais confuso.
Assim, no cálculo utilizo a função raiz quadrada sqrt(), que decidi contornar, criando uma dupla matriz.
Uma vez que retiro sempre a raiz quadrada dos inteiros, criar uma matriz parece-se com isto:
É lógico supor que a leitura a partir da matriz SQRT[x] é mais rápida do que a utilização da função sqrt(x).
E isto é confirmado pelo código de verificação:
o resultado mostra um ganho de velocidade de ~1,5 vezes:
Mas quando substituo a função sqrt() no código pela leitura dos elementos da matriz SQRT[], em vez de acelerar, recebo terríveis atrasos.
A leitura de um item da matriz SQRT[] demora muitas vezes, talvez até uma ordem de magnitude mais longa do que correr sqrt().
E não compreendo onde ocorre a fuga de velocidade. O código de verificação acima diz-lhe o contrário.
Podemos supor que o compilador acede de alguma forma estranha a uma grande variedade e parece "esquecê-lo" em cada volta do laço e executa o seu próprio serviço de indexação de cada vez.
Mas isto é ou um bug lógico ou um bug de compilação estratégico. E deve obviamente fazer algo quanto a isso porque esta fuga de velocidade é muito significativa e difícil de detectar porque não é tão óbvia.
Estou a anexar o código do guião para demonstrar esta estranheza.
A execução padrão (arr=false) calcula sqrt(), mas quando se muda arr para verdadeiro, o valor da raiz quadrada é retirado do array.
O QUE É ERRADO? PORQUE É LENTO?
Numa tentativa de acelerar as coisas, ao criar este exemplo, deparei-me com uma estranheza completamente por acidente, que acabei de arquivar.
É lógico assumir que a leitura a partir da matriz SQRT[x] é mais rápida do que tomar sqrt(x).
A partir de uma matriz dinâmica, não é um facto.
Além disso, a tomada da raiz já se encontra no nível de comando do processador SQRTSD. Ou seja, não se pode vencer a implementação do processador utilizando o notório custo de acesso numa matriz dinâmica.
E isto é confirmado pelo código de verificação:
o resultado mostra um ganho de velocidade de ~1,5 vezes:
Duvido que seja confirmado.
O código deste tipo é como algo saído de um livro de texto sobre optimização de loops. O optimizador de código pode fazer dele um doce porque é um caso muito simples:
Ou seja, a medição do desempenho no caso de aplicação dos casos deliberadamente optimizados tem de estar claramente relacionada com os objectivos do teste.
O teste, neste caso, está errado.
E não percebo onde ocorre a fuga de velocidade. Afinal de contas, o código de teste acima diz o contrário.
Sem ver o código final do montador, inclino-me para ele:
Vamos verificar cuidadosamente todo o código. É interessante descobrir qual é a verdadeira razão.
A partir de uma matriz dinâmica, não é um facto.
Sem ver o código final do montador, inclino-me para ele:
Experimentei uma matriz estática - a mesma coisa.
Por mais rápido que seja o sqrt, tenho dificuldade em acreditar que esta função possa ser 10 vezes mais rápida do que apenas ler um elemento de matriz.
Além disso, se no meu exemplo o tamanho da tela for reduzido, digamos 50x50 (para isto há um parâmetro de entrada Tamanho, é necessário definir 50 em vez de 0),
e a matriz será muito mais pequena (5000 elementos), o quadro da velocidade muda drasticamente. Já não existe um contraste tão forte.
Mas não compreendo: o tamanho da matriz afecta a velocidade de acesso aos seus artigos?
Talvez tenha razão sobre a simplicidade do código de verificação.
Tentei torná-lo um pouco mais complicado e o resultado é completamente diferente: