Optimização no Testador de Estratégia - página 7

 

Em resumo:

  • Suficiência razoável é caber num campo de pesquisa de 2 até à potência de 64
  • O comportamento razoável consiste em pré-estimar o campo de pesquisa em vez de fazer a pesquisa de todas as variáveis ao máximo

Rashid, é improvável que alguém se atrevesse a fazer uma busca directa. Um optimizador genético 2^64 verificará facilmente, mas isso não significa que tenhamos de expor regiões de pesquisa ilimitadas. Afinal de contas, temos de gerar genes para estas regiões e depois manipulá-los.

 
Rosh:

OK, vamos fazer as contas. Suponha que um passe no testador demora 1 segundo, então o número de passes é 2^64-1 dividido por 60 e obtemos o tempo de optimização em minutos: 18 446 744 073 709 551 615/60.

Em seguida, dividir este tempo por 8 (8 núcleos no computador) e obter o tempo de optimização com este número de passes num computador de 8 núcleos. Quanto é que será preciso em horas ou dias?

Não conte, não estou a falar de uma enumeração simples. Deixe o próprio algoritmo genético determinar quantos ele necessita.

Se o compararmos com o cérebro humano, segundo os cientistas, o cérebro contém cerca de 10^10 neurónios e cada um tem cerca de 10^4 conexões sinápticas.

É por isto que todos nos esforçamos, criando programas cada vez mais avançados.

Para que foi feita a computação em nuvem? Permite aos utilizadores ir para além de um único computador, pelo que muito obrigado.

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Renat:

Para resumir uma longa história:

  • Suficiência razoável é caber num campo de pesquisa de 2 até à potência de 64
  • O comportamento razoável consiste em pré-estimar o campo de pesquisa em vez de fazer a pesquisa de todas as variáveis ao máximo

Rashid, é improvável que alguém se atrevesse a fazer um simples exagero. Um optimizador genético 2^64 verificará facilmente, mas isso não significa que tenha de expor domínios de pesquisa ilimitados. Afinal de contas, temos de gerar genes para estas regiões e depois manipulá-los.

O que é 2 em 64 é um problema rebuscado.

Num algoritmo genético, não tem de manter os piores resultados?

O que o impede de distorcer ao máximo todas as variáveis?

Não consigo perceber qual é a ligação entre os genes e 2^64?

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

Ainda assim, pode vir a ser útil procurar através de muitas variáveis (por exemplo, Rede Neural) e esta limitação não é boa.

Portanto, a esperança de liberdade das restrições))

 

O testador de estratégias parece utilizar a AG com codificação binária dos cromossomas.

Aqui está uma citação:

"No entanto, a representação binária dos cromossomas implica certas dificuldades na pesquisa em espaços contínuos de grande dimensão, e quando é necessária uma elevada precisão, é utilizada uma técnica especial baseada no facto de todo o intervalo de valores admissíveis de uma característica [ai,bi] ser dividido em secções com a precisão necessária. A precisão p requerida é definida pela expressão:


onde N é o número de bits para codificar uma cadeia de bits.

Esta fórmula mostra que p depende fortemente de N, ou seja, a precisão de representação é determinada pelo número de bits utilizados para codificar um cromossoma. Portanto, à medida que N aumenta, o espaço de busca expande-se e torna-se enorme. Um exemplo de livro bem conhecido: deixar 100 variáveis variar no intervalo [-500; 500] requer encontrar um extremo até seis casas decimais. Neste caso, utilizando a AG com codificação binária, o comprimento da corda será de 3000 elementos e o espaço de pesquisa será de cerca de101000 cromossomas".

Portanto, mesmo uma rede neural relativamente pequena no optimizador padrão, quando limitada a 64 parâmetros a serem optimizados, não pode ser treinada. Há mais uma desvantagem - é muito demorado preencher manualmente parâmetros de variáveis optimizáveis, se houver muitas delas. É por isso que já sugeri que se especificassem arrays com parâmetros optimizáveis programmaticamente.

Mas há boas notícias. Tudo o que falta no testador e no terminal pode ser implementado utilizando os meios nativos MQL5. Mais tarde publicarei os resultados de alguns testes de optimização utilizando o testador e o código do programa.

 

No entanto, nunca esperei pelos resultados do testador na tarefa de teste (quer dizer, esperar é preguiçoso).

Mas qualquer pessoa pode fazer os testes sozinha. Para tal, pode tomar o primeiro exemplo do artigo. Não se esqueça de definir o modo de optimização - procurar os máximos (para poder comparar com o optimizador padrão onde apenas os máximos estão disponíveis).

Vamos escrever um simples Expert Advisor que seja ainda mais simples do que um nabo verde e não faça nada a não ser calcular a função de teste do utilizador:

//+------------------------------------------------------------------+
//|                                                  Test expert.mq5 |
//|                                      Copyright 2010, JQS aka Joo |
//|                              https://www.mql5.com/ru/users/joo |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, JQS aka Joo"
#property link      "https://www.mql5.com/ru/users/joo"
#property version   "1.00"
//--- input parameters
input double   x1=0.0;
input double   x2=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

double OnTester()
  {
   return
   (
    pow(cos((double)(2*x1*x1))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x1)-0.12 e1,0.2 e1) -
    pow(cos((double)(2*x2*x2))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x2)-0.12 e1,0.2 e1)
    );
  }
//+------------------------------------------------------------------+

As definições na janela de teste são as seguintes:


No separador "Parâmetros de entrada", faça o seguinte:


E vai.

As conclusões aproximadas são as seguintes:

1) O optimizador no testador é 10-100 vezes mais lento (funcionou para mim, embora a optimização no testador tenha sido realizada em dois núcleos de processador, enquanto que a optimização do software foi realizada num núcleo). Muito provavelmente, uma diferença tão monstruosa deve-se ao facto de o testador ter de escrever registos, mostrar informação no ecrã, etc., para além de cálculos directos de FF, ou seja, tem "travagem forçada" em oposição à optimização do software.

2) É impossível utilizar mais de 64 parâmetros optimizáveis no testador (e no Wizard para a criação de Expert Advisors é limitado a 60 parâmetros), por isso é impossível treinar redes neurais de qualquer dimensão significativa.

É ou para escrever substitutos de teste por si mesmo (MQL5 permite-o, é uma excelente "cana de pesca" mas não um "peixe"), ou esperar que o algoritmo genético binário do testador seja substituído por um algoritmo contínuo e a limitação do número de parâmetros optimizados será removida. A segunda não é construtiva, pelo que a primeira permanece. :)

Conclusão global: Aprender MQL5.


PS Uma boa solução seria permitir desactivar a saída de informação de optimização (registos, gráfico de optimização) e, melhor ainda, personalizar os detalhes da informação apresentada, a fim de aumentar o desempenho do testador.

 
joo, há mais, para além de escrever um testador e optimizador para cálculos não tão pequenos, é necessário fazer um distribuidor de cálculos, o que envolveria todos os núcleos do processador e possivelmente ligar agentes remotos (se fizer cálculos colectivos). Em primeiro lugar, a velocidade não se pode comparar com a do testador padrão - tudo irá correr muito mais devagar, e em segundo lugar, para escrever tudo isto é preciso gastar muito tempo e centenas de kilobytes de código, e tudo por causa de quê, exactamente?
 
Mr.FreeMan:
joo, há mais, para além de escrever um testador e optimizador para cálculos não tão pequenos, é necessário fazer um distribuidor de cálculos, o que envolveria todos os núcleos do processador e possivelmente ligar agentes remotos (se fizer cálculos colectivos). Em primeiro lugar não é comparável ao testador padrão - tudo será muito mais lento, e em segundo lugar para escrever tudo isto é preciso gastar muito tempo e centenas de kilobytes de código, e qual é a razão?
GA de joo já é mais rápido que o padrão, e ao portar o código para CPP com estúdio 10 (adaptado para processadores multi-core) a velocidade é ainda 6 vezes mais rápida.
 
Mr.FreeMan:
joo, há mais a dizer; além de escrever um testador e optimizador para cálculos tão pequenos, também é necessário fazer um distribuidor para cálculos que envolvam todos os núcleos do processador e possivelmente ligar agentes remotos (se quiser realizar cálculos colectivos). Em primeiro lugar, a velocidade não se pode comparar com a do testador padrão - tudo irá correr muito mais devagar, e em segundo lugar, para escrever tudo isto é preciso gastar muito tempo e centenas de kilobytes de código, e tudo por causa de quê, exactamente?

Sobre o Urain vermelho, respondeu.

Quanto ao verde, é claro que se trata de dinheiro. Tempo é dinheiro. Sou normalmente um iniciante lento, mas um cavaleiro rápido (demorei mais de um ano a desenvolver e depurar a AG), e agora continuo a receber mensagens de agradecimento na minha caixa de entrada depois de o artigo ser publicado. :)

Não estou a criticar o provador interno. Estou apenas a focar a atenção dos criadores naquilo a que deve ser dada especial atenção. De facto, por muito bom que seja o optimizador (o optimizador, não o testador), se for terrivelmente lento, todas as suas vantagens desvanecem-se.

 

Ainda agora me ocorreu um pensamento ousado. Embora, de facto, porque não o faria?

Terei a honra de utilizar a minha UGA no optimizador MetaTrader 5 da MetaQuotes Software Corp. Será absolutamente gratuito, embora não recuse os bónus, claro.

A UGA é simples e eficiente. Muito flexível em configurações. No testador pode introduzir três modelos de definições - "Rough", "Medium" e "Fine", e também exibir separadamente as definições com a mensagem "Se não sabe exactamente para que precisa, não altere nada nestas definições". Depois será possível realizar uma optimização com o grau desejado de pesquisa de detalhes - desde uma aproximação muito rápida até à pesquisa final exacta de definições óptimas de TC. Neste momento, o optimizador incorporado não se permite ser configurado de forma alguma.

Торговая платформа MetaTrader 5 для организации брокерского обслуживания / MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 предназначена для проведения торговых операций на различных финансовый рынках. Терминал обладает большой базой аналитических возможностей и поддерживает более 70 различных инструментов для выполнения технического анализа