Média Móvel - Minicontrato

 

Galera, muito bom dia!

Tenho uma dúvida conceitual: se eu estiver operando um robô com o minicontrato de índice através de uma média móvel de 40 períodos, corro o risco de ter distorções na média móvel pois os minicontratos possuem uma vida útil de pouco mais de 2 meses?

Exemplo: quando o WINM18 entrou em operação em jun/18, se eu considerar a média móvel para 40 períodos anteriores, não haverá um cálculo incorreto da média?

Obrigado

 
Pode utilizar a média como referência o WIN$N que é o perpétuo.
 
Rafael Kannenberg:
Pode utilizar a média como referência o WIN$N que é o perpétuo.

Eu estou usando meu código assim hoje:

int maHandle = iMA(_Symbol,0,MBPeriod,MODE_EMA,0,PRICE_OPEN);
CopyBuffer(maHandle,0,0,3,ma);

Vc diz para eu fazer em vez de usar o _Symbol, usar a seguinte configuração:

int maHandle = iMA(WIN$N,0,MBPeriod,MODE_EMA,0,PRICE_OPEN);
CopyBuffer(maHandle,0,0,3,ma);

Seria isso?

 

Sim, Felipe.

WIN$N, DOL$N, WDO$N, IND$N são as séries históricas.

Eu utilizo no meu EA

"Ativo para indicadores..."

"Ativo para trades..."


então o Ativo para trades eu coloco a série atual, e o ativo para indicadores eu coloco a série histórica.

 

Olá, @Felipe Dourado Goncalves De Souza

É importante você saber que existem 6 tipos diferentes de série histórica perpétua para contratos futuros e que as características desses diferentes tipos de série podem afetar o resultado do seu backtest.

A principal diferença é quanto ao ajuste dos preços das séries anteriores. O problema fundamental é como tratar o "gap" de preço que ocorre quando uma série expira e uma nova série passa a ser a mais negociada. Como o vencimento da nova série geralmente é 1 mês à frente (no caso do dólar) ou cerca de 2 meses à frente (no caso do índice), normalmente o preço da nova série fica acima do preço da série anterior numa proporção próxima à variação esperada para o CDI no intervalo entre os vencimentos, de modo que, sem um ajuste dos preços da série anterior, se vc simular operações de swing trade (carregar a posição de um dia pro outro), o backtest poderá gerar resultados irreais de lucro (se você estiver comprado) ou de prejuízo (se vc estiver vendido), que não ocorreriam na negociação real.


A tabela abaixo, que foi divulgada certa vez aqui neste Forum tendo como origem uma resposta da corretora XP, explica detalhadamente as metodologias utilizadas em cada tipo de série perpétua e as suas implicações no backtest:


 Método

Detalhe

Nossa avaliação

Sem ajuste (@N e $N)

A série não é ajustada na rolagem, assim passamos a ter gaps nos dias da rolagem que podem introduzir lucros e perdas irreais em estratégias que carreguem posições por mais de um dia, quando ocorre a rolagem. Como preserva os valores passados exatamente como ocorreram é o mais indicado para análise intraday.

É indicado para o backtest de estratégias que operem no intraday, ou para timeframes maiores desde que se leve em consideração os as perdas e ganhos fictícios criados pelos gaps das rolagens.

Ajuste do passado pela diferença de valor

(@D e $D)

A série passada é ajustada aplicando a diferença entre os preços de fechamento na data de rolagem. A diferença absoluta entre os valores das séries passadas é mantida, os valores continuam alinhados aos ticks, mas ao aplicarmos diferenças absolutas sobre as séries passadas, corremos o risco de chegar a valores negativos, principalmente no longo prazo.

É indicado para o backtest de estratégias que operem em timeframes maiores que um dia.

Ajuste do passado de forma proporcional

(@ e $)

A série passada é ajustada aplicando a multiplicação por um fator que expressa a relação entre os preços de fechamento das séries no dia da rolagem da série contínua. As relações proporcionais entre os valores passados é mantida, porém a diferença absoluta é escalada pelo fator de multiplicação. Este método altera os valores passados para fora do tick do ativo, mas evita que ocorram valores negativos que podem gerar problemas para indicadores técnicos e escala logarítmica.

É indicado para indicadores / análise gráfica.

Para parar de gerar erros no backtest temos duas alternativas: arredondar os pontos para o tick (o que estraga a proporcionalidade) ou mudar o valor do tick para aceitar negócios aos preços proporcionais (que achamos melhor, mas que gera negócios fora do tick ao longo do backtest)


Nenhuma forma de ajuste é perfeita. Cada série tem um problema diferente que requer atenção: nas séries "N" ocorre um "gap" irreal de preço no dia do vencimento, nas séries "D" podem ocorrer distorções e até mesmo preços negativos e nas séries sem letra podem ocorrer preços fracionários desalinhados com o tick do ativo.

Há uma segunda diferença, não mencionada na tabela acima, que é se o nome da série tem um @ ou um $. O @ significa que a série perpétua reflete a série vigente até o dia do vencimento inclusive e só passa a refletir a nova série no dia seguinte ao vencimento. Já o $ significa que a série perpétua reflete sempre a série que tiver maior volume de negociação no dia, independente do dia do vencimento. Na prática, a diferença ocorre somente no dia do vencimento, quando geralmente a série que está vencendo perde liquidez e a nova série normalmente já tem maior volume. Eu recomendaria usar as séries com $, para evitar o "marasmo" no dia do vencimento.


 
pessoal, é possivel eu deixar no EA para mandar ordens no WIN$ ou sempre terei que colocar a série mais liquida, como a atual WINV18?
 
Rafael Gazzinelli:
pessoal, é possivel eu deixar no EA para mandar ordens no WIN$ ou sempre terei que colocar a série mais liquida, como a atual WINV18?
A letra correspondente ao mês de vencimento do contrato (FGH, JKMNQUVX ou Z).
 
Rafael Gazzinelli:
pessoal, é possivel eu deixar no EA para mandar ordens no WIN$ ou sempre terei que colocar a série mais liquida, como a atual WINV18?

Vai ter sempre que colocar a série mais líquida.

No dólar é mais fácil, basta criar um array com as 12 letras referentes a cada mês do ano, como o Arthur apontou acima. Daí a cada vez que o robô entrar em operação você verifica o mês e o ano corrente e monta o nome do símbolo a ser negociado.

No índice é mais complicado, porque é bimensal e vence na quarta-feira mais próxima do dia 15 dos meses pares, então vc tem que pegar o dia, o mês e o dia da semana da data corrente e fazer um monte de continhas chatas pra determinar a letra correta.

 
Felipe Dourado Goncalves De Souza:

Galera, muito bom dia!

Tenho uma dúvida conceitual: se eu estiver operando um robô com o minicontrato de índice através de uma média móvel de 40 períodos, corro o risco de ter distorções na média móvel pois os minicontratos possuem uma vida útil de pouco mais de 2 meses?

Exemplo: quando o WINM18 entrou em operação em jun/18, se eu considerar a média móvel para 40 períodos anteriores, não haverá um cálculo incorreto da média?

Obrigado

Tudo depende to tempo gráfico que você opera. Estou assumindo que você opera DayTrade...

Uma coisa é operar o M1, então mesmo que entre 1 dia e outro tenha havido um gap, em 40 minutos (40 barras) sua média tecnicamente (ex: Média Aritmética) já estabilizou. Agora se você opera um M10, com gap, sua referência vai pro espaço...

O uso da série histórica nos indicadores é a melhor saída para períodos mais longos, como foi dito aqui. O único contraponto seria a reutilização da mesma estratégia para outros ativos, você estaria travando seu código com essa restrição...

;)

 

Obrigado @Trader_Patinhas, gostei de saber que há diferenças reais entre as séries.


Eu opero win, mas analiso pelo ind$, o indicador "funciona melhor" lá. Recomendo analisar lado a lado os dois e ver qual dariam melhores entradas e saídas e daí você decide qual utilizar.

Índice :

Dólar :

 
Minions Labs:
"... O único contraponto seria a reutilização da mesma estratégia para outros ativos, você estaria travando seu código com essa restrição..."


Uma solução para isto é incluir os ativos utilizáveis no início do código como um parâmetro de escolha, e na hora de carregar buffer fazer referência ao parâmetro escolhido.

Razão: