Análise de regressão dos preços históricos do petróleo: uma base para futuros cenários de preços médios de reversão.
Destaques.
Funções de preço de equilíbrio de longo prazo para previsão de cenários futuros de preços.
A elasticidade de curto prazo da demanda de petróleo é de 0,015 (altamente inelástica)
Elasticidade a longo prazo do fornecimento 0,99 (altamente elástico) para o período 1965–1983.
A elasticidade de longo prazo da oferta mudou para 0,39 (menor elasticidade) para 1984–2012.
Propomos algoritmos de previsão de preços com base na análise de regressão dos preços históricos do petróleo ao longo de 150 anos (1861 a 2012). A partir de 1986, os preços diários do mercado permitem uma análise mais detalhada dos principais indicadores de referência do petróleo bruto (West Texas Intermediate [WTI] e Brent). O preço médio de reversão para um determinado período de tempo corresponde ao custo marginal de fornecimento. Quando a oferta e a demanda estão fora de equilíbrio, os preços spot se movem em uma largura de banda limitada na parte inferior pelo custo de fornecimento em dinheiro e no topo pelo preço concorrente da destruição da demanda. A elasticidade de demanda de curto prazo é de 0,015 (altamente inelástica), e a elasticidade de oferta a longo prazo mudou de 0,99 (altamente elástica) durante 1965-1983 para 0,39 (menos elástica) durante 1984–2012. Derivamos funções para o preço de equilíbrio de longo prazo e as expandimos em funções de preço de equilíbrio escalonável para previsão de cenários futuros de preço se o “business as usual” for assumido. Também consideramos como dois eventos hipotéticos do cisne negro ("desconhecidos desconhecidos") podem afetar o preço médio de equilíbrio.
Classificações JEL.
Escolha uma opção para localizar / acessar este artigo:
Verifique se você tem acesso através de suas credenciais de login ou de sua instituição.
Negociação do Modelo de Mistura (Parte 4 - Implementação da Estratégia)
Metas do capítulo e links de estrutura de tópicos Introdução Modelo de mistura Algoritmo de negociação Outline GMM Algorithm Implementation Próximos passos.
Use a Parte 3 - pesquisa de estratégia como base para a estratégia de negociação algorítmica. Implemente a estratégia usando a plataforma Quantconnect.
Introdução.
Este notebook vai percorrer o processo de implementação do algoritmo na plataforma quantconnect. Informamos que este notebook não executará o algoritmo, pois não instalei o mecanismo de backtesting de quantconnect localmente. Esta é uma demonstração do processo. O script está disponível para copiar e colar no ambiente quantconnect dentro do diretório ./scripts/ do repositório github.
Notas principais sobre a plataforma Quantconnect.
Eles usam o Python 2.7 e eu não sei quando / se o Python 3 será suportado. Não há depurador interativo no momento. A resolução de problemas pode ser difícil se o seu algoritmo não estiver logicamente estruturado para modularidade. Existem alguns problemas menores de dados que sua equipe está trabalhando com correção. Às vezes, há negociações que são preenchidas incorretamente, portanto, investigar os dados do nível de comércio é importante e, felizmente, simples de se fazer. Chamadas para a função History () criam grandes penalidades de RAM / tempo, por isso é importante codificar seu algoritmo para ser eficiente com suas solicitações de dados.
Modelo de Mistura: Esquema de Algoritmo de Negociação.
O algoritmo usará Gaussian Mixture Models (GMM) para determinar desvios de retorno. Com base na direção outlier, o algoritmo será longo (ou curto) no ETF. Com base na pesquisa realizada no capítulo 3, determinei que um padrão comercializável era uma estratégia de longo prazo com um período de detenção de 63 dias, após um evento de outlier. A estrutura básica do algoritmo é:
Verifique pedidos em aberto:
confirmar todas as ordens são preenchidas as datas de preenchimento da faixa.
Verifique se qualquer participação atual atende aos critérios de liquidação. Nesta implementação, o único critério de liquidação é se mantivemos a garantia pelo período de 63 dias.
verifique se a data de hoje é maior ou igual à data de liquidação. se assim liquidar a posição.
Execute o cálculo principal do algoritmo. Nesta implementação, usamos uma retrospectiva de 252 dias ou aproximadamente 1 ano comercial.
encaixe o GMM usando componentes N. extrair estados ocultos e seus parâmetros amostra da distribuição escolhida usando esses parâmetros intervalos de confiança de computação comparar intervalos com retorno atual para identificar outliers avaliam direção de outliers, por exemplo too_low ou too_high atribuem títulos a longo prazo (ou curtos) com base na direção de outliers.
Use resultados computados para enviar pedidos.
essa implementação usa MarketOnOpenOrders. Isso significa que as ordens de mercado são enviadas para o dia seguinte, depois que um evento de outlier é acionado.
Implementação do Algoritmo GMM.
Primeiro, o algoritmo Quantconnect é importado.
Em seguida, configuramos um PARAMETER_REGISTRY. Isso ajuda a associar o conjunto de parâmetros escolhido a cada backtest. Sem ele, não há como saber quais parâmetros foram usados com o qual o backtest é feito quando você vai comparar os resultados em uma data posterior. No entanto, ao registrar os parâmetros, podemos registrá-los. Esses logs de backtest estão sempre disponíveis para download quando você carrega os resultados do seu backtest.
Em seguida, definimos e registramos os parâmetros globais que a classe de algoritmos usará. Esses parâmetros contêm um sinalizador que registra se a estratégia foi implementada somente por muito tempo, o número de amostras para nossa amostragem de intervalo de confiança, a distribuição escolhida que estamos usando e os parâmetros para o GMM sklearn que implementaremos.
Em seguida, definimos algumas funções globais para tornar a computação do algoritmo um pouco mais simples.
Agora nós definimos a classe de algoritmos que implementará a estratégia. Na quantconnect, todos os algoritmos são uma classe com pelo menos 2 funções definidas: Initialize () e OnData ().
Initialize contém a configuração do algoritmo, incluindo universos, objetos de nível de classe, modelos de corretagem e funções planejadas.
OnData é o manipulador de eventos que é chamado na resolução que escolhemos, e. minuto, hora, diariamente. No entanto, como esse algoritmo usa funções programadas, essa função não é necessária e é simplesmente passada (ed).
A função de inicialização tem muita coisa acontecendo. Além de definir os parâmetros, criamos os gráficos personalizados para controlar a alavancagem, o dinheiro, o uso de RAM e o tempo de computação.
Uma nota rápida sobre as funções do cronograma; A maneira de lê-lo é que as principais funções são agendadas duas vezes por semana às segundas e sextas-feiras para serem executadas depois que o mercado abrir para o SPY etf no número designado de minutos depois. A ação é a função que queremos executar nesse momento.
Outra observação importante é que inicializamos nosso dataframe de histórico de preços. Nós o chamamos aqui para o lookback completo de 252 dias. Posteriormente, definimos uma função chamada update_prices () que calcula o número de dias adicionais do histórico a serem solicitados entre a data atual e a data final do nosso dataframe self. prices. Em seguida, ele solicita apenas esse histórico limitado, concatena e limpa os dados para que tenhamos apenas dados para o período de lookback especificado. Essa metodologia economiza RAM / tempo em massa durante as execuções de backtest.
Em seguida, definimos a função check_liquidate (), que implementa os números 1 e 2 do esboço do algoritmo especificado acima.
Em seguida, definimos duas funções para implementar o cálculo principal do algoritmo. Primeiro, definimos a função compute () que usa um único símbolo, ajusta o GMM, extrai os estados ocultos e seus parâmetros e determina se ocorreram eventos outliers.
Em seguida, definimos a função run_main_algo () que agrega a informação compute () em um dataframe a partir de uma lista de linhas, se e somente se eventos outlier tiverem ocorrido. Isso também é para economizar memória RAM / tempo. Esta função constrói os arrays numpy longos (e / ou curtos) que serão enviados para a função send_orders ().
Em seguida, definimos a função send_orders () que é responsável por enviar as ordens e atualizar nossa lista de tickets de ordem contidos na lista self. openMarketOnOpenOrders. Ele contém algumas verificações para fins de eficiência e tratamento de erros.
Finalmente, definimos nossa função CHART_RAM () que, na verdade, rastreia o uso de RAM, o tempo de computação, a alavancagem e o caixa. Nós também definimos a função OnData () que simplesmente passamos quando todas as funções são programadas.
Novamente, o script completo pode ser encontrado no diretório ./scripts/ do repositório do github. Registre-se no Quantconnect e cole o script no ambiente do Algorithm Lab (backtesting). Teste o algoritmo com vários parâmetros e veja o que você descobriu.
Próximos passos.
Na parte 5, avaliaremos os resultados dos meus backtests usando componentes 1,2 e 4 GMM.
Desenvolvendo uma estratégia de transporte de volatilidade.
A título de introdução, começamos revisando uma característica bem conhecida do iPath S & P 500 VIX ST Futures ETN (NYSEArca: VXX). Em comum com outros ETF / ETNs de volatilidade longa, o VXX tem uma tendência a diminuir em valor devido à forma inclinada para cima da curva de volatilidade para a frente. O gráfico abaixo ilustra a queda no valor da VXX, juntamente com o contrato VIX de futuros do mês anterior, durante o período de 2009.
Este fenómeno dá origem a oportunidades para estratégias “carry”, em que um produto de volatilidade longa como o VXX é vendido na expectativa de que irá diminuir de valor ao longo do tempo. Tais estratégias funcionam bem durante os períodos em que os futuros de volatilidade estão em contango, ou seja, quando os contratos futuros com prazos mais longos têm preços mais altos do que os contratos futuros com prazos mais curtos e o Índice Spot VIX, que é tipicamente o caso em torno de 70% do tempo. Uma estratégia análoga no mundo da renda fixa é conhecida como "reduzir a curva de juros". Quando as curvas de rendimento são inclinadas para cima, um investidor de renda fixa pode comprar um título ou título de maior rendimento na expectativa de que o rendimento declinará e o aumento de preço, à medida que a segurança se aproxima da maturidade. O quantitative easing é pago a essa técnica amplamente utilizada, mas as estratégias análogas nos mercados de moeda e volatilidade continuam a ter bom desempenho.
O desafio para qualquer estratégia de carry é o que acontece quando a curva se inverte, à medida que os futuros se movem para o backwardation, muitas vezes dando origem a perdas precipitadas. Uma variedade de esquemas de hedge foram concebidos para minimizar o risco. Por exemplo, uma bem conhecida estratégia de carry nos futuros VIX envolve a venda do contrato do mês anterior e a cobertura com uma posição vendida em um número apropriado de contratos futuros do E-Mini S & P 500. Nesse caso, a cobertura é imperfeita, deixando ao investidor a tarefa de administrar um risco significativo.
O gráfico do valor composto do contrato de futuros VXX e VIX sugere outra abordagem. Enquanto ambos os títulos diminuem de valor ao longo do tempo, a queda no valor do VXX ETN é substancialmente maior do que a do contrato futuro do mês da frente. A idéia básica, portanto, é uma negociação de valor relativo, na qual compramos futuros VIX, o melhor desempenho do par, enquanto vendemos o VXX de baixo desempenho. Como o valor da VXX é determinado pelo valor dos contratos futuros VIX de dois meses, a cobertura, embora imperfeita, provavelmente envolverá menos risco de base do que no caso da estratégia de futuros VIX-ES.
Outra forma de pensar sobre o negócio é a seguinte: ao combinar uma posição vendida em VXX com uma posição longa nos contratos futuros do mês anterior, estamos criando uma exposição residual no valor do contrato VIX do segundo mês em relação ao primeiro. . Portanto, esta é uma estratégia em que estamos olhando para capturar volatilidade transportar, não na frente da curva, mas entre os vencimentos de futuros primeiro e segundo mês. Estamos, na verdade, descendo a curva da volatilidade.
A relação entre os futuros VXX e VIX.
Vamos dar uma olhada na relação entre o VXX e o contrato de futuros do mês da frente, ao qual me referirei daqui em diante simplesmente como VX. Uma análise de regressão linear simples do VXX em relação ao VX é resumida nas tabelas abaixo e confirma duas características de seu relacionamento.
Em primeiro lugar, há uma forte relação estatisticamente significativa entre os dois (com um quadrado-R de 75%) - de fato, dado que o valor do VXX é em parte determinado pelo VX, como não poderia haver?
Em segundo lugar, o intercepto da regressão é negativo e estatisticamente significativo. Podemos, portanto, concluir que o baixo desempenho do VXX em relação ao VX não é apenas uma questão de ótica, mas é um fenômeno estatisticamente confiável. Portanto, a idéia básica de vender o VXX contra o VX é boa, pelo menos no sentido estatístico.
Construindo o Portfólio Inicial.
Ao construir nosso portfólio teórico, vou passar por cima de algumas questões técnicas importantes sobre como construir o hedge ótimo e simplesmente afirmar que o melhor que podemos fazer é aplicar um beta de cerca de 1,2 para produzir o seguinte resultado:
Embora amplamente positivo, com uma relação de informação de 1,32, o desempenho da estratégia é um pouco desanimador, em vários níveis. Em primeiro lugar, a volatilidade anual, acima de 48%, é desconfortavelmente alta. Em segundo lugar, a estratégia experimenta quedas muito substanciais em momentos em que a curva de volatilidade se inverte, como em agosto de 2015 e janeiro de 2016. Finalmente, a estratégia está altamente correlacionada com o índice S & P500, que pode ser uma consideração importante para investidores que procuram maneiras de diversificar seu risco de carteira de ações.
Explorando efeitos de calendário.
Vamos abordar estas questões em pouco tempo. Em primeiro lugar, porém, quero chamar a atenção para um efeito calendário interessante na estratégia (usando uma análise simples de tabela dinâmica).
Como você pode ver na tabela acima, os retornos da estratégia nos últimos dias do mês tendem a ser significativamente abaixo de zero.
A causa do fenômeno tem a ver com a maneira como a VXX é construída, mas o ponto importante aqui é que, em princípio, podemos utilizar esse efeito a nosso favor, revertendo as posições da carteira por volta do final do mês. Essa técnica simples produz uma melhoria significativa nos retornos da estratégia, ao mesmo tempo em que reduz a correlação:
Redução do Risco e Correlação da Carteira.
Podemos agora abordar a questão do alto nível residual de volatilidade da estratégia, enquanto reduz simultaneamente a correlação da estratégia para um nível muito mais baixo. Podemos fazer isso de maneira direta, adicionando um terceiro ativo, o SPDR S & P 500 ETF Trust (NYSEArca: SPY), no qual teremos uma posição vendida para explorar a correlação negativa da carteira original.
Em seguida, ajustamos os pesos da carteira para maximizar os retornos ajustados ao risco, sujeitos a limites na volatilidade e correlação máximas da carteira. Por exemplo, definindo um limite de 10% para a volatilidade e correlação, alcançamos o seguinte resultado (com pesos -0,37 0,27 -0,65 para VXX, VX e SPY, respectivamente):
Comparado com o portfólio original, o desempenho do novo portfólio é muito mais benigno durante o período crítico do segundo trimestre de 2015 até o primeiro trimestre de 2016 e embora permaneçam vários períodos significativos de rebaixamento, principalmente em 2011, a estratégia está agora se aproximando de uma proposta de investimento. uma relação de informação de 1,6 e volatilidade anual de 9,96% e correlação de 0,1.
Outras configurações são possíveis, é claro, e o desempenho ajustado ao risco pode ser melhorado, dependendo das preferências de risco do investidor.
Há um elemento de ajuste de curva no processo de pesquisa, conforme descrito até agora, na medida em que estamos usando todos os dados disponíveis até julho de 2016 para construir um portfólio com as características desejadas. Na prática, é claro, seremos obrigados a reequilibrar a carteira periodicamente, re-estimando os pesos ótimos da carteira à medida que novos dados chegam. A título ilustrativo, a carteira foi re-estimada usando dados na amostra para a carteira. final de fevereiro de 2016, produzindo resultados fora da amostra durante o período de março a julho de 2016, como segue:
Um exame detalhado do problema genérico de quão frequentemente reequilibrar o portfólio está além do escopo deste artigo e deixo para os analistas interessados realizar a pesquisa por si mesmos.
Considerações práticas.
Para implementar a estratégia teórica descrita acima, há várias etapas práticas importantes que precisam ser consideradas.
Não é imediatamente aparente como os pesos devem ser aplicados a uma carteira compreendendo ETNs e futuros. Na prática, a melhor abordagem é re-estimar o portfólio usando uma relação de regressão expressa em termos de $ - valor, em vez de em porcentagens, para estabelecer a quantidade de ações VXX e SPY a serem vendidas por contrato futuro de VX. A reversão das posições do portfólio nos últimos dias do mês aumentará significativamente os custos de transação, especialmente para a posição em futuros de VX, para a qual o tamanho mínimo de tick é de $ 50. É importante calcular as estimativas realistas dos custos de transação na avaliação do desempenho geral da estratégia e especificamente com relação às reversões no final do mês. A estratégia assumiu a disponibilidade de VXX e SPY para curto, o que ocasionalmente pode ser um problema. Não é um problema tão grande se você está mantendo uma posição curta de longo prazo, mas virar a posição em torno de algumas ais no final do mês pode ser problemático, de tempos em tempos. Além disso, devemos levar em conta os custos de financiamento de empréstimos de ações, que chegam a cerca de 2,9% e 0,42% ao ano para VXX e SPY, respectivamente. Essas taxas podem variar com as condições de mercado e disponibilidade de estoque, é claro. É altamente provável que outros ETFs / ETNs possam ser adicionados de forma lucrativa ao mix a fim de reduzir ainda mais a volatilidade da estratégia e melhorar os retornos ajustados ao risco. Os candidatos prováveis poderiam incluir, por exemplo, o ETF Direxion Daily 20+ Yr Trsy Bull 3X (NYSEArca: TMF). Já mencionamos a importante questão do rebalanceamento de portfólio. Há um argumento para reequilibrar com mais frequência para aproveitar os dados mais recentes do mercado; por outro lado, mudanças muito frequentes na composição da carteira podem minar a robustez da carteira, aumentar a volatilidade e incorrer em custos de transação mais altos. A questão de com que freqüência reequilibrar o portfólio é importante e requer mais testes para determinar a frequência ótima de rebalanceamento.
Conclusão.
Descrevemos o processo de construção de uma estratégia de carry de volatilidade com base no valor relativo do VXX ETN versus o contrato de vencimento em futuros VIX. Ao combinar uma carteira composta por posições curtas em VXX e SPY com uma posição longa em futuros VIX, o investidor pode, em princípio, obter retornos ajustados ao risco correspondentes a uma relação de informação de cerca de 1,6 ou mais. Acredita-se que outras melhorias no desempenho do portfólio possam ser alcançadas pela adição de outros ETFs ao mix do portfólio.
Artigos relacionados.
A história de uma estratégia de HFT.
Como à prova de balas seu portfólio.
Estratégias de Escalpelamento de Alta Freqüência.
1 comentário. Deixa novo.
Desenvolvendo uma estratégia de transporte de volatilidade [Jonathan Kinlay] Para começar, começamos revisando uma característica bem conhecida do iPath S & P 500 VIX ST Futures ETN (NYSEArca: VXX). Em comum com outros ETF / ETNs de volatilidade longa, o VXX tem uma tendência a diminuir em valor devido à forma inclinada para cima da curva de volatilidade para a frente. O gráfico abaixo, que ilustra a queda no valor do VXX, juntamente com o contrato VIX de futuros do mês anterior, [& # 8230;]
Modelando Volatilidade e Correlação.
Em um post anterior eu mencionei o VVIX / VIX Ratio, que é medido como a razão entre o índice CBOE VVIX e o índice VIX. O primeiro mede a volatilidade do VIX ou a volatilidade da volatilidade.
Um artigo de acompanhamento no ZeroHedge logo mostrou que a relação VVIX / VIX atingiu níveis recordes, o que levou o analista do Goldman Sachs, Ian Wright, a comentar que isso poderia sinalizar o fim do atual regime de baixa volatilidade:
Um leitor ligado apontou que a volatilidade das ações individuais era atualmente bastante alta e, ao vender a volatilidade do índice, está-se efetivamente vendendo correlações de ações, que agora atingiram níveis historicamente baixos. Eu concordei:
O que está impulsionando o regime de baixo volume é o nível excepcionalmente baixo de correlações transversais. E, à medida que as correlações se estreitam, o índice vol aumenta. Pior, provavelmente veremos um loop de feedback & # 8211; vol superior levando a maiores correlações, acelerando ainda mais o aumento no índice vol. Então, há uma segunda ordem, efeito Gamma acontecendo. Vemos que são os níveis muito altos do índice VVIX, que dispararam para 130 na semana passada. A maior alta de todos os tempos no VVIX antes de agosto de 2015 foi de cerca de 120. A alta do intra-dia em agosto de 2015 chegou a 225. Suponho que ele retornará lá em algum momento, possivelmente este ano.
Como parece haver algum interesse no assunto, decidi acrescentar mais um post no blog, examinando um pouco mais a relação entre volatilidade e correlação. Para obter alguma informação adicional, vamos fazer uso dos índices de correlação implícitos do CBOE. O site da CBOE explica:
Utilizando os preços das opções SPX, juntamente com os preços das opções das 50 maiores ações do S & P 500 Index, os Índices de Correlação Implícita C & P 500 oferecem uma percepção do custo relativo das opções da SPX em relação ao preço das opções individuais ações que compõem o S & P 500.
CBOE calcula e divulga dois índices vinculados a dois vencimentos diferentes, geralmente um ano e dois anos fora. Os valores do índice são publicados a cada 15 segundos ao longo do dia de negociação. Ambas são medidas da correlação média esperada dos retornos de preço dos componentes do Índice S & P 500, implícita nos preços das opções da SPX e nos preços das opções de ações individuais nos 50 maiores componentes da SPX.
Negociação de Dispersão.
Uma aplicação é a negociação de dispersão, que o site CBOE faz um bom trabalho de resumir:
Os CBOE S & P 500 Indexes de Correlação Implícita podem ser usados para fornecer sinais de negociação para uma estratégia conhecida como negociação de dispersão (ou correlação) de volatilidade. Por exemplo, uma longa negociação de dispersão de volatilidade é caracterizada pela venda de opções de índice no dinheiro e a compra de dinheiro dentro de opções em componentes de índice. Uma interpretação dessa estratégia é que, quando a correlação implícita é alta, os prêmios de opções de índices são ricos em relação às opções de ações individuais. Portanto, pode ser lucrativo vender as opções de índices ricos e comprar opções de ações relativamente baratas.
O Índice VIX e os Índices de Correlação Implícita.
Mais uma vez, vale a pena citar o site da CBOE:
Os CBOE S & P 500 Indexes de Correlação Implícita medem as mudanças no prêmio relativo entre opções de índice e opções de ações individuais. O nível de volatilidade de uma única ação é impulsionado por fatores diferentes do que impulsiona a volatilidade de um índice (que é uma cesta de ações). A volatilidade implícita de uma opção de ações individuais reflete simplesmente a expectativa do mercado da volatilidade futura dos retornos de preço dessa ação. Da mesma forma, a volatilidade implícita de uma opção de índice reflete a expectativa do mercado da volatilidade futura dos retornos de preço desse índice. No entanto, a volatilidade do índice é impulsionada por uma combinação de dois fatores: as volatilidades individuais dos componentes do índice e a correlação dos retornos dos preços dos componentes do índice.
Vamos analisar isso analiticamente. Primeiro baixamos e plotamos o diário para os Índices VIX e Correlação do site CBOE, do qual é evidente que todas as três séries são altamente correlacionadas:
Uma inspeção revela correlações significativas entre o índice VIX e os dois índices de correlação implícitos, que são, eles próprios, altamente correlacionados. O S & amp; P 500 Index é, evidentemente, correlacionado negativamente com todos os três índices:
Modelagem de Correlação de Volatilidade.
A superfície de resposta que descreve a relação entre o índice VIX e os dois índices de correlação implícitos é localmente muito irregular, mas a inclinação da superfície é geralmente positiva, como seria de esperar, uma vez que o nível de VIX se correlaciona positivamente com o das duas correlações. índices.
A abordagem mais direta é usar uma especificação de regressão linear simples para modelar o nível VIX como uma função dos dois índices de correlação. Criamos um objeto VIX Model Surface usando essa especificação com a função Mathematica Predict: O modelo linear faz um bom trabalho ao capturar o gradiente positivo da superfície de resposta e, na verdade, tem uma quantidade considerável de poder explicativo, representando um pouco menos metade da variação no nível do índice VIX:
No entanto, existem limitações. Para começar, a suposição de independência entre as variáveis explicativas, os índices de correlação, claramente não se sustenta. Em casos como este, em que as variáveis explicativas são multicolineares, não podemos fazer inferências sobre o poder explicativo de regressores individuais, embora o modelo como um todo possa ser altamente estatisticamente significativo, como aqui.
Em segundo lugar, um modelo de regressão linear não vai capturar não-linearidades na relação de volatilidade-correlação que são evidentes no gráfico de superfície. Isso é confirmado por um gráfico de comparação, que mostra que o modelo de regressão subestima o nível VIX para os valores baixo e alto do índice:
Podemos alcançar um resultado melhor usando um algoritmo de aprendizado de máquina, como o vizinho mais próximo, que é capaz de explicar as não linearidades na superfície de resposta:
O gráfico de comparação mostra uma correspondência muito mais próxima entre os valores reais e previstos do índice VIX, embora haja evidências de alguma heterocedasticidade remanescente nos resíduos do modelo:
Conclusão.
Uma maneira útil de pensar sobre a volatilidade do índice é como um processo bidimensional, com a volatilidade da série temporal medida em uma dimensão e a dispersão (volatilidade transversal, o inverso da correlação) medida na segunda dimensão. Os dois fatores estão correlacionados e, como mostramos aqui, interagem de maneira complicada e não linear.
Os baixos níveis de volatilidade do índice que temos visto nos últimos meses resultam não de baixos níveis de volatilidade nos estoques de componentes, mas nos níveis historicamente baixos de correlação (altos níveis de dispersão) nos processos de retornos de ações subjacentes. À medida que as correlações começam a reverter para as médias históricas, o impacto será sentido em um aumento na volatilidade do índice, agravado pela interação não linear entre os dois fatores.
Intraday Stock Mean Reversão Negociação Backtest em Python.
Intraday Stock Mean Reversão Negociação Backtest em Python.
Depois de concluir a série sobre a criação de uma estratégia de reversão à média entre dias, achei que seria uma boa ideia visitar outra estratégia de reversão à média, mas uma que funcione em uma escala intra-dia. Ou seja, estaremos procurando a reversão à média para ocorrer dentro de um dia de negociação.
Os preços das ações tendem a seguir caminhadas aleatórias geométricas, como somos frequentemente lembrados por inúmeros estudiosos financeiros; mas isso só é verdade se testarmos a série de preços para a reversão à média estritamente em intervalos regulares, como o uso do preço de fechamento diário. Nosso trabalho é encontrar condições especiais onde a reversão média ocorre com regularidade. Como a estratégia a seguir irá mostrar, pode haver, de fato, uma reversão média sazonal ocorrendo no período de tempo intra-diário para as ações.
As regras da estratégia são as seguintes:
1) Selecione todas as ações perto do mercado aberto, cujos retornos das baixas do dia anterior às aberturas de hoje são menores do que um desvio padrão. O desvio padrão é calculado usando os retornos close-to-close diários dos últimos 90 dias. Estas são as ações que "desabaram" e "8221".
2) Diminua a lista de ações exigindo que seus preços abertos sejam mais altos do que a média móvel de 20 dias dos preços de fechamento.
3) Liquidar as posições no fechamento do mercado.
Então, começaremos com nossas importações de módulo necessárias da seguinte maneira:
Eu vou estar executando este backtest usando o universo de ações da NYSE, que contém 3159 ações & # 8211; você pode fazer o download da lista clicando no botão de download abaixo.
Depois de ter esse arquivo armazenado em algum lugar, podemos alimentá-lo usando pandas e configurar nossa lista de ações como segue:
Como uma verificação rápida para ver se eles foram alimentados corretamente:
Ok, ótimo, agora temos nossa lista de ações que queremos usar como nosso universo de investimento & # 8221; & # 8211; podemos começar a escrever o código para o backtest real.
A lógica da nossa abordagem é a seguinte: "Vamos percorrer a lista de cotações de ações, cada vez que baixaremos os dados de preços relevantes em um DataFrame e então adicionaremos algumas colunas para nos ajudar a criar sinais de quando nossos dois Os critérios são atendidos (gap down maior que 1 90 dias de desvio padrão e um preço de abertura acima da média móvel de 20 dias).
Em seguida, usaremos esses sinais para criar nossa série de devoluções para esse estoque e, em seguida, armazenar essas informações anexando cada série de devoluções de ações a uma lista. Por fim, vamos concatenar todas as séries de retorno em um DataFrame mestre e calcular nosso retorno diário total.
Agora, esta lista de ações tem mais de 3000 ações, então espere que este código leve um pouco de tempo para rodar - Acredito que o meu levou cerca de 15-20 minutos para rodar quando eu tentei, então tente ser um pouco paciente.
Depois que o código é executado e nossa lista é preenchida com todas as séries de devolução de estratégias individuais para cada ação, temos que concatená-las em um DataFrame mestre e, em seguida, calcular o retorno geral diário da estratégia. Isso pode ser feito da seguinte forma:
Portanto, agora temos uma série de retornos que mantém os retornos da estratégia com base na negociação das ações qualificadas a cada dia, em igual peso. Se 2 ações fossem qualificadas, ponderaríamos cada ação em 50% em nosso portfólio, por exemplo.
Então, tudo o que resta fazer agora é traçar a curva de capital e calcular um Índice de Sharpe e um retorno anual.
O índice de Sharpe (excluindo o elemento livre de risco por simplicidade) pode ser calculado da seguinte forma:
e o retorno anual pode ser calculado como:
Assim, um índice de Sharpe superior a 2 e um retorno anual de cerca de 8,8% & # 8211; que não é muito pobre!
É claro, temos que lembrar que não estamos levando em conta quaisquer custos de transação, de modo que esses retornos possam ser bastante afetados em um cenário do mundo real. Além disso, essa lógica de estratégia pressupõe que podemos comprar as ações que abriram exatamente o preço de abertura, e presumimos que sempre alcançamos o preço de fechamento (liquidação) na venda no final do dia, o que obviamente não seria O caso.
Eu deixo para vocês e garotas para aprofundar mais a estratégia retorna & # 8211; você pode usar meu post anterior, onde analisei os retornos de nossa estratégia de crossover de média móvel como inspiração. Esse post pode ser encontrado aqui.
10 comentários.
Obrigado pelo post. Estamos trabalhando em uma estrutura de análise de dados de alto desempenho em python e gostaríamos de usar seus códigos como exemplos. Somos autorizados a usar o material? Existe uma licença para este material?
Oi Ehsan & # 8211; Obrigado pelas palavras amáveis. Eu escrevo este blog apenas para minha própria diversão, então nenhuma licença é necessária para reutilizar o código, sinta-se à vontade para fazê-lo. Tudo o que peço é que, se possível, você faça referência ao meu blog como fonte para que eu possa atrair mais tráfego. Isso é até você embora 😉
Eu ficaria muito interessado em ver o resultado de / ouvir mais sobre o seu projeto, soa muito interessante!
Claro, vou adicionar uma referência a este post. Aqui está o link para o exemplo no projeto: github / IntelLabs / hpat / blob / master / examples / intraday_mean. py.
O HPAT irá compilar este código (com mudanças mínimas) automaticamente para executar eficientemente em clusters.
Parece ótimo! Obrigado pela menção também "muito apreciado!
Oi S666 Eu estava usando seus códigos para testar.
Eu notei algo porque isso está tomando Open para fechar a mudança, a linha abaixo deve adicionar um turno (1)?
Porque se você não vai estar recebendo hoje preço próximo (Mas estamos comprando na Open e não podemos saber hoje os preços próximos)
* Eu estou puxando dados do meu banco de dados, mas você fonte de dados pode ter contabilizado isso já se assim pls me ignorar obrigado.
Oi Jerrickng & # 8211; bom ponto, eu acredito que você está correto. Se estivermos comprando pelo preço de abertura com base no preço de abertura maior do que a média móvel, e estivermos usando preços de fechamento para calcular a média móvel, estamos, na verdade, sofrendo de viés de antecipação, pois em tempo real não saberíamos preço próximo a ser usado no cálculo da média móvel.
Vou mudar o código assim que tiver um momento.
bom blog !! & # 8230; O melhor que encontrei sobre o uso do Python no Financeiro.
O único modelo que se aproxima dos mercados financeiros é o Movimento Browniano Geométrico (GBM). A distância percorrida sob GBM é proporcional à raiz quadrada do intervalo de tempo. Positivo & amp; choques negativos se cancelam ao longo do tempo em uma carteira diversificada de ações. Em uma base líquida, raramente se pode vencer os mercados. De acordo com a fórmula da opção para um dado estoque S, se a opção de um mês custa 1 dólar, a opção de 4 meses no mesmo estoque custa apenas 2 dólares, porque a raiz quadrada de 4 é dois. A maneira indireta de afirmar isso é que, para um determinado período de tempo, as chances de esse estoque percorrer uma distância de 1 d são 4 vezes comparadas à distância de viagem de 2d. Fórmulas de correção podem não ser 100% perfeitas, mas são muito boas porque trilhões de dólares de derivativos são negociados todos os dias com base em fórmulas de opção & amp; os criadores de mercado não vão à falência - quer façam mercado em puts ou calls & amp; fique fora da especulação.
A minha pergunta é se a estratégia a seguir é possivelmente sólida na negociação usando negociação informatizada por um gestor de fundos & # 8211;
Computador coloca na seguinte ordem em estoque "S".No mesmo bilhete ter lucro & amp; as ordens de stop loss estão sempre do mesmo lado do preço de mercado atual naquele dia & amp; não em lados opostos do preço atual da ação.
1) Abaixo do preço atual “P”, faça um pedido para comprar aquela ação em “P menos 1d” com take profit em “P menos 1/2 d” & amp; um stop loss em "P menos 2d".Esta ordem é inserida todos os dias com base no preço atual naquele dia até que seja executada, seja no lucro ou com uma perda & # 8211; & amp; mesmo processo é repetido em carteira diversificada de estoques todos por computador sem intervenção humana. Ordens semelhantes são colocadas no lado positivo para vender a descoberto todos os dias com base nos preços atuais naquele dia, usando os mesmos princípios pelo computador. Nenhuma aposta direcional é feita.
2) Os preços das ações passam pelo ruído todos os dias na base intradiária. As chances de que o pedido de compra seja preenchido à distância de “P menos 1D” é 4 vezes comparado a bater o stop loss em “P menos 2D” dentro do mesmo período de tempo na mesma ordem de entrada. Com o ruído intradiário, a reversão para a média, a ordem de lucro, será atingida mais vezes do que a perda de parada na mesma ordem de entrada.
3) Em GBM, de 4 episódios, 3 vezes haveria lucro ganho de “1 / 2d” cada & amp; uma vez haveria perda de "1d" com lucro líquido de "½ d" nessas 4 execuções sobre & amp; mais uma vez tanto no lado negativo, bem como no lado positivo. Os pedidos não preenchidos são cancelados todos os dias quando a bolsa de valores é fechada. Novos pedidos são inseridos todas as manhãs com base no PREÇO CORRENTE do estoque naquele dia. A distância d é ajustada dependendo da volatilidade histórica do estoque, de modo que números decentes de ordens sejam executados - se muitas ordens forem executadas, o valor de "d" é aumentado para retardar execuções. Com um número decente de leis de execução de médias Aplique. O risco é controlado controlando quantas ordens de estoque são colocadas no lado ascendente & amp; desvantagem. Nenhuma aposta direcional a qualquer momento - todos os pedidos são não direcionais, automáticos & amp; gerado por computador com base na volatilidade atual. O risco também é controlado pela negociação de menor quantidade de ativos do fundo em relação ao total de ativos.
Com baixos custos transacionais, o gestor do fundo ganharia dinheiro.
Eu agradeceria muito sua contribuição para essa estratégia.
Meia vida de reversão média & # 8211; Fórmula de Ornstein-Uhlenbeck para o processo de reversão da média.
Ernie chan propõe um método para calcular a velocidade de reversão à média. Ele propõe ajustar a fórmula do ADF (aumento do dickey mais completo, mais rigorosa) do tempo discreto para a forma diferencial. Isto toma forma da Fórmula Ornstein-Uhlenbeck para o processo de reversão da média. Processo Ornstein Uhlenbeck & # 8211; Wikipédia.
Onde dε é algum ruído gaussiano. Chan passa a mencionar que usando a fórmula do ADF discreta abaixo:
e realizar uma regressão linear de Δy (t) contra y (t - 1) fornece λ que é então usado na primeira equação. No entanto, a vantagem de escrever a fórmula na forma diferencial é permitir uma solução analítica para o valor esperado de y (t).
Séries de reversão médias exibem λ negativo. Por outro lado, λ positivo significa que a série não volta à média.
Quando λ é negativo, o valor do preço decai exponencialmente para o valor −μ / λ com a meia-vida do decaimento igual a −log (2) / λ. Veja referências.
Podemos realizar a regressão de yt-1 e (yt-1-yt) com o código R abaixo na série de preços SPY. Para este teste, usaremos um período retrospectivo de 100 dias versus toda a série de preços (início de 1993 até o presente). Se usássemos todos os dados, estaríamos incluindo o tempo necessário para se recuperar dos mercados em baixa. Para fins de negociação, desejamos usar uma amostra menor de dados para produzir um teste estatístico mais significativo.
1. Lag SPY próximo por -1 dia.
2. Subtrair hoje perto & # 8211; Ontem feche.
3. Subtrair (hoje feche & # 8211; ontem feche) & # 8211; significa (hoje feche & # 8211; ontem perto)
4. Realize a regressão linear de (hoje perto de # 8211; ontem)
(hoje fecham & # 8211; ontem fecham) & # 8211; significa (hoje feche & # 8211; ontem perto)
5. Na saída de regressão execute - log (2) / λ.
Observando a saída da regressão acima, vemos que a inclinação é negativa e é um processo de reverberação da média. Vemos do resumo (resultados) λ é -0,06165 e quando executamos - log (2) / λ obtemos uma meia-vida de reversão média de 11,24267 dias.
11,24267 dias é a meia-vida da reversão à média, o que significa que antecipamos a série para voltar totalmente à média por 2 * a meia-vida ou 22,48534 dias. No entanto, para negociar a reversão da média de forma lucrativa, não precisamos sair diretamente na média de cada vez. Essencialmente, se um negócio se estender por 22 dias, podemos esperar uma mudança de regime de curto prazo ou permanente. Pode-se isolar contra tais derrotas, definindo uma "parada de tempo".
A meia-vida de 11,24267 dias obtida é curta o suficiente para um horizonte de negociação inter-diário. Se obtivermos uma meia-vida mais longa, poderemos esperar muito tempo para que a série retorne à média. Uma vez que determinamos que a série é a reversão da média, podemos negociar lucrativamente esta série com um modelo linear simples, usando um período retrospectivo igual à meia-vida. Em um post anterior, exploramos um modelo linear simples do zscore: flare9xblog. wordpress / 2017/09/24 / simple-linear-strategy-for-sp500 /
O período de lookback de 11 dias foi obtido usando uma abordagem de força bruta & # 8216; & # 8217; (talvez sorte). Um período ideal de 11 dias produziu o melhor resultado para o SPY.
Post for brute forçado, notou-se durante a otimização da estratégia acima que ajustando a meia-vida de 11 dias para qualquer número acima ou abaixo, nós experimentamos uma diminuição no desempenho.
Ilustramos o efeito de mover o período de retrospectiva mais curto e mais longo que a meia-vida obtida. Por simplicidade, usaremos o total de retornos cumulativos para comparação:
Vemos que uma retrospectiva de 11 dias produziu os maiores retornos cumulativos acumulados.
Ernie Chan continua mencionando que "porque se preocupar com testes estatísticos". A resposta está no fato de que regras comerciais específicas só acionam quando suas condições são atendidas e, portanto, tendem a pular os dados. O teste estatístico inclui dados que um modelo pode pular e, assim, produzir resultados com maior significância estatística.
Além disso, uma vez que confirmamos que uma série é a reversão, podemos ter a certeza de encontrar uma estratégia comercial lucrativa e não a estratégia que acabamos de testar.
Negociação Algorítmica: Estratégias Vencedoras e Sua Justificativa - 28 de maio de 2013, por Ernie Chan.
Compartilhar isso:
Relacionado
Autor: Andrew Bannerman.
Inspetor de integridade. A análise quantitativa é um tempo passado favorito. Ver todas as mensagens de Andrew Bannerman.
6 pensamentos sobre & ldquo; Meia vida de reversão média & # 8211; Fórmula de Ornstein-Uhlenbeck para o processo de reversão da média
Eu acho que seus passos não são consistentes com o código. Me corrija se eu não sou.
# A seguinte linha de código está fazendo:
# ontem e # 8217; close & # 8211; média de (YESTERDAYS & # 8217; CLOSE)
# MAS NÃO, Subtrair a média das diferenças defasadas?
prev. y.mean & lt; - y. lag & # 8211; mean (y. lag) # Subtraia ontens perto da média das diferenças defasadas.
Sua correta, minha descrição não corresponde a esta versão de calcular a meia-vida de reversão à média. Esta versão regride y (t) - y (t - 1)
vs y (t - 1) & # 8211; mean (y - t - 1). Vou atualizar para adicionar o método de Ernie Chans quando tiver uma chance de seu livro, negociação algorítmica, estratégias vencedoras e suas razões. Em suma, Ernies se parece com isso:
Simplesmente registe y (t) - y (t - 1) vs y (t - 1) ou em inglês hoje perto & # 8211; ontem fechar vs ontimos fechar.
ylag = lag (y, 1) == y (t - 1)
deltaY = y-ylag == y (t) - y (t - 1)
regressão = y (t) - y (t - 1) (y, variável dependente) ey (t - 1) (x, variável independente)
Vou começar a atualizar este post quando tiver uma chance. Obrigado pela leitura!
Pode ser óbvio, mas gostaria de confirmar:
& # 8220; Esta versão regride y (t) - y (t - 1) vs y (t - 1) - média (y (t - 1) & # 8221;
y é y (t - 1) - média (y (t - 1)
Isso está correto? Felicidades.
Ótima leitura. Muito útil!
Feliz Ano Novo! A função R lm () é y, x. y sendo variável dependente e x independente. lm. fit () é x, y!
x é y (t - 1) - média (y (t - 1)
Eu tive que checar! Ernie Matlab, a função ols é y, x. Eu pensei que era como Pythons, x, y. O acima está correto e meu código R também está correto para este método.
Comments
Post a Comment