Cointegração na Negociação de Pares Forex.
A cointegração na negociação de pares forex é uma ferramenta valiosa. Para mim, a cointegração é a base para uma excelente estratégia de negociação mecânica neutra de mercado que me permite lucrar em qualquer ambiente econômico. Se um mercado está em tendência de alta, tendência de baixa ou simplesmente movendo-se para os lados, a negociação de pares de moedas permite-me 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 baseada em arbitragem estatística e reversão em média. Esse tipo de estratégia foi popularizado pela primeira vez por uma equipe de negociação quantitativa no Morgan Stanley nos anos 80, usando pares de ações, embora eu e outros traders descobrimos que também funciona muito bem para a negociação de pares forex também.
Pares de Forex negociados com base na cointegração.
A negociação de pares Forex baseada na cointegração é essencialmente uma estratégia de reversão à média. Simplesmente, quando dois ou mais pares de moedas são cointegrados, isso significa que o preço spread entre os diferentes pares de moedas tende a reverter ao seu valor médio de forma consistente ao longo do tempo.
É importante entender que a cointegração não é correlação. Correlação é uma relação de curto prazo em relação a co-movimentos de preços. Correlação significa que os preços individuais se movem juntos. Embora a correlação seja invocada por alguns traders, por si só é uma ferramenta indigna de confiança.
Por outro lado, a cointegração é uma relação de longo prazo com co-movimentos de preços, na qual os preços se movem juntos ainda dentro de certas faixas ou spreads, como se estivessem unidos. Eu acho que a cointegração é uma ferramenta muito útil na negociação de pares forex.
Durante minha negociação de pares forex, quando o spread aumenta para um valor de limite calculado pelos meus algoritmos de negociação mecânicos, “curto” o spread entre os preços dos pares. Em outras palavras, estou apostando que o spread voltará a zero devido à sua cointegração.
Estratégias básicas de negociação de pares de forex são muito simples, especialmente ao usar sistemas de negociação mecânicos: eu escolho dois pares de moedas diferentes que tendem a se mover de forma semelhante. Eu compro o par de moedas com baixo desempenho e vendo o par de desempenho superior. Quando o spread entre os dois pares converge, fecho minha posição para obter lucro.
A negociação de pares de Forex baseada na cointegração é uma estratégia bastante neutra de mercado. Por exemplo, se um par de moedas cair, então o negócio provavelmente resultará em uma perda no lado longo e um ganho de compensação no lado mais 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 possível.
Da mesma forma, a negociação de pares em muitos mercados é uma estratégia de negociação de autofinanciamento, uma vez que as receitas de vendas a descoberto podem às vezes ser usadas para abrir a posição comprada. Mesmo sem esse benefício, a negociação de pares forex alimentada pela cointegração ainda funciona muito bem.
Compreender a cointegração para negociação de pares forex.
A cointegração é útil para mim na negociação de pares forex porque me permite programar meu sistema de negociação mecânico com base tanto em desvios de curto prazo dos preços de equilíbrio quanto nas expectativas de preço de longo prazo, o que significa correções e retorno ao equilíbrio.
Para entender como funciona a negociação de pares de moedas orientada pela cointegração, é importante primeiro definir a cointegração e descrever como ela funciona nos sistemas de negociação mecânicos.
Como eu disse acima, a cointegração refere-se à relação de equilíbrio entre conjuntos de séries temporais, como preços de pares de moedas separados que por si só não estão em equilíbrio. Declarada em 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, cada uma, um valor de raiz igual a 1, mas sua combinação linear é estacionária, então elas são cointegradas.
Como um exemplo simples, considere os preços de um índice de bolsa e seu contrato futuro relacionado: Embora os preços de cada um desses instrumentos possam vagar aleatoriamente durante 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 "passeio aleatório": digamos que há dois bêbados individuais caminhando para casa depois de uma noite de festejos. Vamos supor ainda que esses dois bêbados não se conhecem, então não há 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 indivíduo bêbado está vagando para casa, acompanhado de seu cão na coleira. Neste caso, há uma conexão definitiva entre os caminhos dessas duas pobres criaturas.
Embora cada um dos dois ainda esteja em um caminho individual durante um curto período de tempo, e mesmo que um dos pares possa conduzir ou atrasar o outro aleatoriamente em um dado momento, eles sempre serão encontrados juntos. A distância entre eles é bastante previsível, portanto, o par é dito ser cointegrado.
Retornando agora a termos técnicos, se houver duas séries temporais não estacionárias, como um conjunto hipotético de pares de moedas AB e XY, que se tornam estacionárias quando a diferença entre elas é calculada, esses pares são chamados de uma série integrada de primeira ordem - também chame 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 que é estacionária (descrita como I (0)), então AB e XY são cointegrados.
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 várias séries temporais, usando ordens de integração superiores ... Pense em termos de um bêbado errante acompanhado por vários cães, cada um com uma coleira de comprimento diferente.
Na economia do mundo real, é fácil encontrar exemplos mostrando a cointegração de pares: renda e gastos, ou rigor das leis criminais e tamanho da população carcerária. Na negociação de pares forex, meu foco é capitalizar a relação quantitativa e previsível entre pares de moedas cointegradas.
Por exemplo, suponhamos que estamos assistindo a esses dois pares de moedas hipotéticos cointegrados, AB e XY, e o relacionamento cointegrado entre eles é AB & # 8211; XY = Z, onde Z é igual a uma série estacionária com uma média de zero, ou seja, I (0).
Isso parece sugerir uma estratégia de negociação simples: quando AB - XY & gt; V, e V é meu preço de gatilho de limiar, então o sistema de negociação de pares de forex venderia AB e compraria XY, desde que a expectativa seria para AB diminuir de preço e XY para aumentar. Ou, quando AB - XY & lt; - V, eu esperaria comprar AB e vender XY.
Evite a regressão falsa na negociação de pares forex.
No entanto, não é tão simples quanto o exemplo acima sugeriria. Na prática, um sistema de negociação mecânico para negociação de pares forex precisa calcular a cointegração em vez de confiar apenas no valor de R-quadrado entre AB e XY.
Isso porque a análise de regressão ordinária fica aquém quando se lida com variáveis não estacionárias. Isso causa a chamada regressão espúria, que sugere relações entre variáveis mesmo quando não há nenhuma.
Suponha, por exemplo, que eu regride 2 séries temporais separadas de "caminhada aleatória" uma contra a outra. Quando eu testo para ver se há um relacionamento linear, muitas vezes eu vou encontrar valores altos para o R-quadrado, bem como valores de p baixos. Ainda assim, não há relação entre esses dois passeios aleatórios.
Fórmulas e testes para cointegração em negociação de pares forex.
O teste mais simples de cointegração é o teste Engle-Granger, que funciona assim:
Verifique se AB t e XY t são 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 et são estacionários usando um teste de raiz unitária como o Teste aumentado de Dickey-Fuller (ADF).
Uma equação detalhada de Granger:
Eu (0) descreve a relação de cointegração.
XY t-1 - βAB t-1 descreve a extensão do desequilíbrio a partir do longo prazo, enquanto αi é a velocidade e 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 de negociação 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 de negociação para os pares.
Correção de erros para cointegração em negociação de pares forex:
Ao usar a cointegração para negociação de pares forex, 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 autorregressivamente:
Pares de Forex negociados com base na cointegração.
Quando eu uso meu sistema de negociação mecânica para negociação de pares forex, a configuração e execução são bastante simples. Primeiro, encontro dois pares de moedas que parecem estar cointegrados, como EUR / USD e GBP / USD.
Então, eu calculo os spreads estimados entre os dois pares. Em seguida, verifico a estacionariedade usando um teste de raiz unitária ou outro método comum.
Garanto que meu feed de dados de entrada está funcionando adequadamente e deixo meus algoritmos de negociação mecânicos criarem os sinais de negociação. Supondo que eu executei back-tests adequados para confirmar os parâmetros, estou finalmente pronto para usar a cointegração na minha negociação de pares forex.
Eu encontrei um indicador MetaTrader que oferece um excelente ponto de partida para construir um sistema de negociação de pares de forex em cointegração. Parece um indicador de Bollinger Band, mas na verdade o oscilador mostra o diferencial de preço 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 do sucesso, confio no meu bem construído sistema de negociação mecânica para filtrar os sinais com o teste Augmented Dickey-Fuller antes de executar os negócios apropriados.
É claro que qualquer pessoa que queira usar a cointegração para sua negociação de pares forex, ainda que não tenha as habilidades necessárias de programação de algoritmos, pode confiar em um programador experiente para criar um conselheiro especialista vencedor.
Através da mágica da negociação algorítmica, eu programo meu sistema de negociação mecânica para definir os spreads de preço com base na análise de dados. Meu algoritmo monitora os desvios de preço e, em seguida, compra e vende automaticamente pares de moedas para poder inutilizar as ineficiências do mercado.
Riscos a ter em conta ao usar a cointegração com a negociação de pares forex.
A negociação de pares de Forex não é totalmente isenta de risco. Acima de tudo, lembro-me de que a negociação de pares forex usando 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 dos relacionamentos cointegrados para a negociação de pares forex, isso não significa que os spreads continuarão a ser cointegrados no futuro.
Confio em regras de gerenciamento de risco fortes, o que significa que meu sistema de negociação mecânica sai de negociações não lucrativas se ou quando a reversão à média calculada for invalidada.
Quando os valores médios mudam, é chamado de desvio. Eu tento detectar o desvio o mais rápido possível. Em outras palavras, se os preços dos pares de moeda coexegidos anteriormente começarem a se mover em uma tendência em vez de reverter para a média calculada anteriormente, é hora de os algoritmos do meu sistema de negociação mecânico recalcularem os valores.
Quando uso meu sistema de negociação mecânica para negociação de pares forex, uso a fórmula autoregressiva 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.
A cointegração é uma ferramenta valiosa para minha negociação de pares forex.
Usar a cointegração na negociação de pares forex é uma estratégia de negociação mecânica neutra de mercado que me permite negociar em qualquer ambiente de mercado. É uma estratégia inteligente baseada na reversão, mas ajuda-me a evitar as armadilhas de algumas das outras estratégias de negociação forex de reversão à média.
Devido ao seu uso potencial em sistemas de negociação mecânicos lucrativos, a cointegração para negociação de pares forex tem atraído o interesse tanto de traders profissionais quanto de pesquisadores acadêmicos.
Há uma abundância de artigos publicados recentemente, como este artigo de blog com foco em quant, ou esta discussão acadêmica sobre o assunto, bem como muita discussão entre os traders.
A cointegração é uma ferramenta valiosa na minha negociação de pares forex, e eu recomendo fortemente que você analise por si mesmo.
Gekko Quant - Negociação Quantitativa.
Negociação Quantitativa, Arbitragem Estatística, Aprendizado de Máquina e Opções Binárias.
Pós-navegação.
Arbitragem Estatística & # 8211; Negociando um par cointegrado.
No meu último post gekkoquant / 2012/12/17 / estatística-arbitragem-testing-for-cointegration-augmented-dicky-fuller / demonstrei cointegração, um teste matemático para identificar pares estacionários onde o spread por definição deve ser revertido à média.
Neste post, pretendo mostrar como negociar um par cointegrado e continuar analisando as ações Royal Dutch Shell A vs B (sabemos que elas estão cointegradas em meu último post). Negociar um par cointegrado é direto, sabemos a média e a variância do spread, sabemos que esses valores são constantes. O ponto de entrada para um stat arb é simplesmente procurar por um grande desvio fora da média.
Uma estratégia básica é:
Se spread (t) & gt; = Spread Médio + 2 * Desvio Padrão, então, Curto Se spread (t) & lt; = Spread Médio & # 8211; 2 * Desvio Padrão e depois Longo.
Se spread (t) & gt; = nDia Média Móvel + 2 * nDay Rolling Desvio padrão, em seguida, será Short If spread (t) & lt; = nDay Moving Average & # 8211; 2 * nDay Rolling O desvio padrão, em seguida, é longo.
Se espalhado (t) & lt; = Spread Médio + 2 * Degradado E espalhado (t-1) & gt; Spread Médio + 2 * Std Se spread (t) & gt; = Spread Médio & # 8211; 2 * Std AND spread (t-1) & lt; Spread Médio & # 8211; 2 * Std Advantage é que só trocamos quando vemos a reversão à média, enquanto os outros modelos esperam uma reversão à média em um grande desvio da média (o spread está explodindo?)
Este post irá olhar para o modelo de média móvel e desvios padrão rolantes para as ações Royal Dutch Shell A vs B, ele usará a taxa de hedge encontrada no último post.
Sharpe Ratio Shell A & amp; B Stat Arb Shell A.
Índice de Sharpe Anualizado (Rf = 0%):
Shell A e B Stat Arb 0,8224211.
Shell A 0,166307.
O stat arb tem um índice Sharpe Superior ao invés de simplesmente investir na Shell A. À primeira vista, o índice de sharpe de 0,8 parece decepcionante, mas como a estratégia passa a maior parte do tempo fora do mercado, ele terá uma taxa anualizada baixa. proporção de sharpe. Para aumentar o índice de sharpe, pode-se procurar negociar em freqüências mais altas ou ter um portfólio de pares para que mais tempo seja gasto no mercado.
22 pensamentos sobre & ldquo; Arbitragem Estatística & # 8211; Negociando um par cointegrado & rdquo;
isso também significa que quando identificada a divergência máxima eu posso tomar posição em derivativos como opções?
- Opção de compra de multibanco no primeiro estoque.
-Compre opção de compra no segundo.
ou com um BacKSpreadCall no primeiro e um BackSpreadPut no segundo para que eu possa definir as proteções e eu posso rolá-las se elas saírem do controle & # 8230;
As posições curtas devem ser moneyness ATM ou levemente OTM na minha opinião.
O que você pensa sobre?
Você tentou usar a abordagem de teste de Johansen para realizar testes mais rigorosos de cointegração? O que você acha de combinar o Engle-Granger com o Johansen?
O spread acima não oscila em torno dele significa, idealmente, que um par cointegrado não deve ser negociado de forma lateral, como mostrado acima, e seu artigo foi perfeito para a cointegração adequada que você demonstrou. mas esse spread não é um spread perfeito.
Eu 100% concordo com você.
No entanto, para fins práticos, desde que a reversão à média aconteça mais rapidamente do que a média, então você vai bem.
Eu acho que algo que eu perdi, como quantificar a meia vida / velocidade de reversão.
Por favor, note que na demonstração acima, o período de retorno é de 90 dias. Isso é razoavelmente curto. A escolha de 200 dias resultará em uma média menos responsiva / muda de direção. Isso provavelmente aumentará o tamanho das bandas de desvio padrão e resultará em menos negócios por ano. Isso geralmente resulta em um menor índice de Sharpe.
Post muito interessante. Adoraria ver a implementação em uma cesta de pares.
Eu faço algumas alterações no seu programa para calcular as bandas de bollinger e eu quero saber por que você colocou o desvio padrão para a direita? (movingStd = rollapply (spread, lookback, sd, alinhamento = & # 8221; direita & # 8221 ;, na. pad = TRUE))
OK obrigado por responder!
Seu blog me dá a chance de implementar e construir mais rapidamente a minha estratégia stat arb.
Vou testar modelos diferentes para arbitragem estatística. Eu mantenho todos os visitantes no circuito!
Em seu programa, o efeito martingale não está aqui. Como posso adicionar esse efeito?
Estou executando meus próprios backtests com programas diferentes (Excel, R e ProRealTime (uma plataforma francesa)) e para fazer alguma comparação, eu preciso adicionar o efeito martingale.
Obrigado pelo esclarecimento. Pelo mesmo argumento, rollmean tem que ter o mesmo: rollmean (spread, lookback, na. pad = TRUE, align = ’right’)
Com esta nova modificação, a taxa de Sharpe cai drasticamente.
Coisas boas!! Eu acho que existem dois erros no seu código, no entanto. A primeira é no cálculo da média móvel. Você esqueceu de definir o parâmetro align para & # 8220; right & # 8221; (como você faz para o desvio padrão). Função usa default & # 8220; center & # 8221; e seus dados & # 8211; spread e média móvel não estão alinhados. Você pode ver isso da trama também. A média móvel termina 45 dias antes do spread. Segundo bug está no cálculo dos retornos de negociação. Eu acho que você deve ter o retorno do dia seguinte quando entramos na posição no preço de fechamento.
Obrigado pelo seu código elegante. Eu notei que sua linha de código:
destina-se a aplicar a função shortPositionFunc para (-1 * aboveUpperBand + belowMAvg).
No entanto, a função shortPositionFunc aceita dois argumentos x e y.
Existe algum erro no código?
Obrigado pelo seu esclarecimento!
Obrigado Gekko pelo código de backtesting. É muito útil. Alguns comentários abaixo:
1) Outro leitor já comentou sobre isso acima. O movingAvg precisa ser corrigido adicionando-se align = "right" para se ter o primeiro número médio móvel no dia 90:
movingAvg = rollmean (spread, lookback, align = ”right”, na. pad = TRUE)
2) como entramos no final do dia, o retorno da data de negociação não deve ser contabilizado. podemos simplesmente deslocar cada elemento no vetor de “posições” usando a função “shift” na biblioteca taRifx.
Além disso, não acredito que o retorno diário seja (aRet - stockPair $ hedgeRatio * bRet). Imagine se você tivesse uma grande taxa de hedge, ou seja, se a ação A precificasse US $ 100 e a ação B tivesse US $ 10, então a hedgeRatio estaria na casa dos 10. Como aet e bRet estão em%, a fórmula não trabalhos. O retorno diário deve ser aRet-bRet * (razão entre o índice neutro do dólar versus o índice de hedge).
#Calculate spread diário ret.
dailyRet & lt; - aRet - bRet * hedgeRatioOVERdollarNeutralRatio.
tradingRet & lt; - dailyRet * shift (posições, -1)
Eu estou procurando novas estratégias na negociação de pares de ações que melhorem a abordagem de cointegração padrão (por exemplo, comecei a investigar o par de negociação com copulas, que ainda parece uma alternativa instável à cointegração). Você tem algum papel novo para me sugerir? Muito obrigado e parabéns pelo ótimo blog.
A segunda metade do livro passa por várias técnicas mais avançadas para proteger um portfólio / encontrar pares estacionários.
Estou um pouco confuso nesta etapa.
Quando eu plotei o longoPositions e ShortPositions junto com o spread, bandas e linhas médias móveis encontrados, então há sinais longos consecutivos e sinais curtos. De acordo com o meu entendimento
longPostions & lt; - se o spread estiver abaixo da banda inferior.
longExit & lt; - se o spread estiver acima de movAvg durante o tempo
shortPostions & lt; - se o spread estiver acima da banda superior.
shortExit & lt; - se o spread estiver abaixo de movAvg enquanto curto.
é a mesma coisa que seu código está fazendo. Por favor me ajude a entender essa parte.
Oi Gekko, eu li os livros do EP Chan que fala sobre esse assunto e eu estou um pouco confuso sobre a reserva média. Quando dois ativos são cointegrados, estamos supondo que eles retornarão à sua média, mas a média móvel ou a média total deles em um período fixo? Eu estou dando melhores resultados usando parâmetros estáticos do que usando bandas de bollinger. Eu vou te mostrar uma imagem com a minha dúvida. prntscr / 51jofw Poderia escrever outro artigo de reversão à média! Obrigado por todos.
Oi Gekko Ótimo Código. Você poderia explicar mais de perto uma ideia por trás dessa função cappedCumSum? Eu não entendo o momento em que você está especificando duas variáveis de entrada, mas na função Reduce () é apenas um parâmetro, & # 8211; é por causa de 0?
Há um erro. Seu algoritmo parece, no futuro, o problema na função rollmean. Algoritmo usando a média móvel dos dias futuros para fechar a posição.
Veja também documentação, vídeos e chat.
Jing é um desenvolvedor quantitativo na QuantConnect. Ela tem um mestrado em Matemática Financeira da John Hopkins e trabalhou anteriormente na Northeast Securities fazendo pesquisas quantitativas.
Artigos recentes.
Pairs Trading & # 8211; Cópula vs Cointegração.
Em Tutoriais De Estratégia, Publicado em 13 de junho de 2017.
Investigamos dois métodos de negociação de pares e comparamos os resultados. O comércio de pares envolve investigar a estrutura de dependência entre dois ativos altamente correlacionados. Com a suposição de que ocorrerá reversão à média, posições longas ou curtas são inseridas na direção oposta quando há uma divergência de preços. Tipicamente, a distribuição do preço do ativo é modelada por uma distribuição Gaussiana de séries de retorno, mas a distribuição normal conjunta pode falhar em capturar algumas características-chave da dependência do preço dos pares de ações, como a dependência da cauda. Nós investigamos usando a teoria da cópula para identificar essas oportunidades de negociação.
Neste tutorial, discutiremos a estrutura básica da cópula a partir da perspectiva matemática e explicaremos como aplicar a abordagem em pares de negociação. A implementação do algoritmo baseia-se no papel Trading estratégias com copulas [1] Stander Y, Marais D, Botha I. Estratégias de negociação com cópulas [J]. Revista de Ciências Econômicas e Financeiras, 2013, 6 (1): 83-107. Cópia Online do Stander Y, Marais D, Botha I (2013). Comparamos o desempenho da estratégia de negociação de pares de cópulas com o método de negociação de pares de co-integração baseado no artigo Estratégias de negociação de arbitragem estatística e negociação de alta frequência da Hanson TA, Hall J R. (2012) [2] Hanson TA, Hall J R. Estratégias de negociação de arbitragem estatística e negociação de alta frequência [J]. 2012.. A técnica de cointegração assume uma relação de cointegração entre equidades pareadas para identificar oportunidades de negociação lucrativas. Os resultados empíricos sugerem que a estratégia baseada em cópulas é mais lucrativa do que as técnicas tradicionais de negociação de pares.
Estrutura do Copula.
1. Definição.
Dado um vetor aleatório, suas funções de distribuição cumulativa marginal (CDFs) são. Aplicando a transformada de probabilidade integral a cada componente, as distribuições marginais de são uniformes (da Wikipedia).
Então a cópula de é definida como a função de distribuição cumulativa da junção, para a qual a distribuição marginal de cada variável U é uniforme como.
A função de cópulas contém todas as características de dependência das distribuições marginais e descreverá melhor a relação linear e não linear entre variáveis, usando probabilidade. Eles permitem que as distribuições marginais sejam modeladas independentemente umas das outras, e nenhuma suposição sobre o comportamento conjunto dos marginais é necessária. [3] Rad H, Baixo R K Y, Faff R. A rentabilidade das estratégias de negociação de pares: métodos de distância, cointegração e cópula [J]. Financiamento Quantitativo, 2016, 16 (10): 1541-1558.cópia online.
2. Cópulas Bivariadas.
Uma vez que esta pesquisa se concentra em cópulas bivariadas (para a troca de pares, temos duas variáveis aleatórias), algumas propriedades probabilísticas são especificadas.
Seja X e Y duas variáveis aleatórias com função de probabilidade cumulativa e. que são uniformemente distribuídos. Então a função da cópula é. Tomando a derivada parcial da função cópula sobre U e V daria a função de distribuição condicional da seguinte forma:
3. Cópulas Arquimedianas.
Existem muitas funções de cópula que nos permitem descrever estruturas de dependência entre variáveis, além da hipótese gaussiana. Aqui vamos nos concentrar três destes; as fórmulas Clayton, Gumbel e Frank cópula da classe de Arquimedes.
Cópulas arquimedianas [4] Mahfoud M, Michael M. Cópulas arquimedianas bivariadas: uma aplicação a dois índices do mercado de ações [J]. BMI Paper, 2012. A cópia on-line é baseada nas transformações de Laplace das funções de distribuição univariada. Eles são construídos por uma função geradora particular [5]. Os pares baseados em cópulas de alta frequência são negociados nos US Goldmine Stocks [J]. 2016.
A função de densidade de probabilidade é:
Onde é o inverso da segunda derivada da função geradora.
Análise de Séries Temporais Cointegradas para Negociação de Reversão Média com R.
Análise de Séries Temporais Cointegradas para Negociação de Reversão Média com R.
Há algum tempo, consideramos um modelo de negociação baseado na aplicação dos modelos de séries temporais ARIMA e GARCH aos dados diários do S & amp; P500. Mencionamos nesse artigo, assim como em outros artigos de análise de séries temporais anteriores, que, eventualmente, estaríamos pensando em reverter as estratégias de negociação e como construí-las.
Neste artigo, quero discutir um tópico chamado cointegração, que é um conceito de série temporal que nos permite determinar se somos capazes de formar um par de ativos de reversão à média. Abordaremos a teoria das séries temporais relacionadas à cointegração aqui e no próximo artigo mostraremos como aplicá-la a estratégias reais de negociação usando o novo framework de backtesting open source: QSTrader.
Continuaremos discutindo a reversão da média na tradicional estrutura de "troca de pares". Isso nos levará ao conceito de estacionariedade de uma combinação linear de ativos, levando-nos finalmente a testes de cointegração e raiz unitária. Após delinearmos 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 uma reversão de "troca de pares" significa simultaneamente dois ativos distintos, compartilhando fatores subjacentes que afetam seus movimentos. Um exemplo do mundo das ações pode ser o longo McDonald's (NYSE: MCD) e o curto Burger King (NYSE: BKW - antes da fusão com Tim Horton's).
A justificativa para isso é que os preços das ações de longo prazo provavelmente estarão em equilíbrio devido aos amplos fatores de mercado que afetam a produção e o consumo de hambúrguer. Uma interrupção de curto prazo para um indivíduo no par, como uma interrupção na cadeia de fornecimento que afeta apenas o McDonald's, levaria a um deslocamento temporário em seus preços relativos. Isso significa que uma negociação de curto prazo realizada nesse ponto de interrupção deve se tornar lucrativa, pois as duas ações retornam ao seu valor de equilíbrio assim que a interrupção for resolvida. Esta é a essência do clássico "comércio de pares".
Na medida em que estamos interessados em realizar a reversão da média de negociação, não apenas em um par de ativos, mas também cestas de ativos que são inter-relacionados separadamente.
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 temporais cointegradas.
A idéia é considerar um par de séries temporais não-estacionárias, como os ativos aleatórios de MCD e BKW, e formar uma combinação linear de cada série para produzir uma série estacionária, que tenha uma média e uma variância fixas.
Esta série estacionária pode ter interrupções de curto prazo onde o valor se distancia da média, mas devido à sua estacionariedade, este valor acabará retornando à média. As estratégias de negociação podem fazer uso disso, desejando / abreviando o par no ponto de interrupção apropriado e apostando em uma reversão de longo prazo da série para sua média.
Estratégias de reversão da média, como essa, permitem uma ampla gama de instrumentos para criar as séries temporais estacionárias "sintéticas". Certamente não estamos restritos a ações "baunilhadas". Por exemplo, podemos fazer uso de Exchange Traded Funds (ETF) que acompanham os preços das commodities, como petróleo bruto, e cestas de empresas produtoras de petróleo. Portanto, há muito espaço para identificar esses sistemas de reversão de média.
Antes de nos aprofundarmos na mecânica das estratégias reais de negociação, que será o assunto do próximo artigo, devemos primeiro entender como identificar estatisticamente tais séries cointegradas. Para isso, utilizaremos técnicas de análise de séries temporais, continuando o uso da linguagem estatística R como nos artigos anteriores sobre o tema.
Cointegração
Agora que motivamos a necessidade de uma estrutura quantitativa para realizar negociações de reversão à média, podemos definir o conceito de cointegração. Considere um par de séries temporais, ambas as quais não são estacionárias. Se tomarmos uma combinação linear particular dessas séries, às vezes pode levar a uma série estacionária. Tal par de séries seria então denominado cointegrado.
A definição matemática é dada por:
Cointegração
Seja $ \ $ e $ \ $ duas séries temporais não estacionárias, com constantes $ a, b \ in \ mathbb $. Se a série combinada $ a x_t + b y_t $ é estacionária, então dizemos que $ \ $ e $ \ $ são cointegrados.
Embora a definição seja útil, ela não nos fornece diretamente um mecanismo para determinar os valores de $ a $ e $ b $, nem se essa combinação é estatisticamente estacionária. Para este último, precisamos utilizar testes para raízes unitárias.
Testes de raiz unitária.
Em nossa discussão anterior sobre modelos autorregressivos de AR (p), explicamos o papel da equação característica. Observamos que era simplesmente um modelo autorregressivo, escrito na forma de mudança para trás, definido como igual a zero. Resolver essa equação nos deu um conjunto de raízes.
Para que o modelo fosse considerado estacionário, todas as raízes da equação tinham que exceder a unidade. Um modelo AR (p) com uma raiz igual a unidade - uma raiz unitária - é não estacionário. As caminhadas aleatórias são processos AR (1) com raízes unitárias e, portanto, também não são estacionárias.
Assim, a fim de detectar se uma série temporal é estacionária ou não, podemos construir um teste de hipótese estatística para a presença de uma raiz unitária em uma amostra de séries temporais.
Vamos considerar três testes separados para raízes unitárias: Augmented Dickey-Fuller (AFD), Phillips-Perron e Phillips-Ouliaris. Veremos que eles são baseados em suposições divergentes, mas, no final das contas, estão testando o mesmo problema, ou seja, a estacionariedade da amostra de série temporal testada.
Vamos agora dar uma breve olhada nos três testes por vez.
Teste Dickey-Fuller Aumentado.
Dickey e Fuller [2] foram responsáveis pela introdução do seguinte teste para a presença de uma raiz unitária. O teste original considera uma série temporal $ z_t = \ alpha z_ + w_t $, na qual $ w_t $ é um ruído branco discreto. A hipótese nula é que $ \ alpha = 1 $, enquanto a hipótese alternativa é que $ \ alpha & lt; 1 $.
Said e Dickey [6] melhoraram o teste original de Dickey-Fuller 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 vamos realizar o mesmo teste usando R.
Teste de Phillips-Perron.
O teste ADF assume um modelo AR (p) como uma aproximação para a amostra de série temporal e usa isso para considerar as autocorrelações de ordem mais alta. O teste de Phillips-Perron [5] não assume uma aproximação do modelo AR (p). Ao invés 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 seja responsável pela autocorrelação e heterocedasticidade não especificadas.
Teste de Phillips-Ouliaris.
O teste de Phillips-Ouliaris [4] é diferente dos dois testes anteriores, pois está testando evidências de cointegração entre os resíduos entre duas séries temporais. A idéia principal aqui é que testes como ADF, quando aplicados aos resíduos de cointegração estimados, não têm as distribuições de 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 Phillips-Ouliaris e, portanto, esse teste é mais apropriado.
Dificuldades com testes de raiz unitária.
Enquanto os testes ADF e Phillips-Perron são equivalentes assintoticamente, eles podem produzir respostas muito diferentes em amostras finitas [7]. Isso ocorre porque eles lidam com autocorrelação e heteroscedasticidade de maneira diferente. É necessário ficar bem claro quais hipóteses estão sendo testadas ao aplicar esses testes e não simplesmente aplicá-las cegamente a séries arbitrárias.
Além disso, testes de raiz unitária não são ótimos para distinguir processos estacionários altamente persistentes de processos não estacionários. É preciso ter muito cuidado ao usá-los em certas formas de séries temporais financeiras. Isso pode ser especialmente problemático quando a relação subjacente que está sendo modelada (isto é, reversão à média de dois pares similares) naturalmente se rompe devido a mudanças de regime ou outras mudanças estruturais nos mercados financeiros.
Séries Temporais Cointegradas Simuladas com R.
Vamos agora aplicar os testes de raiz unitária anteriores a alguns dados simulados que sabemos serem 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 que é estacionária.
Nossa primeira tarefa é definir um passeio aleatório $ z_t = z_ + w_t $, onde $ w_t $ é um ruído branco discreto. Dê uma olhada no artigo anterior sobre ruído branco e passeios aleatórios se você precisar revisar esses conceitos.
Com o passeio aleatório $ z_t $, vamos criar duas novas séries temporais $ x_t $ e $ y_t $ que compartilham a tendência estocástica subjacente de $ z_t $, embora por quantidades diferentes:
\ begin x_t & = & p z_t + w_ \\ y_t & = & q z_t + w_ \ end.
Se, então, pegarmos 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_ \ fim.
Vemos que só alcançamos 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 que $ p = 0,3 $ e $ q = 0,6 $. Depois de alguma álgebra simples, vemos que se $ a = 2 $ e $ b = -1 $, temos $ ap + bq = 0 $, levando a uma combinação de séries estacionárias. Portanto, $ 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 plotar a série de caminhada aleatória subjacente, $ z_t $:
Realização de um passeio aleatório, $ z_t $
Se traçarmos o correlograma da série e suas diferenças, podemos ver pouca evidência de autocorrelação:
Correlogramas de $ z_t $ e as séries diferenciadas de $ z_t $
Portanto, essa realização de $ z_t $ claramente parece um passeio aleatório. 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, traçar ambos:
Plot das séries $ x_t $ e $ y_t $, cada uma baseada no passeio aleatório subjacente $ z_t $
Como você pode ver, ambos são parecidos. É claro que eles serão por definição - eles compartilham a mesma estrutura de passeio aleatório subjacente de $ z_t $. Vamos agora formar a combinação linear, comb, 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 da série combinada se parece muito com uma série estacionária. Isto é de se esperar, dada a sua definição.
Vamos tentar aplicar os três testes de raiz unitária na série de combinações lineares. Em primeiro lugar, o teste Augmented Dickey-Fuller:
A saída é a seguinte:
O valor p é pequeno e, portanto, temos evidências para rejeitar a hipótese nula de que a série possui uma raiz unitária. Agora tentamos o teste Phillips-Perron:
A saída é a seguinte:
Mais uma vez, temos um pequeno p-valor e, portanto, temos evidências para rejeitar a hipótese nula de uma raiz unitária. Finalmente, tentamos o teste Phillips-Ouliaris (observe que requer entrada de matriz dos constituintes da série subjacente):
A saída é a seguinte:
Mais uma vez, vemos um pequeno valor p indicando evidência para rejeitar a hipótese nula. Por isso, é claro que estamos lidando com um par de séries que são cointegradas.
O que acontece se, em vez disso, criarmos uma combinação separada com, digamos, $ p = -1 $ e $ q = 2 $?
A saída é a seguinte:
Plot of badcomb - a série de combinações lineares "incorretas" - e seu correlograma.
Neste caso, não temos evidências 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, pois escolhemos arbitrariamente a combinação linear de $ a $ e $ b $ em vez de defini-los para os valores corretos de $ p = 2 $ e $ b = -1 $ para formar uma série estacionária.
Próximos passos.
Neste artigo, examinamos múltiplos 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 foram cointegradas.
Em artigos futuros, vamos considerar implementações completas de estratégias de negociação de reversão de médias para ações diárias e dados de ETFs usando QSTrader com base nesses testes de cointegração.
Além disso, ampliaremos nossa análise para a cointegração em mais de dois ativos, levando a estratégias de negociação que aproveitam as carteiras cointegradas.
Referências.
A Quantcademy.
Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.
Negociação Algorítmica Bem Sucedida.
Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.
Comércio Algorítmico Avançado.
Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.
Pares de Negociação usando Técnicas Orientadas a Dados: Estratégias de Negociação Simples Parte 3.
A negociação de pares é um bom exemplo de uma estratégia baseada em análise matemática. Demonstraremos como aproveitar os dados para criar e automatizar uma estratégia de negociação de pares.
Princípio Subjacente.
Digamos que você tenha um par de títulos X e Y que tenham algum elo econômico subjacente, por exemplo, duas empresas que fabricam o mesmo produto, como a Pepsi e a Coca-Cola. Você espera que a relação ou diferença nos preços (também chamada de spread) desses dois permaneça constante com o tempo. No entanto, de tempos em tempos, pode haver uma divergência no spread entre esses dois pares causada por mudanças temporárias de oferta / demanda, grandes ordens de compra / venda de um título, reação a notícias importantes sobre uma das empresas etc. , um estoque sobe enquanto o outro se move para baixo um em relação ao outro. Se você espera que essa divergência volte ao normal com o tempo, você pode fazer uma troca de pares.
Quando há uma divergência temporária, os pares negociariam a venda do estoque de melhor desempenho (o estoque que subia) e comprariam o estoque de baixo desempenho (o estoque que descia). Você está apostando que o spread entre os dois estoques acabaria por convergir tanto pelo estoque de alto desempenho que recuou quanto pelo estoque de baixo desempenho, ou ambos - seu negócio vai ganhar dinheiro em todos esses cenários. Se ambas as ações subirem ou descerem juntas sem alterar o spread entre elas, você não ganha nem perde dinheiro.
Assim, a negociação de pares é uma estratégia de negociação neutra de mercado que permite aos comerciantes lucrar com praticamente qualquer condição de mercado: tendência de alta, tendência de baixa ou movimento lateral.
Explicando o Conceito: Começamos gerando dois títulos falsos.
Vamos gerar uma segurança falsa X e modelar os retornos diários, desenhando a partir de uma distribuição normal. Em seguida, realizamos uma soma cumulativa para obter o valor de X em cada dia.
Agora nós geramos Y, que tem um link econômico profundo para X, então o preço de Y deve variar de maneira muito semelhante a X. Modelamos isso pegando X, deslocando-o e adicionando algum ruído aleatório extraído de uma distribuição normal.
Cointegração
Cointegração, muito semelhante à correlação, significa que a relação entre duas séries irá variar em torno de uma média. As duas séries, Y e X seguem o seguinte:
onde ⍺ é a relação constante e e é ruído branco. Leia mais aqui.
Para pares negociando para trabalhar entre duas séries temporais, o valor esperado da relação ao longo do tempo deve convergir para a média, ou seja, eles devem ser cointegrados.
As séries temporais que construímos acima são cointegradas. Vamos traçar a relação entre os dois agora para que possamos ver como isso se parece.
Testes para cointegração.
Existe um teste conveniente que mora em statsmodels. tsa. stattools. Devemos ver um valor p muito baixo, pois criamos artificialmente duas séries que são tão cointegradas quanto fisicamente possíveis.
Nota: Correlação vs. Cointegração.
Correlação e cointegração, embora teoricamente semelhantes, não são as mesmas. Vejamos exemplos de séries correlacionadas, mas não cointegradas, e vice-versa. Primeiro, vamos verificar a correlação das séries que acabamos de gerar.
Isso é muito alto, como seria de esperar. Mas como duas séries correlacionadas, mas não cointegradas, se parecem? Um exemplo simples são duas séries que apenas divergem.
Valor de p do teste de cointegração: 0,258.
Um exemplo simples de cointegração sem correlação é uma série normalmente distribuída e uma onda quadrada.
Valor de p do teste de cointegração: 0.0.
A correlação é incrivelmente baixa, mas o valor p mostra uma perfeita cointegração!
Como fazer um comércio de pares?
Como duas séries temporais cointegradas (como X e Y acima) se movem na direção e afastam-se uma da outra, haverá momentos em que a propagação será alta e quando a propagação estiver baixa. Fazemos um comércio de pares comprando um título e vendendo outro. Dessa forma, se ambos os valores mobiliários forem juntos ou juntos, não faremos nem perderemos dinheiro - somos neutros em relação ao mercado.
Voltando para X e Y acima que seguem Y = ⍺ X + e, tal que a razão (Y / X) se move em torno do valor médio ⍺, ganhamos dinheiro na proporção dos dois revertendo para a média. Para fazer isso, observaremos quando X e Y estão distantes, ou seja, é muito alto ou muito baixo:
Indo Longo na Relação Isto é quando a relação ⍺ é menor do que o usual e esperamos que aumente. No exemplo acima, apostamos nisso comprando Y e vendendo X. Reduzindo a taxa É quando a proporção ⍺ é grande e esperamos que ela se torne menor. No exemplo acima, apostamos nisso vendendo Y e comprando X.
Tenha em mente que sempre temos uma "posição protegida": uma posição vendida ganha dinheiro se a segurança vendida perde valor e uma posição comprada ganhará dinheiro se uma segurança ganhar valor, por isso estamos imunes ao movimento geral do mercado. Nós só ganhamos ou perdemos dinheiro se os títulos X e Y se movem em relação um ao outro.
Usando dados para encontrar valores mobiliários que se comportam assim.
A melhor maneira de fazer isso é começar com títulos que você suspeita serem cointegrados e realizar um teste estatístico. Se você acabou de executar testes estatísticos sobre todos os pares, será vítima de viés de várias comparações.
O viés de múltiplas comparações é simplesmente o fato de que há uma chance maior de gerar incorretamente um valor p significativo quando muitos testes são executados, porque estamos executando muitos testes. Se 100 testes forem executados em dados aleatórios, devemos esperar ver 5 valores p abaixo de 0,05. Se você estiver comparando n títulos para co-integração, você realizará n (n-1) / 2 comparações, e você deve esperar ver muitos valores p incorretamente significativos, que aumentarão conforme você aumenta. Para evitar isso, escolha um pequeno número de pares que você tenha motivos para suspeitar que possam ser cointegrados e teste cada um individualmente. Isso resultará em menos exposição ao viés de múltiplas comparações.
Então, vamos tentar encontrar algumas ações que exibam cointegração. Vamos trabalhar com uma cesta de ações da US cap tech de grande porte - no S & P 500. Essas ações operam em um segmento semelhante e poderiam ter preços cointegrados. Examinamos uma lista de títulos e testamos a cointegração entre todos os pares. Ele retorna uma matriz de pontuação do teste de cointegração, uma matriz de valor p e quaisquer pares para os quais o valor de p é menor que 0,05. Este método é propenso a viés de comparação múltipla e, na prática, os títulos devem estar sujeitos a uma segunda etapa de verificação. Vamos ignorar isso por causa deste exemplo.
Nota: Incluímos o benchmark de mercado (SPX) em nossos dados - o mercado impulsiona o movimento de tantos títulos que muitas vezes você pode encontrar dois títulos aparentemente cointegrados; mas na realidade eles não estão cointegrados um com o outro, mas ambos conintegrados com o mercado. Isso é conhecido como uma variável de confusão e é importante verificar o envolvimento do mercado em qualquer relacionamento que você encontrar.
Agora vamos tentar encontrar pares cointegrados usando nosso método.
Parece que o "ADBE" e o "MSFT" estão cointegrados. Vamos dar uma olhada nos preços para garantir que isso realmente faça sentido.
A taxa parece que se deslocou em torno de uma média estável. A taxa absoluta não é muito útil em termos estatísticos. É mais útil normalizar nosso sinal tratando-o como um escore z. A pontuação Z é definida como:
Pontuação Z (Valor) = (Valor - Média) / Desvio Padrão.
Na prática, isso geralmente é feito para tentar dar alguma escala aos dados, mas isso pressupõe uma distribuição subjacente. Normalmente normal. No entanto, muitos dados financeiros normalmente não são distribuídos, e devemos ter muito cuidado para não simplesmente assumir a normalidade ou qualquer distribuição específica ao gerar estatísticas. A verdadeira distribuição das proporções poderia ser muito gorda e propensa a valores extremos, atrapalhando nosso modelo e resultando em grandes perdas.
É mais fácil observar agora que a proporção agora se move em torno da média, mas às vezes é propensa a grandes divergências da média, das quais podemos tirar vantagens.
Como falamos sobre os fundamentos da estratégia de negociação em pares e identificamos títulos co-integrados com base no preço histórico, vamos tentar desenvolver um sinal de negociação. Primeiro, vamos recapitular os passos no desenvolvimento de um sinal de negociação usando técnicas de dados:
Colete dados confiáveis e limpe os recursos de criação de dados dos dados para identificar um sinal de negociação / lógica Os recursos podem ser médias móveis ou taxas de dados de preços, correlações ou sinais mais complexos - combine-os para criar novos recursos Gerar um sinal de negociação usando esses recursos, ou seja, instrumentos são uma compra, uma venda ou neutra.
Etapa 1: configure seu problema.
Aqui estamos tentando criar um sinal que nos diz se a proporção é uma compra ou uma venda no próximo instante, ou seja, nossa variável de previsão Y:
Y = Razão é comprar (1) ou vender (-1) Y (t) = Sinal (Proporção (t + 1) - Razão (t))
Note que não precisamos prever os preços reais das ações, ou mesmo o valor real da proporção (embora possamos), apenas a direção do próximo movimento na proporção.
Etapa 2: colete dados confiáveis e precisos.
A Auquan Toolbox é sua amiga aqui! Você só precisa especificar o estoque que deseja negociar e usar a fonte de dados, e extrai os dados necessários e os limpa para dividendos e desdobramentos. Então nossos dados aqui já estão limpos.
Estamos usando os seguintes dados do Yahoo em intervalos diários para os dias de negociação nos últimos 10 anos (
2500 pontos de dados): Aberto, Fechado, Alto, Baixo e Volume de Negociação.
Etapa 3: dividir dados.
Não se esqueça deste passo super importante para testar a precisão dos seus modelos. Estamos usando o seguinte Treinamento / validação / teste dividido.
Idealmente, devemos também fazer um conjunto de validação, mas vamos ignorar isso por enquanto.
Etapa 4: engenharia de recursos.
Quais poderiam ser as características relevantes? Queremos prever a direção do movimento da razão. Vimos que nossos dois títulos estão cointegrados, então a proporção tende a se mover e voltar à média. Parece que nossas características devem ser determinadas medidas para a média da razão, a divergência do valor atual da média para gerar nosso sinal de negociação.
Vamos usar os seguintes recursos:
Média Móvel de 60 Dias de Proporção: Medida de média móvel de 5 dias Média Móvel de Proporção: Medida do valor atual de média de 60 dias Desvio Padrão z pontuação: (5d MA - 60d MA) / 60d SD.
O Z Score do rolamento realmente destaca a natureza de reversão da razão!
Etapa 5: Seleção do Modelo.
Vamos começar com um modelo realmente simples. Observando o gráfico de pontuação z, podemos ver que sempre que o recurso z-score fica muito alto ou muito baixo, ele tende a reverter. Vamos usar + 1 / -1 como nossos limites para muito alto e muito baixo, então podemos usar o modelo a seguir para gerar um sinal de negociação:
Proporção é comprar (1) sempre que o escore z for inferior a -1,0 porque esperamos que o escore z volte até 0, portanto, o rácio para aumentar Rácio é vender (-1) quando o escore z é superior a 1,0 porque esperamos z pontuação para voltar a 0, daí relação para diminuir.
Etapa 6: Treine, valide e otimize.
Por fim, vamos ver como nosso modelo realmente funciona com dados reais? Vamos ver como esse sinal se parece nas proporções reais.
O sinal parece razoável, parece que nós vendemos a proporção (pontos vermelhos) quando está alto ou aumentando e compramos de volta quando está baixo (pontos verdes) e diminuindo. O que isso significa para as ações reais que estamos negociando? Vamos dar uma olhada.
Observe como às vezes ganhamos dinheiro com a perna curta e às vezes com a perna longa e às vezes com as duas.
Estamos felizes com nosso sinal nos dados de treinamento. Vamos ver que tipo de lucros esse sinal pode gerar. Podemos fazer um backtester simples que compra 1 rácio (comprar 1 stock de ADBE e rácio de venda x stock de MSFT) quando o rácio é baixo, vender 1 rácio (vender 1 stock de ADBE e rácio de compra x stock de MSFT) quando é alto e calcular PnL destes comércios.
Então essa estratégia parece lucrativa! Agora podemos otimizar ainda mais, alterando as janelas de média móvel, alterando os limites para as posições de compra / venda e saída, etc. e verifique se há melhorias de desempenho nos dados de validação.
Poderíamos também tentar modelos mais sofisticados como Regressão Logística, SVM, etc. para fazer nossas previsões de 1 / -1.
Por enquanto, digamos que decidimos seguir adiante com esse modelo, isso nos leva a.
Etapa 7: Backtest nos dados de teste.
O backtesting é simples, podemos apenas usar nossa função acima para ver o PnL nos dados de teste.
O modelo faz muito bem! Isso torna o nosso primeiro modelo de negociação de pares simples.
Evite Overfitting.
Antes de terminar a discussão, gostaríamos de mencionar o superajuste. Overfitting é a armadilha mais perigosa de uma estratégia de negociação. Um algoritmo overfit pode funcionar maravilhosamente em um backtest, mas falha miseravelmente em novos dados invisíveis - isso significa que realmente não descobriu qualquer tendência nos dados e nenhum poder preditivo real. Vamos dar um exemplo simples.
Em nosso modelo, usamos estimativas de parâmetros de rolamento e podemos desejar otimizar o tamanho da janela. Podemos decidir simplesmente fazer uma iteração em toda a extensão de janela razoável e possível e escolher o tamanho com base no desempenho do nosso modelo. Abaixo, escrevemos um loop simples para marcar os comprimentos das janelas com base no pnl de dados de treinamento e encontrar o melhor.
Agora, verificamos o desempenho do nosso modelo nos dados de teste e descobrimos que esse tamanho de janela está longe de ser ideal! Isso ocorre porque nossa escolha original foi claramente ajustada aos dados da amostra.
Claramente adequado aos nossos dados de amostra não dá sempre bons resultados no futuro. Apenas por diversão, vamos mapear as pontuações de comprimento calculadas a partir dos dois conjuntos de dados.
Podemos ver que qualquer coisa entre 20 e 50 seria uma boa escolha para a janela.
Para evitar o overfitting, podemos usar o raciocínio econômico ou a natureza do nosso algoritmo para escolher o tamanho da nossa janela. Também podemos usar filtros de Kalman, que não nos obrigam a especificar um tamanho; esse método será abordado em outro caderno posteriormente.
Próximos passos.
Neste post, apresentamos algumas abordagens introdutórias simples para demonstrar o processo de desenvolvimento de uma estratégia de negociação de pares. Na prática, deve-se usar estatísticas mais sofisticadas, algumas das quais estão listadas aqui.
Expoente de Hurst Meia-vida de reversão à média inferida de um processo de Ornstein-Uhlenbeck de filtros de Kalman.
Комментарии
Отправить комментарий