Gekko Quant - Negociação Quantitativa.
Comércio Quantitativo, Arbitragem Estatística, Aprendizado de Máquinas e Opções Binárias.
Pós-navegação.
Estratégia de Negociação & # 8211; VWAP Mean Reversion.
Esta estratégia vai usar o preço médio ponderado do volume (VWAP) como um indicador para a versão média comercial de volta ao VWAP. Razão Annual Sharpe (Rf = 0%) é 0.9016936.
Este post é uma resposta para gekkoquant / 2018/07/29 / trading-strategy-sp-vwap-trend-follow / onde houve um erro no código indicando que o VWAP não foi # 8217; t reverter (este didn & # 8217; t sente-se bem comigo, ou algumas pessoas que comentaram). Como sempre, não tome a minha palavra para nada, teste a estratégia sozinha. Um dos perigos de usar R ou Matlab é que é fácil para viés direto encaixar no seu código. Existem bibliotecas, como Quantstrat for R, que protegem contra isso, mas eu encontrei-os terrivelmente lento para correr.
Todas as condições são verificadas no fechamento e a negociação realizada por um dia a partir do fechar Se preço / vwap & gt; ulim vai curto Se price / vwap & lt; Lm vai longe.
8 pensamentos sobre & ldquo; Estratégia de Negociação & # 8211; VWAP Mean Reversion & rdquo;
Obrigado pela rápida correção. Mantenha o bom trabalho!
Desculpe pela pergunta burra, mas o que significa uLim ILim?
É apenas um limite usado para determinar quando entrar no comércio.
Então, se price / vwap for maior que o limite superior (uLim), faça um comércio.
Então, se uLim fosse 1.02, um comércio só ocorreria quando o preço fosse maior do que 1.02 * vwap. O uLim maior (ou menor limite inferior lLim), então a estratégia aguarda um movimento mais extremo da vwap antes da negociação. Isso significa que haverá menos negócios por ano e provavelmente reduzirá a proporção de sharpe (embora não significa que é uma estratégia ruim).
Se você quiser procurar mais movimentos extremos, talvez seja melhor executar a estratégia em vários índices / estoques diferentes para que você tenha maiores chances de estar no mercado.
Obrigado. Idéia interessante. Do gráfico parece que a curva de equidade se tornou lateral a partir de meados de 2009. Alguma idéia sobre o que poderia ser o motivo? Baixa, volatilidade do mercado?
Normalmente, as estratégias de negociação de tendências funcionam bem se o VIX estiver em níveis mais altos. No entanto, quando o VIX caiu, a estratégia de negociação pode dar-lhe menos perdas ou lucros. 2018 - meados de 2018, a volatilidade do mercado é muito menor em todo o mundo. Esses são os períodos em que um deve parar de negociar seu estratagema.
Obrigado por compartilhar esse código! Reproduzi e funciona bem. Minha pergunta é que, quando você escreveu a variável & # 8216; trade & # 8217 ;, você só escreveu quando não há nada longo e curto sobre quando fechar uma posição. então, você deve assumir que o comerciante fechará a posição aberta no preço de fechamento diário até o final de cada dia de negociação, certo?
Olá! Obrigado pelo artigo!
Por que não substituir isso:
trade & lt; - ifelse (sinal uLim, -1, 0))
Eu não testei, mas deveria funcionar. E deve funcionar mais rápido.
Motivo reverter estratégias e volatilidade.
As estratégias de reversão média estão batendo na reversão média dos preços. Existem vários sabores de estratégias de reversão significativas, mas como proxy eu escolhi RSI (2). Você pode encontrar muitas entradas na blogósfera sobre esta estratégia, mas hoje em dia sua popularidade secou.
O que me fez pensar que havia uma idéia sobre a correlação entre retorno dessa estratégia e volatilidade do mercado. Isso significa que, durante os períodos de alta volatilidade, esta estratégia produz maior retorno e menor volatilidade - menos.
Para testar essa ideia, construí duas estratégias. RSI Simples vai longo, se o indicador RSI (2) for inferior a 10 ou seja curto, se RSi (2) estiver acima de 90. Ele fecha a posição aberta, então o indicador está acima / abaixo de 70/30, respectivamente.
RSI Garch segue as mesmas regras que o RSI Simple, exceto uma regra adicional. Ao usar o modelo Garch, eu prevejo a volatilidade para o próximo dia. Se o valor da volatilidade for maior que 65% dos valores durante o ano (252 dias), a ordem será executada. Ao adicionar este filtro, posso pegar os dias mais voláteis do ano passado.
O resultado do filtro Garch é um pouco melhor, mas a questão permanece - vale a pena adicioná-lo?
A seguir, tentei analisar a correlação entre a volatilidade do mercado e o retorno. Na verdade, não era tão trivial implementar isso. O problema é a duração do investimento, que não é corrigido em dias (pode demorar entre 1 a 19 dias para fechar uma posição). Então, eu tinha duas abordagens: quer medir a volatilidade no início do investimento ou fixar o tempo máximo de investimento (por exemplo, 5 dias) e depois medir a volatilidade no último dia do investimento. Apesar das diferenças, os resultados são semelhantes e vou apresentar o ex.
Como você pode ver no gráfico abaixo, há correlação entre o retorno da estratégia RSI (2) e a volatilidade dos últimos 20 dias. No entanto, atribuo essa correlação ao fato de que o retorno (lucro ou perda) tende a ser maior, então a volatilidade é maior. Este pensamento é suportado por R ^ 2, que era apenas 0,1.
Você pode ver as faixas de retorno em relação aos intervalos de volatilidade no próximo gráfico. Como no primeiro exemplo acima, não consigo ver fortes evidências da correlação.
O filtro de volatilidade pode melhorar ligeiramente o retorno da estratégia RSI (2), mas não é significativo. No futuro, eu executarei o mesmo teste na estratégia de negociação de pares (outro sabor das estratégias de reversão média).
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 2018.
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 para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de 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.
No comments:
Post a Comment