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
E outra pergunta: quanto tempo leva para transferir/preparar os dados para a placa de vídeo? Ouvi uma opinião de que não faz sentido usar o OpenCL para a placa de vídeo em negociações reais devido às perdas de tempo na transferência de dados para processamento.
A Figura 8 mostra a saída dos intervalos de tempo entre os pontos de controle no código do programa para o console do terminal. Vou reproduzi-la aqui:
Onde:
O carregamento de dados no array (buffering na figura) levou 26,6 ms (talvez eu tenha precisado carregar ou sincronizar algo), o carregamento dos mesmos dados na memória da placa de vídeo levou 8,7 ms.
Sim, se você correr com dados grandes para frente e para trás várias vezes, poderá perder muito tempo. Portanto, precisamos criar o algoritmo de forma que a cópia de/para a memória da GPU seja minimizada. Quero modificar o código para testar o histórico de ticks em um futuro próximo. Os volumes serão maiores nesse caso. Será interessante ver o tempo de cópia nesse caso.
Até o momento, o processo mais caro é a inicialização. Ele leva 316 ms. Mas isso pode ser feito uma vez se usarmos os mesmos kernels daqui para frente.
A Figura 8 mostra a saída dos intervalos de tempo entre os pontos de controle no código do programa para o console do terminal. Vou reproduzi-la aqui:
Onde:
O carregamento de dados no array (buffering na figura) levou 26,6 ms (talvez eu tenha precisado carregar ou sincronizar algo), o carregamento dos mesmos dados na memória da placa de vídeo levou 8,7 ms.
Sim, se você correr com dados grandes para frente e para trás várias vezes, poderá perder muito tempo. Portanto, precisamos criar o algoritmo de forma que a cópia de/para a memória da GPU seja minimizada. Quero modificar o código para testar o histórico de ticks em um futuro próximo. Os volumes serão maiores nesse caso. Será interessante ver o tempo de cópia nesse caso.
Até o momento, o processo mais caro é a inicialização. Ele leva 316 ms. Mas isso pode ser feito uma vez se usarmos os mesmos kernels.
Obrigado, muito informativo! No entanto, como isso se compara a um processador?
De qualquer forma, para muitas estratégias que funcionam por abertura de barra, isso pode ser útil se você precisar fazer cálculos complexos, por exemplo, adaptação automática ao mercado, tanto na inicialização quanto uma vez por dia.
Obrigado, muito informativo! Entretanto, como isso se compara a um processador?
De qualquer forma, para muitas estratégias que funcionam na abertura de barras, ele pode ser útil se você precisar fazer cálculos complexos, por exemplo, adaptação automática ao mercado, tanto na inicialização quanto uma vez por dia.
No final do artigo, há tabelas de comparação de desempenho. O EA é otimizado no testador de estratégia e, em seguida, os resultados obtidos e o tempo gasto são comparados com o que foi obtido pelo testador OpenCL. Ponto 3, "Comparação de desempenho".
Na profundidade de teste de 9 meses no modo "OHLC on M1", o testador OpenCL gerencia no máximo 1 segundo ao otimizar dois parâmetros de 100 etapas cada (10.000 passagens).
Essa otimização pode ser realizada pelo menos a cada minuto em 60 pares, o que já pode ser chamado de adaptação automática ao mercado, se entendi corretamente o que você quis dizer.
Há tabelas de comparação de desempenho no final do artigo. O EA é otimizado no testador de estratégia e, em seguida, os resultados obtidos e o tempo gasto são comparados com o que foi obtido pelo testador OpenCL. Ponto 3, "Comparação de desempenho".
Na profundidade de teste de 9 meses no modo "OHLC on M1", o testador OpenCL gerencia no máximo 1 segundo ao otimizar dois parâmetros de 100 etapas cada (10.000 passagens).
Essa otimização pode ser realizada pelo menos a cada minuto em 60 pares, o que já pode ser chamado de adaptação automática ao mercado, se eu entendi corretamente o que você está falando.
Eu vi a tabela, a questão está em uma iteração (o resultado de uma passagem) tanto para a CPU quanto para a GPU, pois há preparação e transferência de dados. No entanto, esse é obviamente um tópico útil, é uma pena que nem todos possam usá-lo devido à sua simplicidade.
Estou correto ao afirmar que, se houver um farm de GPU de várias placas, o cálculo será feito em todas as placas?
Infelizmente, o MT5 suporta apenas um dispositivo de GPU.
Infelizmente, o MT5 suporta apenas um dispositivo de GPU.
Vários dispositivos podem ser usados.
Cabe ao desenvolvedor decidir quais dispositivos usar e como usá-los.
Vários dispositivos podem ser usados.
O desenvolvedor decide quais dispositivos usar e como usá-los.
Se não me engano, você escreveu anteriormente que apenas um dispositivo pode ser usado por vez - escolher qual deles, sim, você pode, algo mudou?
Não estamos falando de agentes, pois, pelo que entendi, cada um pode usar um dispositivo, mas, novamente, não está claro como vincular um agente a um dispositivo específico...Artigo muito interessante!
Análise de clusterInfelizmente, sua solução não oferece 'otimização genética'.
Mas isso poderia ser facilmente adicionado, mesmo que exceda as opções e os benefícios do usuário em comparação com o MQ5. O Mq5 tem apenas uma opção - genética ou tudo ou lenta.
Tudo o que você precisa fazer
1) Criar uma tabela dos resultados com suas combinações de parâmetros,
2) classificá-los de acordo com os resultados,
3) dividir em, por exemplo 5 ou (n definido pelo usuário) seções,
4) selecionar aleatoriamente as combinações de parâmetros de cada seção,
5) alterar um valor para essas combinações de parâmetros selecionadas,
6) verificar se essa combinação já foi testada (depois voltar para 4)
7) testar.
8) Comece novamente em 1), a menos que um critério de interrupção tenha sido atingido.
Apenas uma combinação é selecionada da pior seção, duas da próxima melhor, depois três e assim por diante.
Assim, a densidade das otimizações é mais alta na melhor seção e, como todas as seções têm sempre o mesmo tamanho entre si (1/5 ou 1/n), os limites da seção se deslocam, resultando em um aumento adicional da densidade nos melhores resultados.
Você também pode permitir que o usuário determine: Outra combinação deve ser testada de seção para seção - ou seja, 1, 2, 3, 4, 5 na 5ª seção superior - ou duas - 1, 3, 5, 7, 9 - ou ainda mais para aumentar ainda mais a densidade na melhor seção?
Talvez você possa introduzir algo muito interessante e útil?
Se você fizer uma análise de cluster das combinações de parâmetros em cada seção da tabela, não poderá (apenas) selecionar as combinações aleatoriamente, mas seletivamente:
a) no meio entre os melhores valores de dois clusters - para explorar o vale entre eles
b) no meio entre duas combinações tão diferentes quanto possível de um mesmo cluster - para encontrar um novo melhor valor, um novo topo.
Isso provavelmente melhorará significativamente a qualidade dos resultados da otimização genética. Você teria que experimentar!
Artigo muito interessante!
Análise de clusterInfelizmente, sua solução não oferece "otimização genética".
Mas você pode adicioná-la facilmente, mesmo que ela exceda os recursos e as vantagens do usuário em comparação com o MQ5. O Mq5 tem apenas uma opção, genética, completa ou lenta.
Tudo o que você precisa fazer é.
1) Criar uma tabela de resultados com suas combinações de parâmetros,
2) Classificá-los por resultados,
3) Dividi-los em, por exemplo, 5 ou (n definido pelo usuário) seções,
4) Em seguida, selecionar aleatoriamente as combinações de parâmetros de cada seção,
5) Alterar o valor dessas combinações de parâmetros selecionadas,
6) Verificar se essa combinação já foi testada (em seguida, voltar para 4)
7) Testar.
8) Reinicie a partir de 1) se o critério de abortar não for atingido.
Apenas uma combinação é selecionada da pior seção, duas combinações são selecionadas da melhor, depois três e assim por diante.
Portanto, a densidade de otimizações é mais alta na melhor seção e, como todas as seções têm sempre o mesmo tamanho entre si (1/5 ou 1/n), os limites da seção se deslocam, levando a um aumento adicional na densidade dos melhores resultados.
Além disso, o usuário também poderia determinar se outra combinação de seção para seção - ou seja, 1, 2, 3, 4, 5 na 5ª seção superior - ou duas - 1, 3, 5, 7, 9 - ou até mais, seria testada para aumentar ainda mais a densidade na melhor seção.
Talvez você possa apresentar algo muito interessante e útil?
Se você também fizer uma análise de cluster das combinações de parâmetros em cada seção da tabela, poderá não apenas (apenas) escolher combinações aleatoriamente, mas também especificamente:
a) no meio do caminho entre os melhores valores de dois clusters - compreender o vale entre eles
b) no meio do caminho entre duas combinações maximamente diferentes do mesmo cluster - encontrar um novo melhor valor, um novo topo.
Isso provavelmente melhoraria significativamente a Você terá que tentar!
PS: Além da minha proposta, você gostaria de acrescentar que também poderia desenvolver uma apresentação dos resultados na forma de clusters?
O Strategy Tester sempre mostra apenas os resultados de todo o intervalo de uma variável; seria muito mais informativo se fosse possível ver, por exemplo, três clusters e, para cada cluster, o respectivo melhor valor (quanto maior, melhor), sua dispersão (quanto maior, melhor) e as estatísticas dos parâmetros individuais (máximo, mínimo, médio, desvio padrão (quanto maior, melhor). Isso facilita a visualização de onde as combinações de parâmetros mais robustas provavelmente estarão e onde os melhores valores mais aleatórios poderão estar.
PS: Além da minha sugestão, você poderia acrescentar que também poderia desenvolver uma apresentação dos resultados na forma de clusters?
O Strategy Tester sempre mostra apenas os resultados de toda a gama de variáveis, mas seria muito mais informativo se você pudesse ver, por exemplo, três clusters e, para cada cluster, o melhor valor (quanto maior, melhor), sua variação (quanto maior, melhor) e as estatísticas dos parâmetros individuais (máximo, mínimo, média, desvio padrão (quanto maior, melhor). Isso facilita encontrar as combinações mais confiáveis de parâmetros e os melhores valores aleatórios.
PPS: por acaso, encontrei este artigo: "Optimizing OpenCL Kernels
for Iterative Statistical Applications on GPUs" que se encaixaria na minha sugestão :)
Por acaso, encontrei este artigo: "Otimização de kernels de OpenCL
para aplicativos estatísticos iterativos em GPUs" que se encaixaria na minha sugestão :).
Great article!!!
Congratulations, @decanium !