Copa do Mundo de 2014 e sua influência sobre backtests e otimizações

 

A todos aqueles que fazem backtests e otimizações, gravem essas datas e horários:

DataComentário
17/06/2014 (terça-feira) BRA x MEX: horário de fechamento da bolsa alterado para as 13:30
23/06/2014 (segunda-feira) BRA x CAM: horário de fechamento da bolsa alterado para as 14:30
04/07/2014 (sexta-feira) BRA x COL: horário de fechamento da bolsa alterado para as 14:30

Qual é, na prática, a importância dessas três datas específicas? Pra ilustrar o problema vou utilizar como exemplo um Expert Advisor hipotético com uma função (aparentemente muito comum entre day-traders) que fecha eventuais posições em aberto ao se aproximar do horário "regulamentar" de fechamento do pregão. No caso, como nos meses de junho e julho não temos horário de verão no Brasil, o horário "normal" de fechamento da bolsa é 17:00 para o mercado à vista e 18:00 para o mercado futuro (índice futuro e dólar).

Agora imagine um EA que feche eventuais posições em aberto às 16:45 todos os dias. No caso específico das três datas acima citadas, devido ao fechamento antecipado da bolsa, não haverá nenhum "candle" nesses horários específicos e, portanto, posições que eventualmente estejam abertas às 13:30 (17/06) ou às 14:30 (23/06 e 04/07) não serão devidamente fechadas alguns minutos antes do fim do pregão.

Na prática, isso acarretaria em sérios problemas para aqueles EA's que não "dormem posicionados", uma vez que os mesmos podem fazer posições alavancadas para day-trade, mas não possuem saldo em conta suficiente para cobrir eventuais margens de garantia de grandes posições em aberto de um dia para o outro.

Um outro problema poderia surgir com as estatísticas relacionadas ao tempo médio de duração de cada trade, que pode ser afetado por posições que eventualmente não tenham sido fechadas nessas datas.

Por fim, em minha opinião o problema mais grave pode ocorrer naqueles EA's que lançam ordens pendentes em ativos de mercado futuro, mas não fazem ajustes com relação à validade das mesmas. Logo, eventuais ordens pendentes (por exemplo, de target profit ou redução) podem ser literalmente "apagadas" do servidor de negociações de um dia pro outro em ativos de mercado futuro. Caso as mesmas não sejam recolocadas no dia seguinte o EA pode ficar literalmente sem um objetivo definido e, nesse caso, um eventual lucro de grandes proporções poderia acabar sendo executado no stop loss atrelado à posição (que não é apagado mesmo no caso de ativos de mercado futuro, e ficam registrados no servidor de negociações da MetaQuotes), ocasionando, além de prejuízo, estatísticas ruins relacionadas à Max Favorable Excursion (MFE).

Logo, vamos deixar essas datas registradas e, para todos aqueles interessados em fazer backtests e otimizações em ativos do mercado à vista ou em contratos futuros contínuos, fiquem atentos à eventuais erros operacionais que possam surgir por conta dessas três datas específicas!

Abraço a todos,
Malacarne 

 

Antes de mais nada, boa lembrança e análise.

E, infelizmente, tenho que lembrar que faltou a fatídica data de 8/7, terça-feira (BRA x ALE).

Mas note que quem utilizar as séries históricas vai estar sujeito a problemas similares, pois o maior problema dessas séries é justamente o gap formado entre um contrato e outro que é de alguma forma adaptado de modo artificial. Também deve-se cuidar quanto às funções de relógio do MT5 utilizadas, pois se for lido o horário local e não do servidor na corretora pode-se ter problemas de mudanças no horário de verão.

Esses ajustes, aliás, são bastante comuns no Forex também, principalmente com as mudanças de horários de abertura das bolsas com as constantes mudanças de horários nas trocas de estação nos países, o que aparece bastante em backtesting com séries maiores, como estará disponível também na BM&FBovespa.

E hoje, cada vez mais, dados de bolsas e ativos internacionais são utilizados como referência para as estratégias locais, o que pode ser facilmente feito dentro do MT5.

Portanto, a pergunta que não quer calar é: será possível se proteger dessas situações no backtesting, deixando ele mais realista, sem ter os dados dos eventos precisamente programados?

Talvez a resposta para essa pergunta esteja na definição o mais científica e realista possível do SL, baseada em estatísticas históricas de gaps, e, no caso do Forex, de horários de verão internacionais.

E, provavelmente se o EA do trader é um scalper, com SL curto, ele terá que trabalhar em minimizar essas diferenças ao máximo, como proposto no tópico.

Por exemplo, f
azendo um estudo dos gaps reais desses dias de jogos (ver figura abaixo), e supondo uma operação de intraday sem fechamento, o pior seria de 287 pontos em 4/7, e o de menor impacto em 17/06 em torno de 100 pontos.

Dessa forma, quem já opera hoje com SL acima de 300 pontos, mesmo que tenha mantido o trade aberto no backtesting, não terá tido praticamente nenhuma influência nesses dias e provavelmente nos demais ajustes das mudanças de contratos das séries históricas.

MetaTrader Trading Platform Screenshots

WINQ14, D1, 2014.07.11

XP Investimentos CCTVM S/A, MetaTrader 5, Demo

WINQ14 - Gap nos dias de jogo do Brasil

WINQ14, D1, 2014.07.11, XP Investimentos CCTVM S/A, MetaTrader 5, Demo


 
figurelli:

Antes de mais nada, boa lembrança e análise.

E, infelizmente, tenho que lembrar que faltou a fatídica data de 8/7, terça-feira (BRA x ALE).

Dessa forma, quem já opera hoje com SL acima de 300 pontos, mesmo que tenha mantido o trade aberto no backtesting, não terá tido praticamente nenhuma influência nesses dias e provavelmente nos demais ajustes das mudanças de contratos das séries históricas.

Muito bem lembrada a data de 08/07 ! Confesso que tinha esquecido dela... Aliás, continuo preferindo não lembrar dessa data... :-)

Com relação ao stop loss, aparentemente 287 pontos no mini-índice não parece ser tão "doloroso"... entretanto, me refiro não apenas a contratos futuros, uma vez que esse problema afeta também ativos do mercado à vista! Basta olhar o gap de abertura em PETR4 no dia 10/07/2014... nada menos que 2,60%... No caso de BBAS3 esse gap foi menor: 1,74%... No caso de ELET6, 1,70%... Logo, dependendo do tipo de estratégia adotada pelo EA, podemos estar falando da rentabilidade de um mês inteiro de operações justamente por conta do não fechamento de posições baseado em horários específicos...

Concordo que a melhor solução é mesmo sempre usar TimeTradeServer() para operações baseadas em tempo, mas com relação ao tratamento dado em EA's ao fazer backtests nessas datas específicas, sugiro um tratamento especial para as mesmas caso haja uma de duas situações:

1) a rentabilidade do EA é fortemente impactada por essas datas específicas;

2) a lógica interna do EA não é capaz de lidar com essa situação atípica de alteração no horário de fechamento do pregão.

Por tratamento especial refiro-me ao ajuste do horário de fechamento de posições nessas datas para uma determinada quantidade de minutos (ou horas) antes do fechamento do pregão. Por exemplo, podemos pensar em algo como:

datetime serverTime = TimeTradeServer();
//---
if(serverTime >= D'2014.07.08 13:45:00' && serverTime < D'2014.07.10')
  {
   ... fecha eventuais posições em aberto ...
  }

Enfim, fica a sugestão e o registro dessas datas para futuras consultas!

Abraços,
Malacarne

 
Malacarne:

....

Com relação ao stop loss, aparentemente 287 pontos no mini-índice não parece ser tão "doloroso"... entretanto, me refiro não apenas a contratos futuros, uma vez que esse problema afeta também ativos do mercado à vista! Basta olhar o gap de abertura em PETR4 no dia 10/07/2014... nada menos que 2,60%... No caso de BBAS3 esse gap foi menor: 1,74%... No caso de ELET6, 1,70%... Logo, dependendo do tipo de estratégia adotada pelo EA, podemos estar falando da rentabilidade de um mês inteiro de operações justamente por conta do não fechamento de posições baseado em horários específicos...

....

Concordo, no mercado a vista não fiz essa análise, realmente pode existir um reflexo bem grande no backtesting e resultados, e que pode ser ainda maior nos derivativos.