Como não cair em armadilhas de otimização?
Seria bom poder desenvolver sistemas de negociação sem ter que se preocupar com a otimização.
Realisticamente, contudo, o desenvolvimento de uma estratégia de negociação lucrativa
é uma atividade de tentativa e erro, que sempre envolve alguma forma de otimização.
Sempre há um otimizador em algum lugar: se ele não estiver visível, está se espreitando pelas sombras.
J. Katz, D. Mccormick. A enciclopédia de estratégias de negociação.
O que é otimização em um sistema de negociação?
A criação de um sistema de negociação, em primeiro lugar, consiste na formulação de regras para a abertura e fechamento de uma posição longa ou curta. Geralmente essas regras contêm alguns indicadores e parâmetros. Caso eles sejam alterados, a lucratividade do sistema de negociação também irá mudar. Esta pergunta surge frequentemente: É necessário otimizar sistemas de negociação ou basta adequar o sistema aos dados históricos?
Além disso, pessoas diferentes chamam procedimentos completamente diferentes de "otimização de um sistema de negociação". Então vamos primeiro definir o que é otimização.Em primeiro lugar, nós podemos interpretar "otimização" como a seleção ou criação de um sistema de negociação capaz de resolver os nossos problemas melhor do que outros sistemas. Por exemplo, estamos buscando um sistema capaz de produzir o maior lucro possível em relação a iene/dólar norte-americano no momento. Para isso, escolhemos um sistema com alguns parâmetros fixos a partir de uma determinada variedade de sistemas. Esta escolha pode ser feita, por exemplo, entre sistemas baseados em indicadores diferentes. Vamos chamar isso de "otimização do primeiro tipo".
Em segundo lugar, nós podemos interpretar "otimização" como a descoberta dos parâmetros que nos permitiriam obter os melhores resultados no sistema de negociação selecionado. Eles podem ser a seleção do período para o cálculo da média ou o período para calcular estruturas estocásticas. Vamos chamar isso de "otimização do segundo tipo".
Todos devem entender que, ao criar uma estratégia, traders tentam, explícita ou implicitamente, usar ambos tipos de otimização. De fato, a partir do momento em que nós selecionamos o sistema de negociação com o qual vamos trabalhar, nós presumimos que ele será o melhor sistema de negociação que possuímos. ou seja, nós usamos a otimização do primeiro tipo. Contudo, como qualquer sistema possui alguns parâmetros, nós tentamos encontrar os valores para estes parâmetros que irão nos trazer os melhores resultados. Isso é, obviamente, a otimização do segundo tipo. Além disso, é impossível separar esses dois tipos de otimização ao criar um sistema de negociação. É por isso que a nossa resposta à pergunta "a otimização deve ser usada na criação de um sistema de negociação" é clara: A otimização deve ser usada. Uma outra questão é como fazer isso. Há vários estágios na criação de um sistema de negociação:- início da ideia do que seria a base do sistema de negociação;
- seleção dos critérios ou regras de tomada de decisões;
- definição dos parâmetros do sistema;
- teste do sistema; e
- retorno às clausulas anteriores caso seja necessário fazer alterações no sistema.
Problemas da otimização do segundo tipo
Ao criar um sistema de negociação automatizado, todos os desenvolvedores usam tanto a otimização do primeiro tipo quanto a do segundo tipo. A busca por critérios ou regras de tomada de decisões é uma tarefa para sistemas heurísticos como redes neurais, algoritmos genéticos, e, é claro, o cérebro humano, o mais poderoso sistema que existe no momento. Este é o primeiro tipo de otimização, então toda a responsabilidade por esta otimização está na mão dos traders.O segundo tipo de otimização é a busca pelos melhores parâmetros. É aqui que o problema ocorre, pois é muito fácil adequar os dados ao histórico e obter "lucros enormes". Infelizmente, este processo só é eficiente no histórico. É difícil evitar uma "otimização excessiva" do tipo, então alguns traders começam a enxergá-la negativamente. Por quê?
Como o problema da otimização excessiva pode ser resolvido?
O que devemos fazer? Nós não podemos negligenciar a otimização, ou então nós iríamos ignorar a melhor solução ou uma estratégia potencialmente lucrativa por termos encontrado os parâmetros errados. Contudo, a otimização excessiva também pode resultar em sérios problemas. É preciso encontrar o ponto de equilíbrio.Vamos abordar a otimização matematicamente. Em geral, quando há muitos parâmetros a serem otimizados, nós procuramos um hiperplano no qual o lucro é estável e muda de forma mais ou menos igual quando os parâmetros são levemente modificados. Durante a otimização, nós tentamos encontrar uma solução do tipo, na qual os lucros são os mais altos possíveis e desvios insignificantes em relação à solução ideal não resultam em alterações bruscas no lucro.
Infelizmente ainda não há um algoritmo integrado ao MetaTrader capaz de procurar por soluções ideais por si só. Um dos algoritmos mais poderosos em relação à resolução destes problemas é o KRAB. Ele é descrito no livro "Métodos aplicados de análise de dados e conhecimento", de N. Zagoruyko. Novosibirsk: Editora do instituto de matemática, 1999 (em russo). Seria ótimo se ele fosse incluído nas próximas versões... Mas nem tudo está perdido"
O MetaTrader é capaz de construir um diagrama de otimização para otimizar um ou dois parâmetros. Isso significa que, ao projetar os resultados da otimização em um plano, nós podemos, em teoria, encontrar uma solução ideal. Em outras palavras, ao otimizar dois parâmetros por dois, nós encontramos a região da melhor solução.Em relação a três parâmetros, teremos que repetir este procedimento
Já em relação a cinco parâmetros, isso será feito
Ao otimizar dois parâmetros, nós obtemos um diagrama de otimização como o abaixo:
O diagrama abaixo não é tão claro: Nós podemos ver duas áreas contendo máximos neste diagrama. Qual nós devemos escolher?
Um olhar experiente é capaz de enxergar a região de solução no canto inferior direito, pois a área dos quadrados vizinhos mostra uma queda de lucro totalmente menor do que aquela no início do gráfico. Então eu lhe recomendaria analisar os diagramas com atenção de modo a proteger o seu depósito.
//+------------------------------------------------------------------+ //| SP.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| https://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "https://www.metaquotes.net" //---- input parameters extern int TakeProfit=50; extern int StopLoss=30; extern int RsiLen=4; extern int KLen=8; extern int Momlength=10; extern int Lots=1; extern int rsi_oversold=39; extern int stoc_oversold=29; extern int rsi_overbought=60; extern int stoc_overbought=70; extern int Mom_Sell=-2; extern int Mom_Buy=2; int expertBars; double RSIlevel; double Stoclevel; double MomLevel; double DLen=3; //+------------------------------------------------------------------+ //| returns true if a new bar has come, otherwise returns false | //+------------------------------------------------------------------+ bool isNewBar() { //---- bool res=false; if (expertBars!=Bars) { expertBars=Bars; res=true; } //---- return(res); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double price; double stop; double profit; //---- if ((isNewBar())&& (OrdersTotal()==0)&& (AccountBalance()>5000)) { RSIlevel=iRSI(NULL,0,RsiLen,PRICE_CLOSE,0); Stoclevel=iStochastic(NULL,0,KLen,DLen,3,MODE_SMA,0,MODE_MAIN,0); MomLevel=100 - iMomentum(NULL,0,Momlength,PRICE_CLOSE,0); /*if (AccountBalance()>50000) {Lots=NormalizeDouble( AccountBalance()/10000,0)-4;} else Lots=1;*/ if ((RSIlevelrsi_oversold)&&(Stoclevelstoc_oversold)&&(MomLevel>Mom_Sell)) { price=Ask; stop=NormalizeDouble(price-StopLoss*Point,Digits); profit=NormalizeDouble(price+TakeProfit*Point,Digits); OrderSend(Symbol(),OP_BUY,Lots,price,3,stop,profit,NULL,0,0,Green); //Print(AccountBalance()); } if ((RSIlevel>rsi_overbought)&&(Stoclevel>stoc_overbought)&&(MomLevelMom_Buy)) { price=Bid; stop=NormalizeDouble(price+StopLoss*Point,Digits); profit=NormalizeDouble(price-TakeProfit*Point,Digits); OrderSend(Symbol(),OP_SELL,Lots,price,3,stop,profit,NULL,0,0,Green); //Print(AccountBalance()); } } //---- return(0); } //+------------------------------------------------------------------+
Após termos otimizado os parâmetros, obteremos três diagramas:
Dependência de lucros do RSI e do StopLoss
As melhores regiões são:
- Diagrama 1 – (4;5)&(3;6);
- Diagrama 2 – (80;90)&(3;6);
- Diagrama 3 – (80;90)&(4;5).
Combinando-os obteremos a melhor solução – (5,4,80).
Deve-se notar que o StopLoss possui um passo maior, dez, na otimização. Caso necessário, a solução obtida também pode ser analisada com um passo menor.Conclusão
É muito bom, claro, que a saturação de cor verde da célula nos permita julgar quão lucrativa é a região. Contudo, será ainda melhor caso as regiões de perda forem, de forma semelhante, coloridas em vermelho. Isso nos ajudará a estimar a estratégia em um nível completamente diferente. De fato, nós seremos capazes de obter uma imagem completa e tridimensional da otimização!Finalmente, algumas recomendações em relação à otimização:
- A amostra de dados para a otimização deve ser representativa. Ela deve exceder 3 anos em relação ao cronograma diário.
- Teste a sua estratégia fora da amostra de otimização. Isso irá lhe permitir estimar os parâmetros selecionados.
- Não otimize muitos parâmetros ao mesmo tempo: a probabilidade de você adequá-los ao histórico seria grande demais.
- Aumente o posso para reduzir o tempo de otimização. A melhor região não será negligenciada. O agrupamento obtido pode ser analisado em maiores detalhes mais tarde (técnica de peneiramento).
- Não perca horas na otimização: é melhor modernizar o algoritmo do expert advisor.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1434
- 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