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 20 de fevereiro de 2014.
Neste artigo, vamos considerar nossa primeira estratégia de negociação intradiária. Será usando uma idéia comercial clássica, a de "pares comerciais". Neste caso, vamos fazer uso de dois Exchange Traded Funds (ETFs), SPY e IWM, que são negociados na Bolsa de Valores de Nova York (NYSE) e tentam representar os índices do mercado de ações dos EUA, os S & P500 e Russell 2000, respectivamente.
A estratégia cria, em termos gerais, uma "propagação" entre o par de ETFs saudade de um e curto um montante do outro. A proporção de longo a curto pode ser definida de muitas maneiras, como a utilização de técnicas de coesão estatística de séries temporais. Nesse cenário, vamos calcular uma relação de cobertura entre SPY e IWM através de uma regressão linear rotativa. Isso nos permitirá criar uma "propagação" entre o SPY eo IWM, que é normalizado para um escore z. Os sinais de negociação serão gerados quando o escore z exceder certos limiares sob a crença de que a propagação reverterá para a média.
O raciocínio para a estratégia é que a SPY e a IWM caracterizam aproximadamente a mesma situação, a da economia de um grupo de corporações de grandes capitais e de capitais pequenos. A premissa é que, se alguém adotar a propagação dos preços, isso deve ser reverso, já que os eventos "locais" (no tempo) podem afetar separadamente os índices S & P500 ou Russell 2000 (como small-cap / large - diferenças de limite, datas de reequilíbrio ou negociações de bloco), a série de preços de longo prazo dos dois provavelmente será cointegrada.
A estratégia.
A estratégia é realizada nas seguintes etapas:
Dados - barras de 1 minuto de SPY e IWM são obtidas de abril de 2007 até fevereiro de 2014. Processamento - Os dados estão corretamente alinhados e as barras ausentes são mutuamente descartadas. Spread - A relação de cobertura entre os dois ETFs é calculada tomando uma regressão linear rotativa. Isso é definido como o coeficiente de regressão $ \ beta $ usando uma janela de lookback que se desloca para a frente em 1 barra e recalcula os coeficientes de regressão. Assim, a taxa de cobertura $ \ beta_i $, para o bar $ b_i $ é calculada entre os pontos $ b_ $ a $ b_ $ para um lookback de $ k $ bars. Z-Score - O escore padrão do spread é calculado da maneira usual. Isso significa subtrair a média (amostra) da propagação e dividir pelo desvio padrão (amostra) da propagação. O raciocínio para isso é tornar os parâmetros de limiar mais simples para interpet, uma vez que o z-score é uma quantidade sem dimensão. Eu deliberadamente introduzi uma polarização de lookahead nos cálculos, a fim de mostrar quão sutil pode ser. Tente e cuide disso! Operações - Os sinais longos são gerados quando o escore z negativo cai abaixo de um limite pré-determinado (ou pós-otimizado), enquanto os sinais curtos são o inverso disso. Os sinais de saída são gerados quando o escore z absoluto cai abaixo de um limite adicional. Para essa estratégia, eu (um pouco arbitrariamente) escolhei um limite de entrada absoluto de $ | z | = 2 $ e um limite de saída de $ | z | = 1 $. Supondo um comportamento de reversão médio na propagação, espero que capture esse relacionamento e ofereça um desempenho positivo.
Talvez a melhor maneira de entender a estratégia em profundidade é implementá-la. A seção a seguir descreve um código Python completo (arquivo único) para implementar esta estratégia de reversão média. Eu comande o código de forma liberal para ajudar a entender.
Implementação do Python.
Tal como acontece com todos os tutoriais Python / pandas, é necessário configurar um ambiente de pesquisa Python como descrito neste tutorial. Uma vez configurada, a primeira tarefa é importar as bibliotecas Python necessárias. Para este backtest, matplotlib e pandas são obrigatórios.
As versões específicas da biblioteca que estou usando são as seguintes:
Vamos continuar e importar os bibliotecários:
A seguinte função create_pairs_dataframe importa dois arquivos CSV contendo as barras intradias de dois símbolos. No nosso caso, isso será SPY e IWM. Em seguida, ele cria um conjunto de quadros de dados separados, que usa os índices de ambos os arquivos originais. Como os seus timestamps são susceptíveis de serem diferentes devido a negociações e erros perdidos, isso garante que teremos dados correspondentes. Este é um dos principais benefícios de usar uma biblioteca de análise de dados como pandas. O código "boilerplate" é tratado de maneira muito eficiente.
O próximo passo é realizar a regressão linear de rolamento entre SPY e IWM. Nessa instância, IWM é o preditor ('x') e SPY é a resposta ('y'). Define uma janela de lookback padrão de 100 barras. Conforme discutido acima, este é um parâmetro da estratégia. Para que a estratégia seja considerada robusta, idealmente queremos ver um perfil de retorno (ou outra medida de desempenho) como uma função convexa do período de lookback. Assim, em uma fase posterior do código, realizaremos uma análise de sensibilidade ao variar o período de lookback em um intervalo.
Uma vez que o coeficiente de rolamento beta é calculado no modelo de regressão linear para SPY-IWM, nós o adicionamos aos pares DataFrame e soltamos as linhas vazias. Isso constitui o primeiro conjunto de barras igual ao tamanho do lookback como medida de corte. Em seguida, criamos o spread dos dois ETFs como uma unidade de SPY e $ - \ beta_i $ unidades de IWM. Claramente, esta não é uma situação realista, pois estamos tomando quantidades fracionárias de IWM, o que não é possível em uma implementação real.
Finalmente, criamos a pontuação z da propagação, que é calculada subtraindo a média da propagação e normalizando pelo desvio padrão da propagação. Note-se que há um viés bastante parecido com a aparência aqui. Eu deliberadamente deixei isso no código, pois queria enfatizar o quão fácil é cometer um erro na pesquisa. A média eo desvio padrão são calculados para toda a série de tempo de propagação. Se isso for para refletir a verdadeira precisão histórica, essa informação não estaria disponível, pois isso implicitamente faz uso de informações futuras. Assim, devemos usar um meio de rolamento e stdev para calcular o escore z.
Em create_long_short_market_signals, os sinais de negociação são criados. Estes são calculados ao longo do spread quando o escore z excede negativamente um escore z negativo e diminui o spread quando o escore z excede positivamente um escore z positivo. O sinal de saída é dado quando o valor absoluto do escore z é menor ou igual a outro (menor em magnitude).
Para alcançar essa situação, é necessário saber, para cada barra, se a estratégia está "dentro" ou "fora" do mercado. long_market e short_market são duas variáveis definidas para acompanhar as posições de mercado longo e curto. Infelizmente, isso é muito mais simples de codificar de forma iterativa em oposição a uma abordagem vetorializada e, portanto, é lento para calcular. Apesar dos bares de 1 minuto que exigem.
700.000 pontos de dados por arquivo CSV ainda é relativamente rápido para calcular em minha máquina de desktop mais antiga!
Para iterar sobre um pandas DataFrame (que é verdade que NÃO é uma operação comum) é necessário usar o método iterrows, que fornece um gerador sobre o qual iterar:
Nesta fase, atualizamos pares para conter os sinais longos / curtos reais, o que nos permite determinar se precisamos estar no mercado. Agora, precisamos criar um portfólio para acompanhar o valor de mercado das posições. A primeira tarefa é criar uma coluna de posições que combine os sinais longos e curtos. Isso conterá uma lista de elementos de $ (1,0, -1) $, com $ 1 $ representando uma posição longa / de mercado, US $ 0 $ que não representa nenhuma posição (deve ser encerrado) e $ -1 $ representando uma posição de curto / mercado . As colunas sym1 e sym2 representam os valores de mercado das posições SPY e IWM no final de cada barra.
Uma vez que os valores de mercado da ETF foram criados, os somamos para produzir um valor de mercado total no final de cada barra. Isso é transformado em um fluxo de devoluções pelo método pct_change para esse objeto da série. Linhas subsequentes de código eliminam as entradas incorretas (elementos NaN e inf) e, finalmente, calculam a curva de capital integral.
A função __main__ junta tudo. Os arquivos CSV intradiários estão localizados no caminho do datadir. Certifique-se de modificar o código abaixo para apontar para o seu diretório particular.
Para determinar quão sensível é a estratégia para o período de lookback, é necessário calcular uma métrica de desempenho para uma variedade de lookbacks. Eu escolhi a porcentagem total final de retorno do portfólio como a medida de desempenho e a faixa de lookback em $ [50,200] $ com incrementos de 10. Você pode ver no código a seguir que as funções anteriores estão envolvidas em um loop para este intervalo , com outros limiares mantidos fixos. A tarefa final é usar matplotlib para criar um gráfico de linha de lookbacks vs returns:
O gráfico do período de lookback versus retornos agora pode ser visto. Observe que existe um máximo "global" em torno de um lookback igual a 110 barras. Se tivéssemos visto uma situação em que o lookback fosse independente dos retornos, isso teria sido motivo de preocupação:
Análise de sensibilidade do período de lookback de regressão linear SPY-IWM.
Nenhum artigo de backtesting seria completo sem uma curva de equidade inclinada para cima! Assim, se você deseja traçar uma curva dos retornos cumulados versus tempo, você pode usar o seguinte código. Ele irá traçar o portfólio final gerado a partir do estudo de parâmetros de lookback. Assim, será necessário escolher o lookback dependendo do gráfico que deseja visualizar. O gráfico também traça os retornos de SPY no mesmo período para facilitar a comparação:
O gráfico de curva de equidade a seguir é para um período de lookback de 100 dias:
Análise de sensibilidade do período de lookback de regressão linear SPY-IWM.
Note-se que a redução da SPY é significativa em 2009 durante o período da crise financeira. A estratégia também teve um período volátil nesta fase. Observe também que o desempenho deteriorou-se um pouco no último ano devido à natureza fortemente tendencial da SPY neste período, o que reflete o índice S & P500.
Note que ainda temos que levar em consideração o viés de lookahead ao calcular o escore z do spread. Além disso, todos esses cálculos foram realizados sem custos de transação. Esta estratégia certamente funcionaria muito mal quando esses fatores forem levados em consideração. As taxas, a propagação / desistência de lance / pedido são todas atualmente desaparecidas. Além disso, a estratégia é negociada em unidades fracionárias de ETFs, o que também é muito pouco realista.
Em artigos posteriores, criaremos um backtester muito mais sofisticado baseado em eventos que levará esses fatores em consideração e nos dará uma confiança significativa na nossa curva de equidade e métricas de desempenho.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
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 21 de outubro de 2013.
Gostaria de agradecer ao Dr. Tom Starke pela inspiração para esta série de artigos. O código abaixo é uma modificação do que costumava ser encontrado em seu site leinenbock, que mais tarde se tornou drtomstarke.
Até agora no QuantStart discutimos a identificação da estratégia de negociação algorítmica, backtesting bem-sucedido, bancos de dados mestre de valores mobiliários e como construir um ambiente de pesquisa de software. Agora é hora de voltar nossa atenção para formar estratégias de negociação reais e como implementá-las.
Um dos principais conceitos de negociação na caixa de ferramentas quantitativa é o da reversão média. Este processo refere-se a uma série de tempo que exibe uma tendência a reverter para seu valor médio histórico. Matematicamente, uma série temporal (contínua) é referida como um processo de Ornstein-Uhlenbeck. Isso contrasta com uma caminhada aleatória (movimento browniano), que não tem "memória" de onde foi em cada instância particular. A propriedade de reversão média de uma série temporal pode ser explorada para produzir estratégias comerciais rentáveis.
Neste artigo, vamos descrever os testes estatísticos necessários para identificar a reversão média. Em particular, estudaremos o conceito de estacionaria e como testar para isso.
Testando Reversão Média.
Uma série de tempo de retorno de média contínua pode ser representada por uma equação diferencial estocástica de Ornstein-Uhlenbeck:
\ begin d x_t = \ theta (\ mu - x_t) dt + \ sigma dW_t \ end.
Onde $ \ theta $ é a taxa de reversão para a média, $ \ mu $ é o valor médio do processo, $ \ sigma $ é a variância do processo e $ W_t $ é um Wiener Process ou Brownian Motion.
Em uma configuração discreta, a equação afirma que a mudança da série de preços no próximo período de tempo é proporcional à diferença entre o preço médio e o preço atual, com a adição de ruído gaussiano.
Esta propriedade motiva o teste Augmented Dickey-Fuller, que descreveremos abaixo.
Teste Augusto Dickey-Fuller (ADF).
Matematicamente, o ADF baseia-se na ideia de testar a presença de uma raiz unitária em uma amostra de séries temporais autorregressivas. Faz uso do fato de que, se uma série de preços possuir reversão média, o próximo nível de preços será proporcional ao nível de preços atual. Um modelo de atraso linear da ordem $ p $ é usado para as séries temporais:
\ begin \ Delta y_t = \ alpha + \ beta t + \ gamma y_ + \ delta_1 \ Delta y_ + \ cdots + \ delta_ \ Delta y_ + \ epsilon_t \ end.
Onde $ \ alpha $ é uma constante, $ \ beta $ representa o coeficiente de uma tendência temporal e $ \ Delta y_t = y (t) - y (t-1) $. O papel do teste de hipóteses do ADF é considerar a hipótese nula de que $ \ gamma = 0 $, o que indicaria (com $ \ alpha = \ beta = 0 $) que o processo é uma caminhada aleatória e, portanto, não significa reverter.
Se a hipótese de que $ \ gamma = 0 $ possa ser rejeitada, o seguinte movimento da série de preços é proporcional ao preço atual e, portanto, é improvável que seja uma caminhada aleatória.
Então, como é realizado o teste ADF? A primeira tarefa é calcular a estatística de teste ($ DF_ $), que é dada pela constante de proporcionalidade da amostra $ \ hat $ dividida pelo erro padrão da constante de proporcionalidade da amostra:
Dickey e Fuller calcularam anteriormente a distribuição desta estatística de teste, o que nos permite determinar a rejeição da hipótese para qualquer valor crítico de porcentagem escolhido. A estatística de teste é um número negativo e, portanto, para ser significativo além dos valores críticos, o número deve ser mais negativo que esses valores, ou seja, menos do que os valores críticos.
Uma questão prática chave para os comerciantes é que qualquer desvio constante a longo prazo em um preço é de uma magnitude muito menor do que qualquer flutuação de curto prazo e, portanto, a derivação é freqüentemente assumida como zero ($ \ beta = 0 $) para o modelo .
Uma vez que estamos considerando um modelo de atraso de ordem $ p $, precisamos realmente definir $ p $ para um valor específico. Geralmente, é suficiente, para pesquisa comercial, estabelecer $ p = 1 $ para nos permitir rejeitar a hipótese nula.
Para calcular o teste Augmented Dickey-Fuller, podemos fazer uso das bibliotecas pandas e statsmodels. O primeiro fornece-nos um método direto de obter dados Open-High-Low-Close-Volume (OHLCV) do Yahoo Finance, enquanto o último envolve o teste ADF em uma função fácil de chamar.
Vamos realizar o teste ADF em uma série de séries de ações do Google, de 1 de janeiro de 2000 a 1º de janeiro de 2013.
Série de preços do Google de 2000-01-01 a 2013-01-01.
Aqui está o código Python para realizar o teste:
Aqui está o resultado do teste Augmented Dickey-Fuller para o Google durante o período. O primeiro valor é a estatística de teste calculada, enquanto o segundo valor é o valor p. O quarto é o número de pontos de dados na amostra. O quinto valor, o dicionário, contém os valores críticos da estatística de teste nos valores de 1, 5 e 10 por cento, respectivamente.
Uma vez que o valor calculado da estatística de teste é maior do que qualquer um dos valores críticos nos níveis de 1, 5 ou 10 por cento, não podemos rejeitar a hipótese nula de $ \ gamma = 0 $ e, portanto, é improvável que tenha encontrado um retorno médio séries temporais.
Um meio alternativo de identificar uma série de tempo de reversão média é fornecido pelo conceito de estacionaria, que agora vamos discutir.
Teste de Stationarity.
Uma série de tempo (ou processo estocástico) é definida como fortemente estacionária se a distribuição de probabilidade conjunta for invariante em traduções em tempo ou espaço. Em particular, e de importância fundamental para os comerciantes, a média e variância do processo não se alteram ao longo do tempo ou do espaço, e cada um deles não segue uma tendência.
Uma característica crítica da série de preços estacionários é que os preços dentro da série difundem do seu valor inicial a uma taxa mais lenta que a de um movimento geométrico browniano. Ao medir a taxa deste comportamento difusivo, podemos identificar a natureza das séries temporais.
Vamos agora descrever um cálculo, ou seja, o Exponente Hurst, que nos ajuda a caracterizar a estacionaridade de uma série temporal.
Hurst Exponent.
O objetivo do Hurst Exponent é fornecer-nos um valor escalar que nos ajude a identificar (dentro dos limites da estimativa estatística) se uma série é significante reverter, andar aleatoriamente ou tendências.
A idéia por trás do cálculo Hurst Exponent é que podemos usar a variância de uma série de preços de registro para avaliar a taxa de comportamento difusivo. Para um intervalo de tempo arbitrário $ \ tau $, a variação é dada por:
Uma vez que estamos comparando a taxa de difusão com a de um Movimento Browniano Geométrico, podemos usar o fato de que, em geral, $ \ tau $ nós temos que a variância é proporcional a $ \ tau $ no caso de um GBM:
\ begin \ langle | \ log (t + \ tau) - \ log (t) | ^ 2 \ rangle \ sim \ tau \ end.
A visão chave é que, se houver alguma autocorrelação (ou seja, quaisquer movimentos de preços seqüenciais possuem correlação não-zero), a relação acima não é válida. Em vez disso, ele pode ser modificado para incluir um valor expoente "$ 2H $", o que nos dá o valor Hurst Exponent $ H $:
\ begin \ langle | \ log (t + \ tau) - \ log (t) | ^ 2 \ rangle \ sim \ tau ^ \ end.
Uma série de tempo pode então ser caracterizada da seguinte maneira:
$ H & lt; 0,5 $ - A série temporal é média reverter $ H = 0,5 $ - A série temporal é um movimento geométrico browniano $ H> 0,5 $ - A série temporal está em tendência.
Além da caracterização da série temporal, o Exponente Hurst também descreve até que ponto uma série se comporta da maneira categorizada. Por exemplo, um valor de $ H $ perto de 0 é uma série de reversão altamente significativa, enquanto que por $ H $ perto de 1, a série está fortemente disponível.
Para calcular o Hurst Exponent para a série de preços do Google, conforme utilizado acima na explicação do ADF, podemos usar o seguinte código Python:
A saída do código Hurst Exponent Python é fornecida abaixo:
A partir desta saída, podemos ver que o Movimento Browniano Geométrico possui um Exponente Hurst, $ H $, que é quase exatamente 0.5. A série de reversão média tem $ H $ quase igual a zero, enquanto a série de tendências tem $ H $ perto de 1.
Curiosamente, o Google tem $ H $ também quase igual a 0,5 indicando que é extremamente próximo a uma caminhada aleatória geométrica (pelo menos para o período de amostra que estamos fazendo uso!).
Embora tenhamos agora um meio de caracterizar a natureza de uma série de preços, ainda não discutimos o quão estatisticamente significativo é esse valor de $ H $. Precisamos ser capazes de determinar se podemos rejeitar a hipótese nula de que $ H = 0,5 $ para determinar o comportamento de reversão ou tendência.
Em artigos subsequentes, descreveremos como calcular se $ H $ é estatisticamente significativo. Além disso, consideraremos o conceito de cointegração, o que nos permitirá criar nossa própria série de tempo de reversão média a partir de múltiplas séries de preços diferentes. Finalmente, vamos juntar essas técnicas estatísticas para formar uma estratégia básica de negociação de reversão básica.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
MEU ESTRATÉGIAS DE REVERSÃO EM PYTHON (Curso Online) Pelo Dr. Ernest P. Chan.
Oi pessoal, encontrei esse curso do EP Chan sobre estratégias de reversão médias. Parece bastante bom para o preço, vale a pena conferir. Eu usei o código de cupom MRS35 e consegui um desconto de + 35%. Não tenho certeza se ainda está ativo, veja se isso funciona para você. Ligação.
Este é um curso de certificação da Quantinsti - Instituto de Pesquisa e Treinamento de Algorítmica e pioneira da Ásia, focado na preparação de profissionais de mercado financeiro para o campo contemporâneo de Negociação Algorítmica e de Alta Freqüência. Esta é a primeira vez que lançamos o curso em colaboração com Ernest Chan, que é o diretor-gerente da QTS Capital Management, na Quantra. Este curso irá discutir quatro tipos de estratégias de negociação de reversão média. Primeiro, vamos discutir a estacionaria para uma única série de preços e criar uma estratégia de negociação de reversão média se a série de preços estiver estacionada. Em segundo lugar, aprenderemos sobre um portfólio de instrumentos que são cointegrados e criamos uma estratégia de reversão média em pares e trigêmeos. A terceira estratégia que discutiremos neste curso é para uma cesta de ações, que é a estratégia Index Arbitrage, que também é uma extensão de pares e trigêmeos. A estratégia final que aprenderemos é Long-Short Portfolio, que se baseia na reversão da média transversal. Juntamente com essas estratégias, também discutiremos diferentes técnicas estatísticas, nomeadamente o teste Augmented Dickey-Fuller (ADF), teste CADF, Half-life, teste Johansen, etc., para detectar estacionança e cointegração de um portfólio de instrumentos. Além dos conceitos teóricos, é fornecido um código Python para download para todas as quatro estratégias, juntamente com muita codificação prática em exercícios de codificação interativa.
Quem pode se beneficiar deste curso?
O objetivo geral deste curso é fornecer um guia prático para significar reverter as estratégias de negociação que podem ser facilmente implementadas pelos comerciantes de varejo e institucionais. Este curso pode ser usado por comerciantes, analistas, pesquisadores, profissionais de ensino e estudantes. Qualquer pessoa que queira aprender sobre as estratégias de reversão média e quer otimizar seu desempenho de estratégia é perfeitamente adequada para este curso.
Benefícios de se inscrever neste curso:
Saiba mais sobre estacionança e teste de estacionaria de uma única série de preços.
Saiba mais sobre cointegração e teste de cointegração de duas séries de preços.
Aprenda a criar estratégias de reversão significativas e compreenda os problemas práticos encontrados na negociação ao vivo.
Saiba como criar uma estratégia de arbitragem de índice e compreender as dificuldades na implementação da estratégia de arbitragem de índice.
Aprenda a criar estratégias de portfólio de longo prazo e compreenda como refinar a estratégia.
Saiba mais sobre a importância de parar a perda na implementação de estratégias de Reverting Média.
Você receberá todos os códigos de estratégia em um notebook iPython.
Você receberá seu próprio ambiente de codificação Python onde você pode praticar os códigos.
Oportunidade de ser certificada pela QuantInsti.
Inscreva-se uma vez e obtenha acesso vitalício ao curso!
Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.
Python Mean Reversion Backtest para ETFs.
Python Mean Reversion Backtest para ETFs & # 8230;
Procurei usar o Python para criar um script de teste de resposta para testar as estratégias de reversão média com base em pares ETF cointegrados. Descrevi o processo na minha cabeça em vários estágios, cada um dos quais formará a base das minhas próximas postagens de blog. Eu não sei quantos vou ter que dividir o & # 8220; shebang & # 8221; Em todo, mas aqui é o esboço básico.
1) Crie um banco de dados SQLite3, que irá conter dados ETF para que Tickers seja facilmente puxado para o programa principal de backtest, com base em uma consulta SQL definida pelo usuário. Eu quero que o banco de dados segure informações sobre o ticker do fundo, obviamente, mas também quer uma série de outras informações descritivas sobre região geográfica, títulos subjacentes e foco de indústria / ativos para citar alguns. Isso me permitirá executar o backtest principal, com base em tickers que atendam aos meus requisitos para esse backtest específico. Os pares co-integrados geralmente são co-integrados por razões economicamente válidas; Ser capaz de recusar tickers com base em critérios como a classe de ativos e a indústria de ETF subjacentes espero que eu permita identificar pares ETF que são mais propensos a exibir um relacionamento co-integrado.
2) Escreva o script que realmente raspa os dados relevantes de um site baseado em informações ETF e o armazena no meu banco de dados criado anteriormente. Para isso, vou usar o módulo Pandas, uma vez que possui uma capacidade incorporada de ler e analisar html, convertendo o html puro em um Pandas DataFrame, que podemos então carregar facilmente no banco de dados.
3) Em seguida, vem o tempo de "carne e batatas" # 8221; & # 8230; tempo para escrever o próprio programa de back-back. Eu irei procurar em primeiro lugar, crie um & # 8220; válido & # 8221; backtest com base no conceito de negociação do spread entre os pares ETF cointegrados, como mencionado anteriormente. Isso implicará algumas partes de trabalho distintas. Em primeiro lugar, precisamos baixar os dados do ticker ETF relevantes do banco de dados que criamos anteriormente e, em seguida, crie uma lista de pares de tickers fora dessa única lista de tickers, que podemos alimentar a função backtest para funcionar. .
4) Então precisamos executar uma regressão nos dados de preço entre o par para calcular a razão de hedge # 82221 ;, que usaremos para gerar o spread correto entre os preços. Esta propagação será submetida a uma série de testes para descobrir se ele exibe propriedades de reversão de média estatisticamente significantes. Isso nos envolverá com testes co-integrados de Dickey-Fuller aumentados e calculando o expoente de Hurst e a "semi-vida" # 8221; da série entre outras coisas.
5) Uma vez que identificamos se a série de propagação é significante reverter, podemos então executar uma prova de retorno com base em uma & # 8220; Bollinger banda & # 8221; sistema de estilo onde as entradas e saídas são determinadas pela divergência e convergência de uma dispersão normalizada & # 8201 ;, calculada como o desvio da propagação a partir da média, dividida pelo desvio padrão do próprio spread.
6) Em seguida, armazenamos os retornos da estratégia de pares particulares e traçamos a curva de equivalência resultante. Também aproveitaremos a oportunidade para calcular alguns indicadores de desempenho chave e exibi-los em cada gráfico. Todas essas informações serão exibidas, antes que o script guarde e teste o próximo par de tickers ETF mantidos em nossa lista de pares de ticker.
Agora eu posso prometer que obteremos algum tipo de código de trabalho no final de tudo isso # 8230; mas eu definitivamente não posso prometer que será bonito! Como já indiquei anteriormente, estou em uma viagem de aprendizado aqui, então às vezes eu lutei com escrever código bonito, que tudo funciona de forma impecável. Muitas vezes me demora mais do que alguns na mesma coisa, antes de eu realmente conseguir algo que faz o que é que eu quero que ele faça. Então, fique comigo, por favor & # 8230 ;!
Eu tentarei obter a próxima postagem no blog nos próximos dias com a primeira e segunda parte do processo descrito acima. Te vejo em breve!
Comments
Post a Comment