Não para desenvolvedores de MT! O que substituir INIT_PARAMETERS_INCORRECT por ? - página 4

 
fxsaber:

Fiz um teste de Expert Advisor para o modo mate do otimizador

Este é o aspecto de um gráfico de otimização para 8 agentes em paralelo em modo de força bruta total sem passagens intercaladas (Rand = falso)

Pode-se ver claramente aqui que os agentes estão executando tarefas em lotes.


A fim de ver a dependência dos parâmetros, vamos mudar para o modo de exibição

Aqui está - uma parábola nativa, no topo da qual (unidade) vamos procurar através da GA.


No modo embaralhamento (Rand = verdadeiro), é claro, a força bruta total encontra nosso vértice


 
fxsaber:

Aqui está a parábola nativa, a parte superior da qual (uma) será procurada através da GA.

Sem a mistura GA eu não encontrei o extremo, mas cheguei perto dele

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Foram necessários 179 passes. Deixe-me lembrá-lo, o conjunto completo de tarefas é 10001 passes. Sim, o problema é muito simples, mas ainda assim.


Agora vamos tentar a variante com shuffling (Rand = verdadeiro).

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Fechar novamente. Vê-se claramente no registro, que 182 passes foram totalmente calculados, e 970 foram retirados do cache.


Bom resultado, portanto, vamos tentar aumentar o número de pontos no intervalo.

 
fxsaber:

Este é um bom resultado, portanto, vamos tentar aumentar o número de pontos no intervalo.

O número de pontos no intervalo é de um milhão.


Rand = falso

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = verdadeiro (de um milhão de pontos, os pares escolhidos aleatoriamente foram trocados 100 milhões de vezes)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


O resultado mostra que minha declaração de autoconfiança

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Não para desenvolvedores da MT! O que substituir INIT_PARAMETERS_INCORRECT por ?

fxsaber, 2018.07.10 16:27

Obviamente, se você traçar uma enumeração completa de y = x^2. Em seguida, embaralhar aleatoriamente as linhas de opimização e criar um novo conjunto com base no embaralhamento. Então a AG não encontrará o vértice da parábola.

É um tanto falso quanto verdadeiro.


Por outro lado, a escolha da função de aptidão física como parábola foi extremamente míope inicialmente, já que o número de pontos próximos a um está fora dos gráficos.


Há apenas uma pergunta para a AG, por que o extremo exato não foi encontrado sem mistura, já que a função escolhida é ideal para isso?

 
fxsaber:

Por outro lado, a escolha de uma função de aptidão física como parábola foi extremamente míope inicialmente, já que o número de pontos próximos a um está fora dos gráficos.

Presumo que se você escolher uma função com um pico afiado, a AG ainda irá quebrar após a mistura. E tal função é muito mais próxima da TC.

 
fxsaber:

Eu fiz um teste EA para o modo matemático do Optimizer

Infelizmente, meu conhecimento não é suficiente para entender tudo isso ))))

Decidi torná-lo mais simples. Em geral, acrescentei ao meu consultor especializado um registro no arquivo de cadeias legítimas. Encontrei em 1953 possíveis variantes do 117649. A propósito, levei 3 dias para fazer a busca completa no intervalo de 3 dias, apenas preços abertos e 0 negociações.

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

Tenho um arquivo agora. Ainda não sei como utilizá-lo para otimização. Vou pensar nisso amanhã...

E por que existem menos bem-sucedidos? Será que teremos que fazer isso novamente?
 
fxsaber:

Presumo que se você selecionar uma função com um pico afiado, a AG ainda irá quebrar após a mistura. E tal função é muito mais próxima da TC.

Portanto, a genética não é projetada para capturar picos. Seu objetivo é encontrar regiões estáveis, que é o que a TC exige. E os picos são, em geral, ruído.

Quanto às combinações incorretas de parâmetros, elas devem ser eliminadas na fase de formação da população, ou seja, se o intercâmbio de genes ou a mutação resultar em indivíduos incorretos, é necessário repetir sua geração novamente até que se obtenha a correta. Então tudo estará bem.

Se a peneiração peloINIT_PARAMETERS_INCORRECT acontece após a formação da população, reduzindo assim o tamanho dessa população, então, é claro, isso viola o mecanismo normal de seleção genética. Aparentemente a MQ tem essa variante. E neste caso a tarefa do iniciador do tópico é dificilmente resolúvel (no caso geral), dançar com tamborins não ajudará.

 
Сергей Таболин:

Obrigado por sua opinião, mas não há aqui nenhuma discussão sobre a arquitetura do programa. Caso você não tenha notado...

Errado, errado.

Concordo que seu problema é exatamente a arquitetura errada do programa. Acho que você só pode obter o máximo pela força bruta total, e será altamente instável.

 
Bem, vou colocar mais 5 kopeck.
O mais provável é que sejam usados excessos totais em cada carrapato. Isto, por si só, leva à lentidão de operação. Se for o caso, devemos considerar o uso de buscas completas somente na barra inicial/aberta do Expert Advisor e depois verificar os dados mais recentes. Tal otimização sempre reduz o consumo de recursos.
 
Alexey Navoykov:

A genética não é projetada para capturar picos. Seu objetivo é encontrar regiões estáveis, que é o que a TC exige. E os picos são, em geral, ruído.

Não exatamente assim. Além disso, mesmo as áreas estáveis de espaço de otimização ainda são áreas com quedas e picos, o FF está longe de ser liso.

A genética é uma ferramenta versátil, poderia ser ajustada para otimizar um FF corrompido mas, neste caso, levará mais tempo para otimizar um FF suave.

Imho, a genética padrão deve digerir conjuntos com metade do INIT_PARAMETERS_INCORRECT sem sequer pensar sobre isso. Especialmente porque estas áreas geralmente estão bem agrupadas.

mas em geral a melhor solução é transformar o espaço de parâmetros de entrada.

 
Georgiy Merts:

Em vão, em vão.

Concordo que seu problema está na arquitetura errada do programa. Acho que você só pode obter o máximo pela força bruta total, e será muito instável.

Não se trata de arquitetura. Trata-se do conjunto de funções e da ordem na qual elas são aplicadas. Na verdade, originalmente, estas funções tinham uma única sequência constante. Então decidi que talvez eu devesse experimentar a ordem de chamá-los e não chamar alguns deles. Eu o implementei através do INIT_PARAMETERS_INCORRECT. Você pode ver o progresso. Mas eu tenho um problema com a otimização genética.

Agora vamos ao que interessa. Eu criei um arquivo com correntes legítimas. Como utilizá-lo agora? Suspeito, que devo usar armações onTester... Examinei a documentação, mas alguma coisa não bate certo. Não consigo descobrir como lidar com isso.

Estou pensando em lê-lo em um array e tirar dados dele...

Razão: