O algoritmo genético e suas possíveis aplicações - página 4

 
Edgar Akhmadeev:

Escrevi sobre isso há muito tempo, quando usava armações na EA. Não me lembro do ponto exato, mas parece que não estou obtendo todos os quadros (e os melhores resultados). Vou procurar postos antigos e tentar esclarecer.

Mas lembro-me claramente que era claramente reproduzível em meu Consultor Especialista - assim que o número de excessos ultrapassou um certo número e foi exibido na forma científica, minha genética quebrou-se. O importante não era apenas que a variável tinha um grande número de passos, mas que o número de variáveis também era grande.

Tudo isso faz sentido.

Há um problema com os quadros sobre a genética "grande".

Nós vamos consertar isso.

 
Slava:

O que você quer dizer com "não funciona de forma alguma corretamente"?

Como podemos reproduzir o mau funcionamento?

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

Eu não checo mais com armações, eu desisti.

Mas com a genética regular, eu a verifiquei na última construção. Aqui está o resultado sem "estouro de dígitos".


Após a interrupção:

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

Com "transbordamento":


Após passar por várias passagens interrompidas por EA (verificando se as variáveis de entrada estão corretas), a genética parou para sempre. Após a interrupção:

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

Não há um único resultado real.

Tried Advisors/MAPSARSizeOptimized.ex5 como exemplo, ele funciona. É claro que o "transbordo de dígitos" e o problema das molduras só é reproduzido com minha EA, mas como encontrar o problema... Lá tudo é muito complicado, a OnTradeTransaction etc. Eu também removi as armações. Não posso mostrar o código e ele é enorme, cerca de um megabyte. E reduzi-lo a um exemplo reprodutível levaria muito tempo. Se eu tiver tempo, vou tentar remover a OnTradeTransaction e talvez alguns outros truques.

O fato é que se não excedermos o número de passes, tudo funciona bem.

E as armações funcionaram bem (sem exceder) até a construção de 2286 inclusive.

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

um problema até agora - as AG podem começar a convergir em torno de um pequeno grupo de parâmetros de otimização após algum tempo - isto me parece normal, todas as AG funcionam desta forma e este é um problema de seu uso

...

A convergência para algum extremo é um fenômeno perfeitamente normal para qualquer algoritmo de otimização, não há nenhuma suposição de que esta seção não seja global ou local.

É outra questão que o AO deve ter um mecanismo que permita ampliar a porcentagem de mutação (ou outro equivalente em lógica que permita ampliar a expansão da área de busca), quando começar a pisar em alguma área, o extremo será encontrado melhor ou não - é desconhecido de antemão, mas é definitivamente necessário procurar em outros lugares.

por exemplo, um critério de equilíbrio máximo é estabelecido e vários ou muitos pontos podem corresponder a ele em termos absolutos, mas apenas alguns deles são de valor real, ou seja, o saldo 98756423 foi alcançado em 1523 negócios com um drawdown de 11% e o mesmo saldo foi alcançado em 12 negócios com um drawdown de 95%, qual é a diferença entre os dois?

 
Edgar Akhmadeev:

Depois de passar por várias passagens interrompidas pelo especialista (verificando se as variáveis de entrada estão corretas), a genética parou para sempre. Após a interrupção:

Não há um único resultado real.

Não me lembro se escrevi sobre isso no fórum, mas é realmente um problema e não está claro por que ele é implementado na MT. Na idéia, se o especialista devolveu o código de erro "parâmetros errados", o testador é obrigado a gerar outra instância, para que a população esteja completa.

 
Stanislav Korotky:

Não me lembro se escrevi sobre isso no fórum, mas é realmente um problema e não está claro por que ele é implementado na MT. Na idéia, se o especialista devolveu o código de erro "parâmetros errados", o testador é obrigado a gerar outra instância, para que a população esteja completa.

Se eu retornar INIT_PARAMETERS_INCORRECT para todas as combinações incorretas de parâmetros, há muitos deles e a geração terminará com um erro. Portanto, só devolvo INIT_PARAMETERS_INCORRECT quando um parâmetro específico está errado, se estiver fora de alcance. E se a combinação estiver errada (um parâmetro não deve exceder o outro) eu paro o passe, devolvo INIT_SUCCEED e Custom = -N. Isto provavelmente estraga a genética, mas não vejo nenhuma opção. Ou melhor, existe uma opção, livrando-se de combinações erradas (em casos particulares - fazendo de um parâmetro um delta para outro: v1=X, v2=Y+v1), mas é mutagênio muito forte. Os dois parâmetros estarão rigidamente ligados e, se você mudar um, tudo se desliga. Eu me afastei desta opção em favor de um resultado falso em vez de um erro.

 
Edgar Akhmadeev:

Se você retornar INIT_PARAMETERS_INCORRECT para todas as combinações de parâmetros erradas, há muitos deles e a geração terminará com um erro. Portanto, só devolvo INIT_PARAMETERS_INCORRECT quando um determinado parâmetro está errado, se ele estiver fora dos limites. E se a combinação estiver errada (um parâmetro não deve exceder o outro) eu paro o passe, devolvo INIT_SUCCEED e Custom = -N. Isto provavelmente estraga a genética, mas não vejo nenhuma opção. Ou melhor, existe uma opção, livrando-se de combinações erradas (em casos particulares - fazendo de um parâmetro um delta para outro: v1=X, v2=Y+v1), mas é mutagênio muito forte. Os dois parâmetros estarão rigidamente ligados e, se você mudar um, tudo se desliga. Eu desisti desta opção em favor de um resultado falso em vez de um erro.

Uma boa opção é retornar -DBL_MAX na variante inválida ao invés de erro.

em geral, consegui implementar Ga externa, mantendo todos os encantos da fidelidade multimoedas do MT testador, ao mesmo tempo em que consegui usar todos os núcleos de CPU e/ou agentes de rede, incluindo agentes de nuvem, evitando situações em que os agentes estão ociosos devido a completações prematuras de passagem ou populações de Ga com falta de pessoal.

há informações, apenas tSSSSS.... que existem planos para implementar vários tipos de AOs no otimizador regular, e mesmo com parâmetros, mas isto é impreciso.

 
Andrey Dik:

uma boa opção é retornar -DBL_MAX na variante inválida ao invés de erro.

e se você devolver um valor aleatório - seria pior para a AO?

 
Igor Makanu:

e se você devolver um valor renderizado, é pior para o AO?

muito pior.

Se o objetivo é mexer com a cabeça do AO, a melhor maneira é devolver um número aleatório.

 
Andrey Dik:

uma boa opção é retornar -DBL_MAX na variante inválida, ao invés de erro.

Isto é demais, o gráfico é escalonado para que você não consiga ver os resultados úteis. Devolvo um valor ligeiramente superior ao do pior caso Personalizado. O principal, porém, é definir a direção certa para a melhoria.

Igor Makanu:

E se você devolver um valor renderizado - será pior para a AO?

Qual é o objetivo? O principal é definir a direção certa, então você tem que mostrar à GA que ele mostrou o pior resultado aqui, não apenas um fraco.

 
Slava:

O que você quer dizer com "não funciona de forma alguma"?

Como posso reproduzir a incorreção da operação?

Removida aOnTradeTransaction, não ajudou. Vou continuar pensando.