Discussão do artigo "Otimização Walk Forward Contínua (Parte 3): Método de Adaptação de um Robô ao Otimizador Automático"
Caro autor! O trabalho que você fez é colossal! O nível de programação também é impressionante. Mas, como resultado, ele não pode ser usado! Para fazer isso, você precisa percorrer todo o ciclo de artigos, coletar arquivos diferentes, compilar, encontrar os que faltam, pensar se eles foram atualizados em novos artigos...? Não há dúvida de que esse trabalho merece ter seu resultado coletado em um único lugar.
Enquanto isso, até onde posso ver, ninguém ainda avaliou a real importância (do comerciante) desse trabalho nesse recurso. Mas isso não é surpreendente, pois você ainda precisa chegar a esse nível. Seria bom que o mt5 crescesse e se tornasse um WFO normal, mas ele não quer.... E, além disso, que espaço se abre para a criação de complementos! O que eu quero, acima de tudo, é implementar a validação cruzada, dividir a história em K partes, descartar cada uma delas, otimizar as restantes, depois verificar a que foi descartada e assim por diante K vezes. Todas as hipóteses que partem do "conjunto de parâmetros estáveis" mais simples podem ser testadas com muito mais confiabilidade do que com o opt-in deslizante usual.
Caro autor! O trabalho que você fez é colossal! O nível de programação também é impressionante. Mas, como resultado, ele não pode ser usado! Para fazer isso, você precisa percorrer todo o ciclo de artigos, coletar arquivos diferentes, compilar, encontrar os que faltam, pensar se eles foram atualizados em novos artigos...? Não há dúvida de que esse trabalho merece ser reunido em um só lugar.
Enquanto isso, até onde posso ver, ninguém ainda avaliou a real importância (do comerciante) desse trabalho nesse recurso. Mas isso não é surpreendente, pois você ainda precisa chegar a esse nível. Seria bom que o mt5 crescesse e se tornasse um WFO normal, mas ele não quer.... E, além disso, que espaço se abre para a criação de complementos! O que eu quero, acima de tudo, é implementar a validação cruzada, dividir a história em K partes, descartar cada uma delas, otimizar as restantes, depois verificar a que foi descartada e assim por diante K vezes. Todas as hipóteses que partem do "conjunto de parâmetros estáveis" mais simples podem ser testadas com muito mais confiabilidade do que com o opt-in deslizante usual.
Obrigado por essa avaliação tão elogiosa. Tenho mais três artigos planejados nos quais o próprio otimizador automático será descrito. Em um dos artigos, haverá instruções específicas de uso e o próprio programa. Muitos artigos, pelo fato de não ser verdade, apenas publicam o resultado do trabalho realizado sem explicar como ele foi alcançado. No momento, está descrita a parte do upload de relatórios de otimização e como eles são formados. Nos próximos artigos (estou trabalhando neles agora), o próprio otimizador será descrito - é um programa escrito em C# que executa a otimização no terminal. A propósito, nesse programa, o próprio algoritmo de otimização é colocado na parte da interface, portanto, assim que o ciclo de artigos for concluído, você poderá implementar sua ideia. Para isso, será necessário implementar a interface IOptimiser em C# e conectar o construtor do otimizador personalizado.
Com relação ao fato de que tudo está em lugares diferentes, tentarei, nos artigos em que estou trabalhando, apresentar todo o código, embora isso possa quebrar o fio da narrativa e talvez eu publique o código no github, mas os arquivos compilados ainda não serão publicados, porque o processo de compilação não é tão difícil. Se alguém tiver alguma dúvida sobre a compilação e o uso do projeto, estou sempre pronto para ajudar.
Tenho mais três artigos planejados nos quais o próprio otimizador automático será descrito.
Recentemente, cheguei a um ponto em que preciso automatizar o processo. Desenvolvi um método de otimização que fornece um resultado positivo estável no histórico de OOS, mas ele exige cálculos longos e muito trabalho manual de um tipo. E a otimização deslizante não é a única solução para o problema. Um dos desafios mais prementes é como fazer com que o geneticista amplie os intervalos de valores nos quais ele se acomoda com os melhores resultados, refine os intervalos nos quais ele se limita e realize uma nova optativa. Isso é muito diferente de definir uma faixa suficientemente ampla para todos os parâmetros de uma só vez e simplesmente escolher os melhores. Em meus robôs, o número de parâmetros é tal que essa opção levaria semanas ou não seria capaz de explorar o espaço de parâmetros com detalhes suficientes.
Então, agora penso: devo esperar por você ou procurar soluções por conta própria?) Definitivamente, devo começar a lidar com seu projeto.
No momento, ao iniciar um Expert Advisor que chama o painel, meu terminal simplesmente trava, deixando a última entrada:
2020.02.02 22:45:07.187 Terminal exit with code 0
Dito isso, toda inicialização de terminal começa com a nota:
2020.02.02.02 23:35:17.747 IPC failed to initialise IPC, with message:
2020.02.02.02 23:35:17.748 Terminal IPC dispatcher not started
Recentemente, cheguei à conclusão de que preciso automatizar o processo. Desenvolvi um método de otimização que fornece um resultado positivo estável no histórico de OOS, mas ele exige cálculos longos e muito trabalho manual monótono. E o sliding opta não é a única solução para o problema. Um dos desafios mais prementes é como fazer com que o geneticista amplie as faixas de valores nas quais ele se acomoda com os melhores resultados, refine as faixas nas quais ele se limita e realize uma nova optativa. Isso é muito diferente de definir uma faixa suficientemente ampla para todos os parâmetros de uma só vez e simplesmente escolher os melhores. Em meus robôs, o número de parâmetros é tal que essa opção levaria semanas ou não exploraria o espaço de parâmetros com detalhes suficientes.
Agora penso: esperar por você ou procurar soluções por conta própria?) Definitivamente, devo começar a lidar com seu projeto.
No momento, ao iniciar um Expert Advisor que chama o painel, meu terminal simplesmente trava, deixando a última entrada:
2020.02.02 22:45:07.187 Terminal exit with code 0
Ao mesmo tempo, toda inicialização do terminal começa com a nota:
2020.02.02.02 23:35:17.747 IPC failed to initialise IPC, with message:
2020.02.02.02 23:35:17.748 Terminal IPC dispatcher not started
Se você otimizar seu sistema manualmente, com certeza conseguirá programá-lo em meu otimizador automático.
Com relação ao erro, ele começou a ocorrer depois de conectar meus arquivos ou são seus robôs que estão afetando o terminal dessa forma? Não observei esse problema e já lancei robôs em mais de um computador com as adições que já estão nos artigos. Também tenho um sistema de 64 bits.
Se estiver escrevendo sobre minha última série de artigos (sobre gerenciamento de otimização), é melhor lidar com isso diretamente em seu computador no modo de depuração, pois é improvável que eu reproduza o problema; de qualquer forma, da última vez que lancei o projeto, isso não aconteceu.
Com relação ao erro, ele começou a acontecer depois de conectar meus arquivos ou são seus robôs que estão afetando o terminal dessa forma?
O problema nem chegou aos robôs, apenas tentei chamar seu painel dos dois primeiros artigos executando o Expert Advisor OptimisationManagerExtention. Depois disso, o terminal trava.
Nem cheguei a usar robôs, apenas tentei chamar seu painel dos dois primeiros artigos executando o Expert Advisor OptimisationManagerExtention. Depois disso, o terminal trava.
Então, como eu disse, você precisa examinar um computador e um exemplo específicos. Não sei dizer à primeira vista qual pode ser o problema, pois não lido com esse projeto há muito tempo. Pelo menos você precisa ter mais de um terminal instalado em seu computador e a dll com a interface gráfica estava no diretório MQL5/Libraries.
No projeto atual do Auto Optimiser, retirei os gráficos do terminal e ele deve ser executado como um programa normal, não como um robô, portanto, não haverá problemas como esse, pelo menos há 3 meses ou mais que venho testando-o e executei mais de um robô. E esse projeto antigo, como eu disse, você precisa ver um exemplo específico, não posso dizer qual é o motivo.
Nem cheguei a usar robôs, apenas tentei chamar seu painel dos dois primeiros artigos executando o Expert Advisor OptimisationManagerExtention. Depois disso, o terminal trava.
Propositalmente, agora recompilei e executei o projeto antigo do zero. Tudo funcionou para mim. Portanto, não consigo reproduzir o erro.
Acima de tudo, quero implementar a validação cruzada para dividir a história em K partes, cada uma delas descartada por sua vez, otimizar as partes restantes e, em seguida, verificar a que foi descartada, e assim por diante, K vezes.
A seleção não funcionará no caso geral. Você precisa definir dois parâmetros de entrada em seu TS que definam um intervalo não comercial (descartado). Então, ele será real.
Para o caso geral, você pode criar um símbolo personalizado, que é obtido a partir do original, descartando o intervalo.
A opção destacada não funcionará no caso geral. Você precisa definir dois parâmetros de entrada em seu TS que definam um intervalo sem negociação (descartado). Assim, ele será realista.
Para o caso geral, você pode criar um símbolo personalizado, que é obtido a partir do símbolo original, descartando o intervalo.
Era exatamente assim que eu ia fazer. Apenas um parâmetro é suficiente, pois a divisão é feita em partes iguais. O parâmetro especifica o número do segmento a ser descartado. Bem, você também pode adicionar o parâmetro "número de partes".
Com as ferramentas do Andrew, você pode atribuir ao terminal mestre uma tarefa para executar k otimizações, cada uma das quais terá seu próprio parâmetro "number of validation section" (número da seção de validação). Então, no entanto, você terá que escrever um complemento para reunir as estatísticas.
Tudo seria cem vezes mais simples se o testador tivesse a possibilidade de enumerar à força alguns parâmetros completamente durante a genética. Em seguida, os resultados optativos podem ser analisados dividindo-os pelo parâmetro "número de plotagem".
Outra opção é a função OnTesterDeinit(). Já implementei uma WFO completa nela, e você pode facilmente fazer a validação cruzada por qualquer critério. Mas ela será "correta" somente no caso de uma pesquisa completa, porque é feita enumerando os quadros de toda a seção de teste. Uma enumeração completa não é realista na maioria dos casos. E se executarmos a genética, o conjunto de quadros será injusto, porque no processo de opta ele seleciona os resultados também pelas seções que queremos que sejam seções de teste. No entanto, é preciso saber quanto dano real isso causará. Se a proporção entre o comprimento do local de teste e o comprimento total for pequena, a genética ainda deverá ter um número suficiente de variantes em que o local de teste acaba sendo ruim. E, depois de uma variante tão comum, é possível deixar mais um local, que não participou dela, e verificar o resultado nele.
Era exatamente isso que eu queria. Apenas um parâmetro é suficiente, pois ele é dividido em partes iguais. O parâmetro especifica o número da seção a ser descartada. Você também pode adicionar o parâmetro "número de partes".
Com as ferramentas do Andrew, você pode atribuir ao terminal mestre uma tarefa para executar k otimizações, cada uma das quais terá seu próprio parâmetro "number of validation section". Então, no entanto, você terá que escrever um complemento para reunir as estatísticas.
Tudo seria cem vezes mais simples se o testador tivesse a possibilidade de enumerar à força alguns parâmetros completamente durante a genética. Em seguida, os resultados optativos poderiam ser analisados dividindo-os pelo parâmetro "número do gráfico".
Há também a ferramenta fxsaber, que ajudará com o resto.

- www.mql5.com

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Otimização Walk Forward Contínua (Parte 3): Método de Adaptação de um Robô ao Otimizador Automático foi publicado:
A terceira parte serve como uma ponte entre as duas partes anteriores: Ele descreve o mecanismo de interação com a DLL considerada no primeiro artigo e os objetos para download de relatórios, descritos no segundo artigo. Nós analisaremos o processo de criação de um wrapper para uma classe que é importada da DLL e que forma um arquivo XML com o histórico de negociação. Nós também consideraremos um método para interagir com este wrapper.
No primeiro artigo, foi analisado o mecanismo de operação com arquivos de relatório em XML e a criação da estrutura de arquivos. A criação de relatórios foi considerada no segundo artigo. O mecanismo de geração de relatório foi examinado, começando com o objeto de download do histórico e terminando com os objetos que geram o relatório. Ao estudar os objetos envolvidos no processo de criação do relatório, a parte do cálculo foi analisada em detalhes. O artigo também continha as principais fórmulas de coeficiente, bem como a descrição de possíveis problemas de cálculo.
Como foi mencionado na introdução a este artigo, os objetos descritos nesta parte servem como uma ponte entre o mecanismo de download de dados e o de geração de relatórios. Além das funções que salvam os arquivos de relatórios de negociação, o artigo contém a descrição das classes que participam do descarregamento de relatórios XML, bem como a descrição dos modelos de robô que podem usar automaticamente esses recursos. O artigo também descreveu como adicionar os recursos criados a um algoritmo existente. Isso significa que os usuários do otimizador automático podem otimizar algoritmos antigos e novos.
Autor: Andrey Azatskiy