Processo de Construção da Estratégia (E-mini S&P 500 Futures)

Construindo uma estratégia emini lucrativa para ES / TF / EMD

por Mark Fric
Neste artigo vou explicar o processo passo a passo completo de construção de uma estratégia lucrativa e robusta para o ES (E-mini S&P 500 Futures), incluindo múltiplos passos de diferentes testes de robustez.
Esta é uma variação do meu artigo mais antigo sobre Processo de construção de estratégia para forex.

Ao utilizar técnicas de aprendizagem de máquinas, como programação genética, é realmente fácil obter estratégias com uma curva de equidade de aparência agradável. O perigo está no ajuste da curva, portanto a parte mais importante do processo de construção de estratégias é a estratégia de teste de robustez para garantir que ela não seja adaptada às curvas dos dados históricos.
Neste artigo vou explicar como uso o filtro OOS duplo mais os testes de robustez mais o teste Walk-Forward Matrix.

Este é o resultado

Para motivação postei os resultados de uma estratégia de bom desempenho para ES / TF / EMD que encontrei utilizando o processo descrito abaixo.

Estratégia 238433 para ES/TF/EMD

A estratégia acima é publicada em nosso fórum (somente para usuários licenciados da StrategyQuant) aqui:
https://strategyquant.com/forum/topic/1688-emini-strategy-for-es-tf-emd/
disponível para download.


Entradas

Os únicos insumos que utilizo são minhas expectativas da estratégia - quero construir uma estratégia para ES (E-mini S&P 500) em 15 minutos de tempo que seja rentável e tenha o mínimo possível de drawdowns. Quero que a estratégia seja robusta o suficiente para que funcione também em outros futuros (TF, EMD) e quero que ela passe no teste Walk-Forward Matrix para garantir que a reoptimização funcione nesta estratégia.


Processo de construção da estratégia

  1. Obtenção dos dados
  2. Geração de um grande pool de candidatos potenciais
  3. Primeiro filtro - Verificação fora da amostra (OOS)
  4. Segundo filtro - reteste e segunda verificação OOS
  5. Terceiro filtro - verificação GBPUSD
  6. Quarto filtro - Testes de robustez
  7. Quinto filtro - Teste de matriz Walk-Forward

1. Obtenção dos dados

Há algumas diferenças entre o futuro e o forex. Primeiro de tudo, a obtenção de dados para futuros é um pouco mais difícil e cara. Não há fontes de dados gratuitas e a maioria dos corretores não lhe dão histórico por mais de alguns meses.
Você pode obter os dados do corretor que os oferece (Tradestation, se você for cliente deles) ou você tem que se inscrever em um serviço de dados ao vivo, como Kinetick ou iqFeed.
Há também alguns serviços especiais que não oferecem alimentação de dados ao vivo, mas que vendem dados históricos futuros. Para encontrá-los basta procurar por "dados históricos intraday furtures" no Google.

A segunda diferença é que os contratos futuros têm data de vencimento, os contratos são normalmente negociados por 3-4 meses apenas e depois são substituídos por uma versão mais recente do mesmo contrato futuro.
Para podermos usar os dados futuros para o desenvolvimento de estratégias, precisamos de ter pelo menos alguns anos de dados na forma de contratos contínuos. A maioria dos serviços de dados oferece esta opção, portanto, é apenas uma questão de assinar o serviço de dados e baixar os dados para sua plataforma de negociação.

Exportando os dados da NinjaTrader
Quando você já tem dados em seu NinjaTrader, você tem que copiá-los para StrategyQuant também, para que ele possa enviar as estratégias geradas. Para isso, temos que exportar os dados da NinjaTrader e importá-los para a StrategyQuant. Para exportar dados, temos que abrir o gráfico para ES 15 Min. Certifique-se de definir a sessão de negociação correta. Eu uso o CME US Index Futures RTH sessão neste exemplo.
Quando a tabela é aberta, basta encontrar SQDataExport e colocá-lo no gráfico. Ele exportará os dados do gráfico atualmente aberto para um arquivo de texto.

Repita o mesmo processo também para a TF (Mini Russel 2000 Futures) e EMD (E-mini S & P Midcap 400) também em 15 minas com sessão de negociação correta.
Utilizaremos esses dados mais tarde para testar nossas estratégias em outros símbolos como uma forma de teste de robustez.

Em seguida, abra StrategyQuant e crie novos símbolos para ES, TF e EMD e importe os respectivos arquivos de dados. A importação de dados da NinjaTrader é descrita em mais detalhes também na seção Guia do usuário.


2. Geração de um grande pool de candidatos potenciais

No primeiro passo da geração eu simplesmente tenho que gerar um grande conjunto de estratégias potencialmente "boas" que testarei mais tarde para a robustez. Quero que todas as minhas estratégias iniciais sejam rentáveis e robustas (até certo ponto), por isso emprego vários filtros também nesta primeira fase.

Meus ajustes para esta etapa
Você pode baixar as configurações que eu uso nesta etapa usando o link abaixo. Clique no link com o botão direito do mouse e escolha Salvar link como...
Em seguida, em StrategyQuant use Load settings para carregar este arquivo de configurações para o programa.

build_emini_strategy.xml

Observe que se você nomear seus símbolos em StrategyQuant de forma diferente, você precisará definir os dados manualmente.

Configurações explicadas
Antes de mais nada, gerei todas as minhas estratégias em múltiplos símbolos. Meu objetivo é encontrar uma boa estratégia para o ES, mas eu quero que minha estratégia seja robusta - por isso quero que seja lucrativa também no EMD. Acrescento o EMD aos dados adicionais, portanto, agora a estratégia será testada em ambos os símbolos.

Imagem 1: Definição dos dados

Vou usar dados de 2.1.2003 a 31.12.2012, que é 10 anos. O resto dos dados serão deixados para novos testes OOS mais tarde.

Vou usar o modo Evolução Genética. A idéia é fazer uma população de 200 estratégias, desenvolvê-las durante 30 gerações e depois recomeçar do zero. Desta forma, evitarei correr para um beco sem saída durante a evolução e as melhores estratégias são continuamente armazenadas no Databank.
Você também pode ver que a única condição para a população inicial é que ela deve fazer pelo menos 100 ofícios. Não precisa ser lucrativa - a evolução genética deve ser capaz de melhorá-la.

Imagem 2: Opções genéticas

Poderíamos usar também a geração aleatória sem evolução, mas a evolução deve encontrar as estratégias lucrativas mais rapidamente.

A última peça importante é o Ranking de opções. Eu estabeleci o Databank para armazenar 2000 melhores estratégias, porque eu quero ter uma boa base para o processo de seleção posterior. Também estabeleço os critérios de seleção para a relação Retorno / Drawdown - esta é a minha favorita. Você pode usar outros critérios de seleção, talvez obtenha melhores resultados.


Imagem 3: Opções de classificação

O mais importante é estabelecer os critérios iniciais de filtragem das estratégias no Banco de Dados. Quero considerar apenas estratégias que sejam pelo menos $2000 em lucro, tenham relação Retorno/DD > 3, pelo menos 300 negócios E relação Retorno/DD de uma carteira para ser pelo menos 2,5.

Como estou testando as estratégias em dois símbolos - ES e EMD, os resultados do portfólio para as estratégias também serão computados. Usando esta condição, eu simplesmente especifico que o desempenho do portfólio não será muito pior que o desempenho em apenas ES, e o programa descartará todas as estratégias com mau desempenho do portfólio.

Agora só temos que acertar o Início e deixar o programa fazer o trabalho.
Lembre-se, queremos gerar pelo menos 2000 "boas" estratégias antes de continuarmos com o processo de filtragem.

Dependendo das configurações e da velocidade de seu computador, pode levar várias horas ou até mesmo dias, portanto, seja paciente. Se o programa não produzir nenhuma estratégia por muito tempo, talvez devêssemos mudar para um prazo maior - 30 min, 1 Hora, ou tornar as restrições menos restritivas.


3. Primeiro filtro - Verificação fora da amostra (OOS)

Quando eu tiver 2000 estratégias potencialmente boas no Banco de Dados, vou parar a geração e iniciar o processo de filtragem.
Aplicarei o primeiro filtro - removendo todo o sistema que tenha um mau desempenho fora da amostra. Posso fazê-lo rapidamente, apenas classificando as estratégias em Databank e eliminando as que têm lucro OOS menor do que $3000.


Imagem 4 Banco de dados com conjunto de estratégias classificadas por OOS Net Profit

Este primeiro passo geralmente remove uma grande parte das estratégias, portanto, dos 2000 candidatos iniciais, estamos reduzidos a cerca de 1700.


2. Segundo filtro - reteste e segunda verificação OOS

Nesta etapa, eu vou re-testar todas as estratégias sobre o desconhecido Fora do período da amostra além disso, vou adicionar teste nos dados da TF.

O re-teste das estratégias é simples - basta selecionar todas as estratégias no Banco de Dados e clicar no botão Retestar. Isto moverá todas as estratégias para uma aba de Reteste. Também confirmarei o diálogo perguntando se ele deve usar as configurações de construção para o Retest

Estenderei então o período de dados até o final dos dados disponíveis. As estratégias foram geradas sobre os dados de 2.1.2003 a 31.12.2012, agora vou re-testar as estratégias sobre os dados até 31.12.2013 (mais um ano não utilizado durante a geração) e estabelecerei o período Fora da amostra de 31.12.2012 a 31.12.2012.
Note que isto irá re-testar as estratégias nos dados completos, e a parte de OOS mostrará o desempenho da estratégia durante o último ano dos dados anteriormente não utilizados.


Imagem 5: Configurações para reteste

Como também tenho dados históricos para a TF, vou adicioná-los a dados adicionais para comparar o desempenho nos três eminis.

O teste pode demorar algum tempo e depois que for feito removerei novamente todo o sistema que tenha um mau desempenho fora da amostra. Novamente posso classificar as estratégias em Databank by Net Profit (OOS) e excluir as que têm lucro OOS menor que $1500.


3. Terceiro filtro - EMD, verificação TF

Terceiro filtro é visual - Vou verificar o desempenho das estratégias sobre os símbolos EMD e TF. Vou para Results -> Equity chart, mudo o gráfico para Portfolio e passo pelas estratégias uma a uma observando as curvas de equidade para EMD e TF.


Imagem 6: Exemplo de bom e mau desempenho EMD / TF

O que estamos procurando? Como estes eminis estão altamente correlacionados, quero que a estratégia seja lucrativa nos três símbolos, assim como no primeiro exemplo. Podemos ver no segundo exemplo que o desempenho na TF é muito pobre comparado ao ES e EMD, sua curva de equidade não é grodwing, por isso vou descartar tais estratégias.

Também pode haver outro extremo - que o desempenho na TF e/ou EMD é muito melhor do que o desempenho no ES. Não há problema, acontece com freqüência que as estratégias têm melhor desempenho na TF do que no ES.

Não devemos olhar apenas para o desempenho final, mas também para as curvas de equidade. Devemos descartar todas as curvas de equidade que têm longos períodos de estagnação, ou grandes drawdowns.

Desta forma, podemos tornar o filtro muito atraente, mas não devemos ficar com mais do que 10-20 estratégias de topo para o próximo passo.


4. Quarto filtro - Testes de robustez

Depois de remover todas as estratégias com mau desempenho em EMD / TF, restam menos de 20 estratégias com bom desempenho em EMD / TF, bem como um desempenho satisfatório em EMD / TF. Agora vou testar novamente as estratégias com testes de robustez e gerenciamento de dinheiro para ver como cada uma das estratégias lida com pequenas mudanças nas entradas e para poder comparar as estratégias entre si.

Vou mudar a administração do dinheiro de tamanho fixo para montante fixo, deixando cada risco de startegy $500 por operação. Isto permite uma melhor comparação de estratégias, pois eles arriscam a mesma quantia por negociação.


Imagem 7: Ajustando a gestão de dinheiro a um valor fixo

Nos testes de robustez uso pelo menos 20 simulações e testei a estratégia para todos os tipos de situações de estresse. Depois de configurar o teste de robustez, eu re-testo as estratégias novamente.
Desta vez, será rápido porque só restam poucas estratégias no Banco de Dados.


Imagem 8: Testes de robustez

Como avaliar os testes de robustez
Os testes de robustez nos mostram como a estratégia pode se comportar na realidade, quando há negócios perdidos, dados históricos diferentes, etc. Estou procurando estratégias que tenham valores aceitáveis para o Lucro Líquido e o Drawdown no nível de confiança 95%.


Imagem 9: Resultados dos testes de robustez

No exemplo acima podemos ver resultados de robustez para duas estratégias. A estratégia à esquerda tem lucro em nível aceitável, mas o drawdown mais que dobrou em relação ao resultado original.
A estratégia à direita também tem lucro em nível aceitável e o drawdown foi quase inalterado.

Nesta etapa vou escolher apenas 1-3 estratégias finais que serão submetidas ao próximo teste de robustez.
Estas estratégias finais são selecionadas pelos melhores resultados em testes de robustez, rentabilidade geral e também simplicidade - quero que as regras da estratégia sejam o mais simples possível, e as regras comerciais devem fazer algum sentido.


5. 5. Quinto filtro - Teste de Matriz de Avanço

Ficamos com algumas estratégias e podemos fazer o teste definitivo de robustez - Walk-Forward Matrix test. O WF Matrix é simplesmente uma matriz de otimizações de caminhada para frente com diferentes números de corridas e períodos de corrida.

Se a estratégia passar no teste Walk-Forward Matrix significa que, com a ajuda da reoptimização dos parâmetros, a estratégia é adaptável a uma grande variedade de condições de mercado E também que a estratégia não é curva ajustada a dados particulares - uma vez que com a reoptimização funciona em muitos períodos de tempo diferentes.

Além deste teste WF Matrix também nos diz se a estratégia deve ser permanentemente reoptimizada e qual é o período de reoptimização mais adequado.

O teste Walk-Forward Matrix tem que ser feito para cada estratégia separadamente. Vou carregar minha estratégia para o Optimizer e selecionar a opção Walk-Forward Matrix. Também selecionarei os passos para as corridas e as porcentagens de OOS. StrategyQuant passará por todas estas combinações, realizando a otimização do Walk-Forward da estratégia.


Imagem 10: Montagem da Matriz de Avanço

Definição de parâmetros para otimização
Para que a otimização faça sentido, é preciso definir os parâmetros estratégicos que serão otimizados. Cada estratégia usa lógica diferente e tem parâmetros diferentes, portanto, é preciso configurar a otimização de forma diferente.


Imagem 11: Otimização dos parâmetros

Esta estratégia é relativamente simples, por isso vou otimizar apenas o valor de Stop Loss e o coeficiente de stop trailing.
Não é necessário otimizar todos os parâmetros, apenas aqueles que têm o maior impacto no desempenho da estratégia.

Avaliando a Matriz de Avanço
Quando a otimização tiver terminado, clicarei no resultado da matriz Walk-Forward em Databank para ver os detalhes.

Quero que o otimizador me dê uma resposta clara se a estratégia passou no teste de otimização Walk-Forward, então tenho que estabelecer critérios de pontuação.
Estes são critérios simples que têm que ser verdadeiros para que a estratégia passe no teste.


Imagem 13: Resultados do Walk-Forward Matrix

O resultado final é que o Startegy passou no teste de matriz Walk Forward para a robustez. O gráfico de pontuação 3D nos mostra que 19 das 24 combinações passaram em nossos critérios (configurações padrão utilizadas).
A estratégia não precisa passar para cada combinação, estou procurando uma área 2×2 ou 3×3 que tenha a maioria das combinações passadas - este será o grupo das melhores combinações de reoptimização. Neste caso, posso ver que 10 corridas com 30% Out of Sample é uma das melhores combinações, pois está rodeada por outras combinações que também passaram.

Ao verificar a tabela de otimização do Walk-Forward, posso ver que a estratégia continua sendo rentável também durante a reoptimização. A diminuição da rentabilidade está em linha com os testes que obtivemos da análise de robustez de Monte Carlo, mas a estratégia ainda é lucrativa.


Imagem 14: Gráfico de otimização Walk-Forward


Sumário

Descrevi meu processo completo de trabalho com a StrategyQuant, o que levou a poucas estratégias novas interessantes.

Estas estratégias são apenas amostras que me levaram menos de 2 dias de SQ funcionando e cerca de 1-2 horas do meu tempo para encontrá-las com o uso de StrategyQuant.
Você mesmo pode tentar, inspirar-se e possivelmente melhorar o processo com suas próprias idéias que você pode compartilhar em nosso fórum.

Possíveis melhorias do processo - você pode tentar buscar estratégias separadamente para direções longas e curtas. Cada direção tem sua própria dinâmica, e diferentes estratégias para longas e curtas poderiam retornar melhores resultados.
Eu não mencionei Melhorador - é uma ferramenta poderosa que lhe permite procurar uma melhor variação de sua estratégia existente, se você ainda não estiver satisfeito com o desempenho.

Basta ter em mente - a questão não é encontrar uma estratégia que seja perfeita em dados históricos. Esta é uma receita para o desastre, porque a estratégia excessivamente otimizada é garantidamente falhada no comércio real.
Nosso objetivo deve ser encontrar uma estratégia que seja robusta através de diferentes dados e/ou símbolos, pois isso significa que ela tem uma vantagem real sobre o mercado.

Assine
Notificação de
0 Comentários
Feedbacks em linha
Ver todos os comentários

Continuar lendo