четверг, 19 апреля 2018 г.

Cointegration trading strategy forex


Cointegration in Forex Pairs Trading.


Cointegration na troca de pares forex é uma ferramenta valiosa. Para mim, a cointegração é a base para uma excelente estratégia de negociação mecânica neutra do mercado que me permite lucrar em qualquer ambiente econômico. Se um mercado está em uma tendência de alta, tendência de baixa ou simplesmente se movendo de lado, a negociação de pares de divisas me permite colher ganhos durante todo o ano.


Uma estratégia de negociação de pares forex que utiliza cointegração é classificada como uma forma de negociação de convergência com base em arbitragem estatística e reversão para significar. Este tipo de estratégia foi popularizado por uma equipe de negociação quantitativa no Morgan Stanley na década de 1980, usando pares de ações, embora eu e outros comerciantes descobrirem que também funciona muito bem para negociação de pares de forex também.


Negociação de pares de Forex com base na cointegração.


O comércio de pares de Forex com base na cointegração é essencialmente uma estratégia de reversão para média. Declarado simplesmente, quando dois ou mais pares forex são cointegrados, significa que o spread de preços entre os pares de divisas separados tende a reverter ao seu valor médio consistentemente ao longo do tempo.


É importante entender que a cointegração não é correlação. A correlação é uma relação de curto prazo em relação a co-movimentos de preços. A correlação significa que os preços individuais se movem juntos. Embora a correlação seja dependente de alguns comerciantes, por si só é uma ferramenta não confiável.


Por outro lado, a cointegração é um relacionamento de longo prazo com co-movimentos de preços, nos quais os preços se movem juntos, mesmo dentro de certos intervalos ou spreads, como se estivessem amarrados. Descobri que a cointegração era uma ferramenta muito útil na troca de pares de forex.


Durante a minha troca de pares forex, quando o spread se alarga para um valor limiar calculado pelos meus algoritmos de negociação mecânica, eu "curto" o spread entre os preços dos pares. Em outras palavras, eu aposto que o spread reverterá em direção a zero devido à sua cointegração.


As estratégias básicas de negociação de pares de forex são muito simples, especialmente quando se utilizam sistemas de negociação mecânica: escolho dois pares de moedas diferentes que tendem a se mover de forma semelhante. Compre o par de moedas insuficientes e venda o par de desempenho. Quando a propagação entre os dois pares converge, eu fechar minha posição com lucro.


A troca de pares de Forex com base na co-integração é uma estratégia razoavelmente neutra para o mercado. Como exemplo, se um par de moedas cair, o comércio provavelmente resultará em uma perda no lado longo e um ganho compensatório no lado curto. Assim, a menos que todas as moedas e instrumentos subjacentes subitamente percam valor, o comércio líquido deve ser próximo de zero no pior cenário.


Do mesmo jeito, as negociações de pares em muitos mercados são uma estratégia de negociação de autofinanciamento, uma vez que o produto de vendas curtas às vezes pode ser usado para abrir a posição longa. Mesmo sem esse benefício, a troca de pares de divisas com cointegração ainda funciona muito bem.


Entendendo a co-integração para negociação de pares forex.


Cointegration é útil para mim na troca de pares forex porque me permite programar meu sistema de negociação mecânica com base em desvios de curto prazo dos preços de equilíbrio, bem como expectativas de preços a longo prazo, pelo que quero dizer correções e retorno ao equilíbrio.


Para entender como a negociação de negociação de pares de divisas orientadas pela cointegração, é importante primeiro definir a cointegração e depois descrever como ela funciona em sistemas de negociação mecânica.


Como eu disse acima, a cointegração refere-se à relação de equilíbrio entre conjuntos de séries temporais, como os preços de pares de divisas separados que, por si só, não estão em equilíbrio. Declarado no jargão matemático, a cointegração é uma técnica para medir a relação entre variáveis ​​não estacionárias em uma série temporal.


Se duas ou mais séries temporais tiverem um valor de raiz igual a 1, mas sua combinação linear é estacionária, então é dito que estão cointegradas.


Como um exemplo simples, considere os preços de um índice de bolsa e seu contrato de futuros relacionado: embora os preços de cada um desses dois instrumentos possam vagar aleatoriamente em breves períodos de tempo, eles retornarão ao equilíbrio e seus desvios serão estacionário.


Aqui está outra ilustração, declarada em termos do exemplo clássico de "caminhada aleatória": digamos que há dois bêbados individuais caminhando para casa depois de uma noite de carousing. Vamos continuar a assumir que esses dois bêbados não se conhecem, então não há uma relação previsível entre seus caminhos individuais. Portanto, não há cointegração entre seus movimentos.


Em contraste, considere a idéia de que um bêbado individual está vagando para casa enquanto acompanha seu cão em uma coleira. Neste caso, há uma conexão definitiva entre os caminhos dessas duas criaturas pobres.


Embora cada um dos dois ainda esteja em um percurso individual durante um curto período de tempo, e mesmo que um dos pares possa aleatoriamente levar ou atrasar o outro em qualquer ponto no tempo, ainda assim, eles sempre serão encontrados juntos. A distância entre eles é bastante previsível, pelo que o par é considerado cointegrado.


Voltando agora a termos técnicos, se houver duas séries temporais não estacionárias, como um conjunto hipotético de pares de moeda AB e XY, que se tornam estacionários quando a diferença entre eles é calculada, esses pares são chamados de série de primeira ordem integrada - também ligue para uma série I (1).


Mesmo que nenhuma dessas séries permaneça em um valor constante, se houver uma combinação linear de AB e XY estacionada (descrita como I (0)), então AB e XY são cointegradas.


O exemplo simples acima consiste em apenas duas séries temporais de pares de forex hipotéticos. No entanto, o conceito de cointegração também se aplica a séries temporais múltiplas, usando ordens de integração mais altas ... Pense em termos de um bêbado errante acompanhado por vários cães, cada um em uma coleira de comprimento diferente.


Na economia do mundo real, é fácil encontrar exemplos que mostrem cointegração de pares: renda e gastos, ou a dureza das leis criminais e o tamanho da população prisional. Na troca de pares forex, meu foco é capitalizar a relação quantitativa e previsível entre pares de moedas cointegradas.


Por exemplo, vamos assumir que estou assistindo esses dois pares de moeda hipotéticos cointegrados, AB e XY, e a relação cointegrada entre eles é AB & # 8211; XY = Z, onde Z é igual a uma série estacionária com uma média de zero, isto é, eu (0).


Isso parece sugerir uma estratégia de negociação simples: quando AB - XY & gt; V e V é o meu preço de gatilho limiar, então o sistema de negociação de pares forex venderia AB e compraria XY, uma vez que a expectativa seria AB para diminuir o preço e XY para aumentar. Ou, quando AB-XY & lt; - V, eu esperaria comprar AB e vender XY.


Evite a regressão espúria na troca de pares forex.


No entanto, não é tão simples como sugeriria o exemplo acima. Na prática, um sistema de negociação mecânica para troca de pares de forex precisa calcular a cointegração em vez de apenas confiar no valor R-quadrado entre AB e XY.


Isso ocorre porque a análise de regressão normal é baixa ao lidar com variáveis ​​não estacionárias. Provoca a chamada regressão espúria, o que sugere relacionamentos entre variáveis, mesmo quando não existe.


Suponhamos, por exemplo, que eu regredisse 2 séries temporais de "caminhada aleatória" separadas uma contra a outra. Quando eu teste para ver se há uma relação linear, muitas vezes eu vou encontrar valores altos para R-quadrado, bem como baixos valores de p. Ainda assim, não há relacionamento entre esses 2 passeios aleatórios.


Fórmulas e testes para cointegração na negociação de pares forex.


O teste mais simples para cointegração é o teste de Engle-Granger, que funciona assim:


Verifique que AB t e XY t sejam ambos I (1) Calcule a relação de cointegração [XY t = aAB t + et] usando o método de mínimos quadrados Verifique se os resíduos de cointegração e estão estacionários usando um teste de raiz de unidade como o Teste avaliado Dickey-Fuller (ADF).


Uma equação Granger detalhada:


I (0) descreve a relação de cointegração.


XY t-1 - βAB t-1 descreve a extensão do desequilíbrio longe do longo prazo, enquanto αi é tanto a velocidade como a direção em que a série temporal do par de moedas se corrige do desequilíbrio.


Ao usar o método Engle-Granger na negociação de pares forex, os valores beta da regressão são usados ​​para calcular os tamanhos comerciais para os pares.


Ao usar o método Engle-Granger na negociação de pares forex, os valores beta da regressão são usados ​​para calcular os tamanhos comerciais para os pares.


Correção de erros para cointegração em troca de pares forex:


Ao usar cointegração para negociação de pares de divisas, também é útil explicar como as variáveis ​​cointegradas se ajustam e retornam ao equilíbrio de longo prazo. Então, por exemplo, aqui estão as duas séries temporais de pares de forex mostrados de forma autoregressiva:


Negociação de pares de Forex com base na cointegração.


Quando uso o meu sistema de negociação mecânica para negociação de pares de divisas, a configuração e a execução são bastante simples. Primeiro, acho dois pares de moedas que parecem ser cointegradas, como EUR / USD e GBP / USD.


Então, eu calculo os spreads estimados entre os dois pares. Em seguida, eu verificar a estacionaridade usando um teste de raiz unitária ou outro método comum.


Tenho certeza de que meu feed de dados de entrada está funcionando adequadamente, e eu deixo meus algoritmos de negociação mecânica criar os sinais comerciais. Supondo que eu tenha executado back-tests adequados para confirmar os parâmetros, finalmente estou pronto para usar cointegração na minha troca de pares forex.


Encontrei um indicador MetaTrader que oferece um excelente ponto de partida para construir um sistema de negociação de pares de divisas de cointegração. Parece um indicador Bollinger Band, no entanto, o oscilador mostra o diferencial de preços entre os dois pares de moedas diferentes.


Quando este oscilador se move em direção ao extremo alto ou baixo, indica que os pares estão se desacoplando, o que sinaliza os negócios.


Ainda assim, para ter certeza de sucesso, confio no meu sistema de comércio mecânico bem construído para filtrar os sinais com o teste Augmented Dickey-Fuller antes de executar os negócios apropriados.


Claro, qualquer pessoa que queira usar cointegração para a negociação de pares forex, ainda que não tenha as necessárias habilidades de programação, pode contar com um programador experiente para criar um consultor especialista vencedor.


Através da magia da negociação algorítmica, programo meu sistema de negociação mecânica para definir os spreads de preços com base na análise de dados. Meu algoritmo monitora os desvios de preços, então compra e vende automaticamente pares de moedas para reduzir as ineficiências do mercado.


Riscos a ter em conta ao usar cointegração com troca de pares forex.


O comércio de pares de Forex não é totalmente livre de riscos. Acima de tudo, eu tenho em mente que a negociação de pares forex usando a cointegração é uma estratégia de reversão média, que se baseia no pressuposto de que os valores médios serão os mesmos no futuro como eram no passado.


Embora o teste Augmented Dickey-Fuller mencionado anteriormente seja útil na validação das relações cointegradas para o comércio de pares de forex, isso não significa que os spreads continuarão a ser cointegrados no futuro.


Confio em fortes regras de gerenciamento de risco, o que significa que meu sistema de negociação mecânica sai de negociações não lucrativas se ou quando a reversão-a-média calculada é invalidada.


Quando os valores médios mudam, é chamado de deriva. Eu tento detectar a deriva o mais rápido possível. Em outras palavras, se os preços dos pares Forex previamente cointegrados começam a se mover em uma tendência em vez de reverter para a média previamente calculada, é hora de os algoritmos do meu sistema de negociação mecânica recalcular os valores.


Quando uso o meu sistema de negociação mecânica para negociação de pares de divisas, uso a fórmula autorregressiva mencionada anteriormente neste artigo para calcular uma média móvel para prever o spread. Então, eu saio do comércio em meus limites de erro calculados.


Cointegration é uma ferramenta valiosa para minha troca de pares forex.


O uso da cointegração na negociação de pares forex é uma estratégia de negociação mecânica neutra do mercado que me permite negociar em qualquer ambiente de mercado. É uma estratégia inteligente que se baseia na reversão, mas isso me ajuda a evitar as armadilhas de algumas das outras estratégias de negociação forex de reversão para média.


Devido ao seu uso potencial em sistemas de negociação mecânica rentáveis, a cointegração para troca de pares de divisas atraiu o interesse tanto de comerciantes profissionais como de pesquisadores acadêmicos.


Há muitos artigos recentemente publicados, como esse artigo de blog focado em quantos, ou essa discussão acadêmica sobre o assunto, bem como uma grande discussão entre os comerciantes.


Cointegration é uma ferramenta valiosa no meu comércio de pares forex, e eu recomendo que você olhe para ele mesmo.


Diz Tommaso Sillian.


Muito bom artigo. É inspirador. Obrigado por escrevê-lo!


Harish Nachnani diz.


A correlação também é aplicada em ações (ações). Qual é a diferença? O processo acima pode ser aplicado às ações?


Eddie Flower diz.


Sim, o mesmo processo pode ser aplicado aos estoques, bem como aos derivados. Uma vez que existe um grande universo de estoques em comparação com os pares de divisas, deve haver uma maior quantidade de oportunidades potenciais para negociação. Com o poder de cruzamento dos sistemas comerciais de hoje, muitos conjuntos de relacionamentos podem ser examinados rapidamente, em tempo real. Cointegration também pode ser usado por comerciantes de opções; pode-se esperar que produza resultados como os populares spreads da Coca Cola-Pepsi, nos quais as relações de preços entre certos estoques / opções permitem que os comerciantes se envolvam em jogos de baixo risco com uma boa chance de ganhar.


Harish Nachnani diz.


Você troca intra dia ou durante semanas usando esta estratégia? Além disso, que linguagem de programação você recomendaria. R leva tempo para executar cálculos e se é comércio intra-dia, a latência entra em jogo.


A linguagem de programação não é importante para o comércio no final do dia. Qualquer linguagem importante como Perl, Python, C / C ++ e C # está bem. R pode ser extremamente rápido, mas retarda se for forçado a alocar dinamicamente a memória.


Eu troco usando gráficos diários, e eu permaneço na maioria dos negócios por alguns dias para algumas semanas. Shaun é um programador experiente, e sempre confio no seu julgamento para usar a melhor linguagem de programação para obter os melhores resultados para uma determinada estratégia de negociação. Na verdade, Shaun pode criar um programa bem equilibrado e vencedor para alavancar a co-integração e outros fatores também. Se você gostou de uma citação, entre em contato com ele diretamente em infoonestepremoved.


Chris Zimmer diz.


Existe algum interesse em uma implementação deste para o MT4. Se você pode fornecer algumas especificações sobre a implementação desta estratégia no código, envie para czimmeronestepremoved.


Estou fazendo um pequeno projeto sobre estratégias de co-integração no FX para meu mestrado. Eu acredito que você executou testes de cointegração em muitos pares de moedas. Quais as quais você achou ser estatisticamente significativamente cointegrado?


Eu não acho que Eddie realmente correu os números. O artigo pretende ser um guia geral para o conceito, mas não é o ponto de ser uma estratégia de boa-fé.


1) USD / JPY e EUR / CHF.


2) EUR / PLN e EUR / HUF.


3) USD / TRY e USD / ZAR.


4) AUD / USD e NZD / USD.


5) EUR / NOK e EUR / SEK.


Eu sei que estes estão bastante correlacionados, mas isso não significa cointegração.


Camilo Romero diz.


Existem bons pares de forex cointegrados:


Eu não acho que USDJPY / EURCHF seja um par cointegrado porque não haverá uma estratégia neutra do mercado.


Obrigado por compartilhar.


Camilo Romero diz.


Alguém implementou um código de retorno usando a estratégia de reversão média?


Eu deveria ajustar os valores do pip entre dois pares de divisas?


Alguém adicionou custo de comissão ao código de retorno e obteve resultados lucrativos?


Tenho certeza de que alguém tem, mas não é algo em que você encontrará uma resposta óbvia em gráficos de curto prazo. Você pode encontrar cointegrações de longo prazo, mas a pesquisa não foi feita pela I & # 8217;


A única cointegração é entre EUR e CHF e entre AUD e NZD, uma vez que o único comércio e economia íntima entre esses países e os bancos centrais estão criando essa cointegração.


Não EUR e GBP?


Robert J Armagost diz.


Olá Eddie. Excelente artigo. Voltei a testar 10 anos de gráficos pensando e # 8221; Eu não posso ser a primeira pessoa a ter pensado nisso! & # 8221; quando encontrei este site. Muito obrigado por escrever isso. Eu não me sinto tão sozinho. 🙂 Apenas me perguntando qual corretor você usa ou você usa vários corretores. Obrigado pelo seu tempo.


Sinceramente Robert J. Armagost.


O corretor principal que eu uso é Pepperstone e STO (via TopTradr).


Olá Shaun eu tenho negociado esta estratégia manualmente. Tem software para automatizar isso? (Então, eu não tenho mais que acordar no meio da noite) Obrigado pelo seu tempo.


Não fora da prateleira, mas é algo que podemos construir. Tire-me com as suas regras de entrada e saída para obter uma estimativa. infoonestepremoved.


Robert & # 8212; Obrigado pelo seu bom feedback. Shaun tem as ferramentas certas para implementar este tipo de estratégia de negociação, e eu concordo inteiramente com as recomendações do corretor, Agradeço novamente por comentar! EF.


QuantStart.


Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.


Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.


Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.


Por Michael Halls-Moore em 2 de junho de 2016.


Um tempo atrás, consideramos um modelo de negociação baseado na aplicação dos modelos da série temporal ARIMA e GARCH aos dados diários S & amp; P500. Mencionamos nesse artigo, bem como em outros artigos anteriores de análises de séries temporais, que eventualmente considerariamos as estratégias de negociação de reversão e a forma de construí-los.


Neste artigo, eu quero discutir um tópico chamado cointegração, que é um conceito de séries temporais que nos permite determinar se conseguimos formar um meio de reversão de ativos. Vamos abordar a teoria das séries temporais relacionadas à cointegração aqui e no próximo artigo, vamos mostrar como aplicar isso às estratégias comerciais reais usando a nova estrutura de backtesting de código aberto: QSTrader.


Vamos prosseguir discutindo a reversão média na tradicional estrutura de "negociação de pares". Isso nos levará ao conceito de estacionariedade de uma combinação linear de ativos, levando-nos finalmente a cointegração e testes de raiz unitária. Uma vez que esboçamos esses testes, simularemos várias séries temporais no ambiente estatístico R e aplicaremos os testes para avaliar a cointegração.


Estratégias de negociação de reversão média.


A idéia tradicional de um "comércio de pares" de reversão média é simultaneamente curtos e curtos dois ativos separados compartilhando fatores subjacentes que afetam seus movimentos. Um exemplo do mundo das ações pode ser longo McDonald's (NYSE: MCD) e Short Burger King (NYSE: BKW - antes da fusão com Tim Horton).


A razão para isso é que os preços das ações a longo prazo provavelmente estarão em equilíbrio devido aos amplos fatores do mercado que afetam a produção e o consumo de hambúrgueres. Uma interrupção de curto prazo para um indivíduo no par, como uma interrupção da cadeia de suprimentos que afete apenas o McDonald's, levaria a uma deslocação temporária em seus preços relativos. Isso significa que um comércio longo-curto realizado neste ponto de interrupção deve se tornar rentável, pois os dois estoques retornam ao seu valor de equilíbrio uma vez que a interrupção é resolvida. Esta é a essência do clássico "comércio de pares".


Na medida em que estamos interessados ​​em realizar a negociação de reversão média não apenas em um par de ativos, mas também cestas de ativos que estão separadamente interligados.


Para conseguir isso, precisamos de uma estrutura matemática robusta para identificar pares ou cestas de ativos que significam reverter da maneira descrita acima. É aqui que surge o conceito de séries de tempo cointegradas.


A idéia é considerar um par de séries temporais não estacionárias, como os ativos de MCD e BKW de forma aleatória, e formar uma combinação linear de cada série para produzir uma série estacionária, que tem uma média e variância fixas.


Esta série estacionária pode ter interrupções de curto prazo onde o valor vagueia longe da média, mas devido à sua estacionaridade, este valor retornará eventualmente à média. As estratégias de negociação podem fazer uso disso aniquilando / diminuindo o par no ponto de interrupção apropriado e apostando em uma reversão de longo prazo da série para sua média.


As estratégias de reversão médias, como esta, permitem uma ampla gama de instrumentos para criar as séries de tempo estacionárias "sintéticas". Certamente, não estamos restritos a ações de "baunilha". Por exemplo, podemos fazer uso do Exchange Traded Funds (ETF) que acompanha os preços das commodities, como petróleo bruto e cestas de empresas produtoras de petróleo. Portanto, há muitos marcos para identificar tais sistemas de reversão significativos.


Antes de aprofundar a mecânica das estratégias de negociação reais, que serão objeto do próximo artigo, devemos primeiro entender como identificar estatisticamente tais séries cointegradas. Para isso, utilizaremos técnicas da análise de séries temporais, continuando o uso da linguagem estatística R como em artigos anteriores sobre o tema.


Cointegração.


Agora que motivamos a necessidade de um quadro quantitativo para realizar a negociação média de reversão, podemos definir o conceito de cointegração. Considere um par de séries temporais, ambas não-estacionárias. Se tomarmos uma combinação linear específica dessas séries, às vezes pode levar a uma série estacionária. Esse par de séries seria então denominado cointegrado.


A definição matemática é dada por:


Cointegração.


Deixe $ \ $ e $ \ $ ser duas séries temporais não estacionárias, com constantes $ a, b \ in \ mathbb $, constantes. Se a série combinada $ a x_t + b y_t $ estiver estacionada, dizemos que $ \ $ e $ \ $ são cointegrados.


Embora a definição seja útil, não nos fornece diretamente um mecanismo para determinar os valores de $ a $ e $ b $, nem se essa combinação é, de fato, estatisticamente estacionária. Para este último, precisamos utilizar testes para raízes unitárias.


Teste de raiz unitária.


Em nossa discussão anterior de modelos de AR (p) autorregressivos, explicamos o papel da equação característica. Observamos que era simplesmente um modelo autorregressivo, escrito em forma de mudança para trás, definido como igual a zero. Resolver esta equação nos deu um conjunto de raízes.


Para que o modelo seja considerado estacionário, todas as raízes da equação devem exceder a unidade. Um modelo AR (p) com uma raiz igual à unidade - uma unidade raiz - não é estacionário. Os passeios aleatórios são processos AR (1) com raízes unitárias e, portanto, também não são estacionários.


Assim, para detectar se uma série temporal é estacionária ou não, podemos construir um teste de hipóteses estatísticas para a presença de uma unidade de raiz em uma série de séries temporais.


Vamos considerar três testes separados para as raízes das unidades: Augmented Dickey-Fuller (AFD), Phillips-Perron e Phillips-Ouliaris. Veremos que eles são baseados em suposições diferentes, mas todos estão testando o mesmo problema, a saber, a estacionaria da amostra da série de tempo testada.


Vamos agora dar uma breve olhada nos três testes por sua vez.


Teste Dickey-Fuller aumentado.


Dickey e Fuller [2] foram responsáveis ​​por apresentar o seguinte teste para a presença de uma unidade de raiz. O teste original considera uma série temporal $ z_t = \ alpha z_ + w_t $, em que $ w_t $ é ruído branco discreto. A hipótese nula é que $ \ alpha = 1 $, enquanto a hipótese alternativa é que $ \ alpha & lt; 1 $.


Disse e Dickey [6] melhoraram o teste Dickey-Fuller original levando ao teste Augmented Dickey-Fuller (ADF), no qual a série $ z_t $ é modificada para um modelo AR (p) de um modelo AR (1). Eu discuti o teste em um artigo anterior onde usamos o Python para calculá-lo. Neste artigo, realizaremos o mesmo teste usando R.


Teste Phillips-Perron.


O teste ADF assume um modelo AR (p) como uma aproximação para o exemplo da série temporal e usa isso para contabilizar as autocorrelações de ordem superior. O teste Phillips-Perron [5] não assume uma aproximação do modelo AR (p). Em vez disso, um método de suavização de kernel não paramétrico é utilizado no processo estacionário $ w_t $, o que permite que ele contabilize autocorrelação não especificada e heterocedasticidade.


Teste de Phillips-Ouliaris.


O teste Phillips-Ouliaris [4] é diferente dos dois testes anteriores, na medida em que está testando a evidência de cointegração entre os resíduos entre duas séries temporais. A principal idéia aqui é que testes como ADF, quando aplicados aos resíduos estimados de cointegração, não possuem as distribuições Dickey-Fuller sob a hipótese nula onde a cointegração não está presente. Em vez disso, essas distribuições são conhecidas como distribuições de Phillips-Ouliaris e, portanto, esse teste é mais apropriado.


Dificuldades com testes de raiz unitária.


Enquanto o teste ADF e Phillips-Perron são equivalentes assintóticamente, eles podem produzir respostas muito diferentes em amostras finitas [7]. Isso ocorre porque eles lidam com autocorrelação e heterocedasticidade de forma diferente. É necessário ter muito claro quais hipóteses estão sendo testadas para a aplicação desses testes e não para simplesmente aplicá-los cegamente a séries arbitrárias.


Além disso, os testes de raiz unitária não são excelentes para distinguir processos estacionários altamente persistentes de processos não estacionários. É preciso ter muito cuidado ao usá-los em determinadas formas de séries temporais financeiras. Isso pode ser especialmente problemático quando a relação subjacente que está sendo modelada (ou seja, a reversão média de dois pares similares), naturalmente, desmorona devido a mudanças de regime ou outras mudanças estruturais nos mercados financeiros.


Simulated Cointegrated Time Series com R.


Vamos agora aplicar os testes de raiz de unidades anteriores a alguns dados simulados que sabemos ser cointegrados. Podemos usar a definição de cointegração para criar artificialmente duas séries temporais não estacionárias que compartilham uma tendência estocástica subjacente, mas com uma combinação linear estacionada.


Nossa primeira tarefa é definir uma caminhada aleatória $ z_t = z_ + w_t $, onde $ w_t $ é ruído branco discreto. Dê uma olhada no artigo anterior sobre ruídos brancos e passeios aleatórios, se você precisar escovar esses conceitos.


Com a caminhada aleatória $ z_t $ vamos criar duas novas séries temporais $ x_t $ e $ y_t $ que ambos compartilham a tendência estocástica subjacente de $ z_t $, embora por diferentes montantes:


\ begin x_t & = & p z_t + w_ \\ y_t & = & q z_t + w_ \ end.


Se nós, então, tomamos uma combinação linear $ a x_t + b y_t $:


\ begin a x_t + b y_t & = & a (p z_t + w_) + b (q z_t + w_) \\ & = & (ap + bq) z_t + a w_ + b w_ \ end.


Vemos que só conseguimos uma série estacionária (que é uma combinação de termos de ruído branco) se $ ap + bq = 0 $. Podemos colocar alguns números para isso, para torná-lo mais concreto. Suponha $ p = 0,3 $ e $ q = 0,6 $. Depois de uma álgebra simples, vemos que se $ a = 2 $ e $ b = -1 $ nós possuímos $ ap + bq = 0 $, levando a uma combinação de séries estacionárias. Daí $ x_t $ e $ y_t $ são cointegrados quando $ a = 2 $ e $ b = -1 $.


Vamos simular isso em R para visualizar a combinação estacionária. Em primeiro lugar, desejamos criar e traçar a série de caminhada aleatória subjacente, $ z_t $:


Realização de uma caminhada aleatória, $ z_t $


Se traçamos o correlograma da série e suas diferenças, podemos ver poucas evidências de autocorrelação:


Correlogramas de $ z_t $ e a série diferida de $ z_t $


Portanto, esta realização de $ z_t $ claramente parece uma caminhada aleatória. O próximo passo é criar $ x_t $ e $ y_t $ a partir de $ z_t $, usando $ p = 0,3 $ e $ q = 0,6 $ e, em seguida, trace ambos:


Lote de $ x_t $ e $ y_t $ series, cada um baseado na caminhada aleatória subjacente $ z_t $


Como você pode ver, ambos parecem semelhantes. Claro que eles serão por definição - eles compartilham a mesma estrutura de caminhada aleatória subjacente de $ z_t $. Vamos agora formar a combinação linear, pentear, usando $ p = 2 $ e $ q = -1 $ e examinar a estrutura de autocorrelação:


Lote de pente - a série de combinações lineares - e seu correlograma.


É claro que o pente de série combinado se parece muito com uma série estacionária. Isto é esperado dada a sua definição.


Vamos tentar aplicar os testes de raiz de três unidades para a série de combinações lineares. Em primeiro lugar, o teste Augmented Dickey-Fuller:


O valor p é pequeno e, portanto, temos evidências para rejeitar a hipótese nula de que a série possui uma unidade de raiz. Agora, tentamos o teste Phillips-Perron:


Mais uma vez, temos um pequeno valor de p e, portanto, temos evidências para rejeitar a hipótese nula de uma unidade de raiz. Finalmente, tentamos o teste Phillips-Ouliaris (note que requer entrada de matriz dos constituintes da série subjacente):


Mais uma vez, vemos um pequeno valor p que indica evidências para rejeitar a hipótese nula. Por isso, é claro que estamos lidando com um par de séries que estão cointegradas.


O que acontece se criarmos uma combinação separada com, digamos $ p = -1 $ e $ q = 2 $?


Parcela de badcomb - a série de combinação linear "incorreta" - e seu correlograma.


Nesse caso, não temos provas suficientes para rejeitar a hipótese nula da presença de uma raiz unitária, conforme determinado pelo valor p do teste Dickey-Fuller aumentado. Isso faz sentido quando escolhemos arbitrariamente a combinação linear de $ a $ e $ b $ ao invés de configurá-los para os valores corretos de $ p = 2 $ e $ b = -1 $ para formar uma série estacionária.


Próximos passos.


Neste artigo, examinamos vários testes de raiz unitária para avaliar se uma combinação linear de séries temporais era estacionária, ou seja, se as duas séries estavam cointegradas.


Em futuros artigos, vamos considerar as implementações completas das estratégias de negociação de reversão média para as ações diárias e os dados dos ETF usando o QSTrader com base nestes testes de cointegração.


Além disso, expandiremos nossa análise para cointegração em mais de dois ativos, levando a estratégias de negociação que aproveitam as carteiras cointegradas.


Referências.


Apenas iniciando o comércio quantitativo?


3 razões para se inscrever na QuantStart List:


1. Quant Trading Lessons.


Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!


2. Todo o conteúdo mais recente.


Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.


Real, dicas de negociação viáveis, sem tonturas.


Gekko Quant - Negociação Quantitativa.


Comércio Quantitativo, Arbitragem Estatística, Aprendizado de Máquinas e Opções Binárias.


Pós-navegação.


Arbitragem estatística & # 8211; Negociando um par cointegrado.


Na minha última publicação gekkoquant / 2012/12/17 / statistics-arbitrage-testing-for-cointegration-augmented-dicky-fuller / Eu demonstrou cointegração, um teste matemático para identificar pares estacionários onde a propagação por definição deve ser reversa média.


Nesta publicação, pretendo mostrar como negociar um par cointegrado e continuarei a analisar as ações Royal Dutch Shell A vs B (sabemos que eles estão cointegrados da minha última publicação). Negociar um par cointegrado é direto, sabemos a média e variância da propagação, sabemos que esses valores são constantes. O ponto de entrada para uma stat arb é simplesmente procurar um grande desvio para longe da média.


Uma estratégia básica é:


Se spread (t) & gt; = Diferença média + 2 * Desvio padrão, então vá curto Se propagação (t) & lt; = Distribuição média & # 8211; 2 * Desvio padrão, então vá Long.


Se spread (t) & gt; = nDay Moving Average + 2 * nDay Rolling Desvio padrão, então vá Curto Se spread (t) & lt; = nDay Moving Average & # 8211; 2 * nDay Rolling Desvio padrão, então vá longo.


Se spread (t) & lt; = spread médio + 2 * std AND spread (t-1) & gt; Distribuição média + 2 * Std Se propagação (t) & gt; = Distribuição média & # 8211; 2 * Std AND spread (t-1) & lt; Mean Spread & # 8211; 2 * Std Advantage é que só trocamos quando vemos a reversão média, onde, como os outros modelos esperam a reversão média em um grande desvio da média (a propagação é explodida?)


Esta publicação analisará a média móvel eo modelo de desvio padrão de rolamento para as ações Royal Dutch Shell A vs B, usará a relação de cobertura encontrada na última publicação.


Sharpe Ratio Shell A & amp; B Stat Arb Shell A.


Annualized Sharpe Ratio (Rf=0%):


Shell A&B Stat Arb 0.8224211.


Shell A 0.166307.


The stat arb has a Superior Sharpe ratio over simply investing in Shell A. At a first glance the sharpe ratio of 0.8 looks disappointing, however since the strategy spends most of it’s time out of the market it will have a low annualized sharpe ratio. To increase the sharpe ratio one can look at trading higher frequencies or have a portfolio pairs so that more time is spent in the market.


22 thoughts on “ Statistical Arbitrage – Trading a cointegrated pair ”


it also means that when identified the maximum divergence i can take position in derivatives like options?


-selling ATM Call option on first stock.


-buy Call option on the second one.


or with a BacKSpreadCall on the first and a BackSpreadPut on the second so I can set the protections and I can roll them if they go out control…


The short positions should be moneyness ATM or lightly OTM in my opinion.


What do yo think about?


Did you tried using Johansen’s testing approach in order to perform a more rigorous testing of cointegration? What do you think about combining Engle-Granger with Johansen?


The spread in the above does not oscillate around it mean, ideally, a cointegrated pair should trade sideways not in a trending manner as shown above….your write-up was perfect on proper cointegration you demonstrated. but this spread is not a perfect spread.


I 100% agree with you.


However for practical purposes as long as the mean reversion happens faster than the mean changes then you’ll do well.


I guess that’s something I’ve missed, how to quantify the half life/reversion speed.


Please note that in the above demo the look back period is 90days. This is fairly short. Choosing 200 days will result in a mean that is less responsive / changes direction. It will most likely increase the size of the standard deviation bands and result in less trades per year. This usually results in a lower Sharpe ratio.


Very interesting post. Would love to see the implementation on a basket of pairs.


I do some changes in your programme to calculate the bollinger bands and I wanna know why you’re put the Standard deviation to the right? (movingStd = rollapply(spread, lookback, sd, align=”right”, na. pad=TRUE))


OK thank you for answering!


Your blog give me the chance to implement and build more quickly my stat arb strategy.


I am going to test different models for statistical arbitrage. I keep all the visitors in the loop!


In your program, the martingale effect is not here. How can I add this effect?


I am running my iwn backtests with differents programs (Excel, R et ProRealTime (a french platform)) and in order to do some comparison, I need to add the martingale effect.


Thanks for the clarification. By the same argument, rollmean has to have the same: rollmean(spread, lookback, na. pad=TRUE, align=’right’)


With this new modification the Sharpe ratio drops dramatically ..


Great stuff!! I think there are two bugs in your code, though. First one is in calculation of moving average. You forgot to set align parameter to “right” (like you do for standard deviation). Function uses default “center” and your data – spread and moving average are not aligned. You can see this from the plot as well. Moving average ends 45 days before the spread. Second bug is in calculation of trading returns. I think you should take return from the next day as we enter the position at the closing price.


Thanks for your elegant code. I noticed that your line of code:


is meant to apply the function shortPositionFunc to (-1*aboveUpperBand+belowMAvg).


However, the function shortPositionFunc takes two arguments x and y.


Is there any typo in the code?


Thank you for your clarification!


Thanks Gekko for the backtesting code. It is very useful. Couple of comments below:


1) Another reader has already commented about this above. movingAvg needs to be amended by adding align=”right” in order to have the first moving avg number on day 90:


movingAvg = rollmean(spread, lookback, align=”right”, na. pad=TRUE)


2) since we enter trades at end of day, the return on trade date shouldn’t count. we can simply shift every element in the “positions” vector down by using the “shift” function in the taRifx library.


Also, I don’t believe daily return is (aRet – stockPair$hedgeRatio*bRet). Imagine if you had a large hedge ratio, i. e. if stock A is priced at $100 and stock B is priced at $10, then the hedgeRatio would be in the neighborhood of 10. Since aRet and bRet are in % terms, the formula won’t work. Daily return should be aRet – bRet * (ratio between dollar neutral ratio vs hedge ratio).


#Calculate spread daily ret.


dailyRet <- aRet – bRet*hedgeRatioOVERdollarNeutralRatio.


tradingRet <- dailyRet * shift(positions,-1)


I am looking for new strategies in equity pair trading that improve the standard cointegration approach (for instance I started looking into the pair trading with copulas, which still seems an “unstable” alternative to cointegration). Do you have any new paper to suggest me? Thank you very much and congrats for the great blog.


The second half of the book goes through lots of more advanced techniques for hedging a portfolio / finding stationary pairs.


i am a bit confused in this step.


when i plotted the longPositions and ShortPositions along with the spread, bands and moving average lines found then there are consecutive long signals and short signals. According to my understanding.


longPostions <- if spread is below lowerband.


longExit <- if spread is above movAvg while long.


shortPostions <- if spread is above upperband.


shortExit <- if spread is below movAvg while short.


is this same thing your code is doing. Please help me understand this part.


Hi Gekko, I read the books of EP Chan that talks about this topic and I a little bit confused about mean reservion. When two assets ara cointegrated we are supposing that they will come back to their mean, but their moving average or their total mean in a fixed period? I’m giving better results using static parameters than using bollinger bands. I will show you an image with my doubt. prntscr/51jofw Could you write another article of mean reversion! Thanks for all.


Hi Gekko. Great Code. Could you closer explain an idea behind this cappedCumSum function ? I do not understand the moment when you are specifing two input variables, but in Reduce() function is only one parameter, – is it because of 0?


There is a mistake. Your algorithm looks in the future, the problem in rollmean function. Algorithm using moving average from future days to close position.


Forex Mecânico.


Negociação no mercado FX usando estratégias mecânicas de negociação.


Cointegration in the Forex market.


From the many different types of statistical arbitrage available, pairs trading is perhaps one of the most popular. In pairs trading a trader will attempt to exploit the linear relationship between the values of two instruments, attempting to buy/sell them when the relationship between their values increases/decreases to values that offer enough profit potential. However pairs trading does not only require a linear correlation to exist but it also requires the instruments to be cointegrated, a fundamental property that ensures a fundamental connection between the instruments that diminishes the probability of the spread between both instruments “blowing up” (widening far beyond what is statistically expected). Although pairs trading is usually described in stocks/commodities, we rarely see any study of cointegration in the FX market. Today we’re going to look at some potential cointegrations in the FX market, why they exist and how they might be exploited.


Let us begin by defining what we mean by cointegration. Two series are cointegrated when they share a common stochastic drift. The typical example to explain cointegration talks about a man who goes to a bar with his dog. After getting drunk and leaving the bar both the man and the dog walk the same path home, although their stochastic drift – which is the random way in which the man walks and the dog wonders along the way – are different. When this happens their paths are in fact correlated but they are not cointegrated. If the man instead decides to put a leash on the dog their paths become cointegrated because they now share a common stochastic drift that is determined by the length of the leash. The man and the dog cannot be separated further than their leash allows, which makes any random movements they make beyond a certain length common to both (as they would pull on each other). In statistics we can evaluate for cointegration using several different tests from which theВ Augmented Dickey-Fuller (ADF) test is most popularly used. Note that this test evaluates only stationarity – not exactly cointegration – so another test such as a Johansen test is necessary to confirm cointegration.


When looking at classic examples of cointegration in financial time series you’ll notice that instruments that are cointegrated generally have some strong fundamental reasons to be cointegrated. The “leash” is a fundamental relationship between both instruments, their common stochastic drift. This relationship is usually very strong, for example two oil producing companies that share refineries in broadly the same countries and have the same clients, they are so tightly put together that it is very improbable for any random event to affect one without affecting the other. This is what makes deviations so tantalizing to exploit. В In Forex however, the story is a bit different because countries have a very hard time being so fundamentally similar.


You can actually see this easily when you look at the last year of data for several FX pairs that we usually view as correlated. For example the EUR/USD and GBP/USD traditionally have a large correlation. A normalized plot showing the last year of data shows you that both pairs indeed tend to move in the same direction but it is clear that this relationship does not follow the same stochastic drift. An ADF test using the last year of data for these two pairs will give you a value of 0.28 which is simply far too large to reject the null hypothesis. Looking at other similar pairs reveals very similar results, pairs like AUDUSD|NZDUSD – which are even more correlated than the EURUSD|GBPUSD turn out to also not be cointegrated.


So are there any cointegrations in the FX market? Actually the answer is yes. The Swiss National Bank’s decision to create a floor on the EURCHF at 1.20 generated a “leash” that made several pairs share a stochastic drift. For example the EURUSD and the CHFUSD are now cointegrated due to this fact. An ADF test will give you a value less than 0.01 for this pair, suggesting that they are indeed cointegrated (confirmed by the Johansen test as well). All similar CHF containing pairs also show cointegrations, such as the EURJPY|CHFJPY and the EURAUD|AUDCHF. This cointegrations all arise from the EURCHF peg, something which is evident when you look at the spread value as a function of time between any of these pairs. The third image shows you the spread of the EURUSD|CHFUSD pair as a function of time, it is no surprise that this is the exact same graph as the EURCHF for the past year. As the length of the “leash” varies, so does the value of the spread on the cointegrated pairs.


Could we take advantage of these cointegrations? Well, you certainly can. There are several ways in which cointegration can be traded but with a varying “leash” a good way is probably to trade the bollinger bands around the spread. You can trade on any timeframes but even when trading the daily timeframe you can make some money. The fourth image shows a very simple simulation in R where I traded the 3 pairs mentioned above, using 1:10 leverage, on a 10 period moving average using 1 standard deviation for band distances. The simulations show a 25% profit with a 10% drawdown within the past year, not too great but not too bad either. It is possible that further refinements and entries/exits on lower timeframes can indeed increase these margins.


One important thing to remember here is that the leash is a peg from a central bank. If this peg for some reason stops existing it is possible that this cointegration will simply vanish. It is therefore advisable to keep an eye on fundamental developments and stop trading the cointegration if this arises. It is also important to constantly repeat the statistical tests for cointegration as new data comes in so that you can stop trading any of these pairs as soon as the cointegration does show to break. If you would like to learn more about FX trading and how you too can design your own trading strategiesВ please consider joiningВ Asirikuy, a website filled with educational videos, trading systems, development and a sound, honest and transparent approach towards automated trading in general . Espero que tenha gostado deste artigo ! : o)


6 Responses to “Cointegration in the Forex market”


& # 8221; In statistics we can evaluate for cointegration using three different tests from which the Augmented Dickey-Fuller (ADF) test is the most popular.”


Yo, this is a stationarity check. it does not imply cointegration.


This is true, however when the result of this test is positive for financial series they are always cointegrated, this is why it is so popularly used for this purpose I believe. You can however perform a Johansen test as well or a Engle–Granger two step test. In the examples used on this article all series that pass the ADF test also pass the Johansen test, showing they are cointegrated.


i will be more than happy if you could share your r code in order to learn how to do this process.


Spread trading on EURUSD|CHFUSD sounds equivalent to trading EURCHF itself, which, as is actually directly possible at most brokers, should be preferred (pay only half the spread/commission costs). An EURUSD|CHFUSD spread is in fact a synthetic instrument for EURCHF.


So how is this spread trading any different (for the better)?


Thanks for commenting :o) You’re clearly right, it’s the same as trading a bollinger band strategy on the EUR/CHF. As mentioned on the article the spread is actually the same chart as the EUR/CHF. The cointegration of the EURUSD|CHFUSD is actually reflected as a tendency to return to the mean on the EUR/CHF. If you were going to trade this in practice you would indeed use the EUR/CHF to save trading costs instead of buying/selling EURUSD and USDCHF.


Great article overall but confusing in some places. As one comment’or has pointed out, ADF test is a unit root test. It is a formal test used to establish whether a price series is stationary or not. If you get a P value of more than 1%, 5% or 10% you can only fail to reject the null of unit root based on the significance level you are comfortable with. This does not infer the presence of co-integration.


The power of the ADF is also documented to be low so most researchers now go ahead to cross check with a complementary test such as KPSS.


It will be interesting to see the R code so we can also run it and see the results. You do mention that the Johansen test confirms the presence of co-integration, so all in all I believe your findings are on solid ground.


Some interesting questions that come up is how stable is the co-integration relationship? How frequently does the long run relationship estimate change and how big are these changes when they do occur.


Overall great article, keep them coming and do share some R code.

Комментариев нет:

Отправить комментарий