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
Eu não sei o que é o mt4, ele não vai nem rodar em win10, eu acho que isso é uma coisa boa
Eu afinei a matriz.
Eu tive que usar o ArrayCopy , porquea MQL5 jurou que a matriz era estática.
Se é um concurso de velocidade, vou oferecer minha própria variante.
Sua variante é de fato a mais rápida, mas contém um bug: se todos os elementos de um array forem iguais a um filtro, sua função sairá do array.
Vou oferecer minha própria variante, ela é um pouco mais lenta que a sua:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) teste my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) teste alien=1464941
Você vem fazendo esse tipo de pergunta há vários anos. Você já aprendeu muito? Desculpe, mas é óbvio que você ainda está no nível de bytes e arrays elementares.
A questão em si é formulada incorretamente. A tarefa não é remover valores duplicados (tarefa de nível GCE), mas em algo muito maior, você deve atualizar a lista de itens válidos. Se assim for, a questão deve soar completamente diferente. Você confunde e engana os participantes e, antes de tudo, a si mesmo: imponha aos participantes a solução errada em princípio e peça para torná-la eficaz.
Eu não faço programação por programação, não tenho nenhum objetivo de me tornar um mega-programador e de ser esperto em fóruns.
O que você não entende na pergunta: Limpar um conjunto de elementos definidos?
Sua variante é de fato a mais rápida, mas contém um bug: se todos os elementos de um array forem iguais a um filtro, sua função sairá do array.
Vou sugerir minha variante, é um pouco mais lenta que a sua:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) teste my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) teste alien=1464941
Sim, obrigado. Corrigido.
Somente você também tem um erro em algum lugar, porque o checksum não coincide porque falta um elemento em algum lugar. Não funcionou onde.
Ajustou-o removendo passagens desnecessárias
Em ambos os casos, cada elemento é arrastado, no máximo, uma vez.
Sim, desculpe, uma vez de fato. Eu esperava que alguém estivesse interessado na abordagem do SGBD e checá-lo, não esperasse. Tinha que ser eu mesmo a fazê-lo.
Inserido ArrayDeleteValue.mq5 em seu verificador, ele é duas vezes pior que o seu. Pensei no motivo e fixei duas linhas para que um terço dos itens fosse removido em vez de 0,1%.
Foi assim que tudo aconteceu:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementos - 667421; tempo de execução = 108521 microssegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementos - 667421; tempo de execução = 5525 microssegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementos - 667421; tempo de execução = 4879 microssegundos
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementos - 667421; tempo de execução = 14479 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementos - 667421; tempo de execução = 0 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementos - 667421; tempo de execução = 5759 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementos - 667421; tempo de execução = 1542 microssegundos
A variante de Pavlov tinha um erro, tive que comentar.
Conclusão: calcular endereços em uma matriz com uma distância arbitrária entre seus números ainda é pior do que processar elementos em uma linha, em uma determinada etapa, muito menos na etapa 1, o compilador pode otimizá-la.
Os compiladores P.S. Pascal e Delphi da Borland fazem com que, em tempo de execução, a variável loop não importe (em memória), ela seja colocada em algum lugar nos registros da CPU.
Sim, desculpe, uma vez de fato. Eu esperava que alguém estivesse interessado na abordagem do SGBD e checá-lo, não esperasse. Tinha que ser eu mesmo a fazê-lo.
Inserido ArrayDeleteValue.mq5 em seu verificador, ele é duas vezes pior que o seu. Pensei nos motivos e fixei duas linhas para que um terço dos itens fosse eliminado em vez de 0,1%.
Foi assim que tudo aconteceu:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementos - 667421; tempo de execução = 108521 microssegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementos - 667421; tempo de execução = 5525 microssegundos
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementos - 667421; tempo de execução = 4879 microssegundos
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementos - 667421; tempo de execução = 14479 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementos - 667421; tempo de execução = 0 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementos - 667421; tempo de execução = 5759 microssegundos
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementos - 667421; tempo de execução = 1542 microssegundos
A variante de Pavlov tinha um erro, tive que comentar.
Conclusão: calcular endereços em uma matriz com uma distância arbitrária entre seus números ainda é pior do que processar itens em fila em uma determinada etapa, ainda mais na etapa 1, o compilador pode otimizá-la.
Os compiladores P.S. Pascal e Delphi da Borland fazem com que, em tempo de execução, a variável loop não importe (em memória), ela seja colocada em algum lugar nos registros da CPU.
A versão de Pavlov foi corrigida.
Seus valores são estranhos. Talvez você tenha executado o script depois de traçar o perfil ou depurar sem recompilar o código?
É assim que funciona para mim:
E em sua versão gera um checksum incorreto. E criar uma matriz adicional não traz nenhum benefício, ao contrário, retarda o processo e consome recursos adicionais.
Somente no meu caso é feito em blocos usando o ArrayCopy, portanto há uma vantagem de velocidade.