К основному контенту

Pairs trading significa estratégia de reversão


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 20 de fevereiro de 2018.
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 2018. 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 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.

Reversão média II: Estratégias de negociação de pares.
Deutsche Bank | 16 de fevereiro de 2018.
O Deutsche Bank mostra como melhorar o comércio de pares com as análises de notícias do RavenPack.
Esta pesquisa do Deutsche Bank mostra como melhorar o comércio de pares com as análises de notícias do RavenPack. Seu sinal aprimorado reduz significativamente o risco de divergência e também aumenta o retorno médio por par.
Aqui estão alguns dos destaques:
A porcentagem de pares não convergentes caiu cerca de metade de 15% para 7%. O lucro médio por par aumentou de 2,3% para 2,8% para a estratégia européia e de 1,6% para 1,9% para a estratégia dos EUA. A distribuição do retorno torna-se mais inclinada positivamente.
Abaixo está um exemplo de pares para o Sports Direct International plc e Dixons Carphone plc entre novembro de 2018 e janeiro de 2018.
No geral, o preço do Sports Direct Intl caiu mais de 40% ao longo de um período de dois meses. Claramente, negociar o par teria percebido uma perda. No entanto, com o acesso a um feed de análise de notícias em tempo real, a perda poderia ter sido evitada ao ignorar os negócios de pares com divergência de preços suportada por sentimento negativo e volume de notícias anormal em qualquer uma das duas empresas (neste caso, "Sports Direct Intl. ").
Solicite o Livro Branco.
Artigos relacionados.
Estratégias de valor baseadas na aprendizagem de máquinas.
J. P. Morgan Global Quantitative & amp; Equipe de Estratégia de Derivados | 09 de agosto de 2017.
Atenção anormal da mídia impacta retornos de estoque.
RavenPack | 19 de setembro de 2017.
Melhorando as reversões de negociação com notícias e neutralização.
J. P. Morgan Global Quantitative & amp; Equipe de Estratégia de Derivados | 03 de outubro de 2017.
Descubra a plataforma RavenPack.
Oferecemos mais de 90 painéis, construídos com mais de 150 conjuntos de dados curados e poderosas ferramentas de visualização.
RavenPack é o principal fornecedor de análise de dados para serviços financeiros. Os clientes da empresa incluem os hedge funds, bancos e gestores de ativos mais bem sucedidos do mundo.

A negociação de pares é a estratégia de reversão média
Attached é um par de troca de algo que permite ao usuário ativar / desativar diferentes testes para cointegração / reversão média da disseminação do par antes de fazer qualquer transação. Se você optar por ativar um dos testes, o valor do teste é gravado como um timeseries visível na página de resultados do backtest.
O par que está sendo negociado neste algo é o ETFs de petróleo e ouro (USO e GLD), mas você pode modificá-los conforme desejar.
Os 3 testes diferentes são:
- Efetivamente, este é um teste de raiz unitária para determinar se a propagação é cointegrada.
- Além disso, uma função está incluída mostrando como usar os valores críticos do teste ADF em vez do valor p.
- Este é o tempo calculado teoricamente, com base em uma janela histórica de dados, que levará para a propagação a significar - reverter metade de sua distância depois de ter divergido da média da propagação.
- Efetivamente, isso retorna um valor entre 0 e 1 que indica se uma série de tempo está em tendência ou retorno de média. Quanto mais próximo o valor é para 0,5 significa que o mais "aleatório" A série temporal se comportou historicamente. Os valores abaixo de 0,5 implicam que a série temporal é reversa média, e acima de 0,5 implica tendência. Quanto mais próximo o valor é de 0, implica níveis maiores de reversão média.
- A literatura comercial é conflituosa quanto à utilidade do expoente de Hurst, mas eu incluí, no entanto, e configurei a opção padrão para False no algo.
Os resultados de backtest abaixo incorporam dois desses testes:
Valor p-teste de ADF, calculado em uma janela de lookback de 63 dias (por exemplo, 3 meses), com um p-valor mínimo exigido de 0,20.
Para modificar os valores dos parâmetros dos testes, apenas olhe na função inicializar, para blocos de código que se parecem com isso. Veja como os parâmetros do p-valor do teste ADF são definidos:
Aqui, você vê como existe um dicionário definido chamado & # 39; stat_filter & # 39; que você pode usar para armazenar os parâmetros de cada teste. Primeiro crio outro dicionário dentro do & # 39; stat_filter & # 39; nomeado & # 39; adf_p_value & # 39; e então eu carrego em todos os valores dos parâmetros relevantes para o teste ADF que eu quero definir quando é aceitável entrar em um comércio. Esses 5 parâmetros exatos (por exemplo, chaves do dicionário) serão definidos para todos os testes, como você verá se você olha o código do algoritmo e observe o valor adf_critical, half_life, hurst_exponent são definidos seguindo-o. Os 5 parâmetros são:
& # 39; use: Boolean, True se você quiser que o algo use este teste.
Suporte para a Freqüência Intraday.
(Deixe-me saber se você encontrou problemas com isso, como eu não fiz tanto teste com ele como eu tenho com apenas freq diariamente)
Você também pode configurar este algoritmo para ser executado em dados intradiários minuciosamente. Por exemplo. construa um spread de pares usando preços de fechamento de barras de 15 min.
Primeiro, altere a variável context. trade_freq & # 39; do diário & # 39; para "intraday"
context. trade_freq = & # 39; diariamente & # 39; # & # 39; diariamente & # 39; ou intradiário & # 39;
Em seguida, procure este bloco de código abaixo na função inicializar () e especifique o & # 39; intraday_freq & # 39; valor para a frequência dos preços de fechamento a serem utilizados (bares de 15 minutos a. Em seguida, configure o & # 39; run_trading_logic & # 39; para ser com que frequência você deseja que a lógica seja aplicada aos dados do mercado. Eu escolhi 60 o que significa, execute esta lógica a cada 60 minutos, mas, se desejar, altere-a para 1, e a lógica será executada a cada minuto (cuidado, pois isso resultará em tempos de atraso muito longos).
A variável "check_exit_every_minute & # 39; pode ser definido como True se você quiser que a lógica seja executada a cada minuto se e somente se você estiver atualmente em um comércio. Por exemplo. ele verifica se você precisa sair do comércio a cada minuto em vez de aguardar os próximos N períodos (por exemplo, 60 minutos, conforme especificado na variável "run_trading_logic_freq" #)
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
O mesmo algoritmo só começa 9 meses antes.
Obrigado pela participação. Eu notei que há uma função coint em statsmodels. tsa. stattools. Existe uma diferença significativa entre a função coint e a prova ADF? Algum sentido em usar ambos?
Eu anexei um backtest abaixo que tenta encontrar o pvalue de ambos os testes para cada par, todos os dias. Disclaimer: o que eu costumo pensar que está acontecendo em python na verdade não é.
Eu não tentei a função coint em stattools ainda, embora eu imagine que é muito semelhante. Eu apenas vi um rápido vislumbre do código, e ele efetivamente executa uma regressão da versão atrasada do timeseries de entrada em comparação com a versão desactualizada que é bastante semelhante ao ADF. A diferença pode estar na forma como os valores críticos são calculados.
O teste de Engle-Granger também é usado às vezes para testar a co-integração, mas eu ainda não procurei essa implementação.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
Ótimo Algo. É incrível. Muito útil.
Olá Justin / Tudo.
Você poderia sugerir como eu posso executar este algo em vários pares, em vez de apenas um par?
Tente fazer uma classe de negociação de pares que acompanhe toda a contabilidade para cada par dado. Veja os filtros de Kalman generalizados da David par em troca de algo para um ótimo exemplo de troca de pares com base em classe.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
Obrigado por compartilhar informações.
Clonei o problema de Justin, no entanto, quando eu executo um backtest, o desempenho permanece em 0% para a totalidade da janela do backtest.
Não fiz alterações no código fonte original.
Alguma idéia de por que isso ocorreria?
Você provavelmente executa algo no modo diário e só funciona em modo minuto.
Aqui está o meu último backtest do original da Justin, Lent algo, começou apenas 9 meses antes.
Vale a pena notar que, quando postei backtests, códigos e cadernos de pesquisa, a intenção é ilustrar uma metodologia e fornecer alguns modelos de código para estimular o processo de pensamento criativo da comunidade e salvar pessoas por algum tempo, fornecendo cut - e colar fragmentos de código que podem ser integrados em seu próprio código. De modo algum, estou publicando algo que foi completamente examinado e imediatamente investido na forma exata, por qualquer extensão da imaginação. Muitas vezes sugiro exemplos simples, em vez de excessivamente complexos, de modo a beneficiar um espectro mais amplo de leitores.
Vejo que você reconheceu que o backtest que postei acima parece falhar muito mal por um período de tempo diferente. Vemos isso muito com as estratégias que observamos, muitas das quais são superadas apenas no período de 2 anos nas competições que executamos. Tentamos trabalhar com o proprietário do algo e fornecer conselhos sobre o motivo pelo qual ele pode ter desdobrado nos diferentes prazos. Talvez você possa ampliar sua análise para me fornecer alguns conselhos sobre como melhorar essa estratégia? Talvez você tenha algumas recomendações sobre como incorporar um modelo de mudança de regime, que é muito provável que ajude uma estratégia como esta, dado o período de tempo que parece falhar (as crises de futuros financeiras / commodities que ocorreram no final de 2008). Talvez um modelo de mudança de regime de volatilidade estocástica possa ajudar significativamente. Se você tem experiência nesta área, eu tenho certeza de que a comunidade encontraria uma adição sólida para incorporar estratégias como essas para torná-las mais robustas. Eu sei que sim.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
Por que você escolheu o par USO e GLD? Acho que uma questão mais ampla é que você pode sugerir um processo para escanear através de uma cesta de ações e determinar se existem pares negociáveis? Eu assumo testes de cointegração seria um método, como ADF, como você usou. Seria bom se pudesse haver um algo para percorrer uma cesta de ações e determinar automaticamente o que faria "bom" pares.
Eu simplesmente escolhi USO / GLD para replicar este exemplo que usa esses mesmos tickers, a partir deste livro: amazon / Quantitative-Trading-Build-Algorithmic-Business / dp / 0470284889 /
Esse livro é uma introdução muito boa para stat arb pair trading (bem como seus outros livros). Todo o código no livro está em Matlab, então meu algo foi uma tentativa de implementá-lo em Python, em nosso backtester, e incorporar algumas das outras técnicas estatísticas descritas ao longo do livro.
Você está certo, que a seleção de um monte de pares potenciais é uma idéia de pesquisa razoável, mas você deve estar ciente da simples datamining. Você primeiro deseja determinar uma base econômica sensata para a qual os pares de ações devem ser vinculados (por exemplo, pares de ações no mesmo setor seriam pares razoáveis ​​de ações para pesquisar). Escrever um algo no nosso backtester para realizar isso seria bastante direto: primeiro você pode usar nosso banco de dados fundamentais da Morningstar para capturar todos os estoques no setor de energia, talvez até mesmo filtrar os estoques de empresas de uma certa faixa de marketcap (por exemplo, Capture os estoques de energia), em before_trading_starts (), você encaminha sobre cada par de ações que computa o valor do PAD do ADF (ou outra estatística de cointegração), mantenha todos os pares de ações que atendam aos seus critérios e, em handle_data (), você apenas executa o aqueles que atendem aos critérios através de algo semelhante ao que eu compartilhei para entrar / sair dos negócios.
Eu ou alguém em nossa equipe aqui na Q pode tentar desenvolver um modelo para isso e compartilhá-lo.
Além disso, você pode ver esta publicação do fórum que mostra como desenvolver um único algo que negocia um portfólio de múltiplos pares:
É o algo backtest no primeiro comentário de David Edwards, aqui:
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
Notei na seção do blog que você tem um caderno ao usar um otimizador bayesiano. Você saberia como posso puxá-lo para Q? está atualmente em github..thanks!
@Adam, no momento não é possível usar o otimizador bayesiano da postagem do blog no ambiente Q. Era mais uma prova de idéia de implementação de conceito. Como você mencionou, o código que usei para a publicação do blog está no github e você pode se inscrever para um teste com o SigOpt para obter um nome de usuário / API para trabalhar com ele em seu próprio ambiente python / zipline localmente. Oferecer alguns desses métodos alternativos de otimização como serviço é um conceito interessante que teremos que pensar quando desenvolvemos nossa plataforma Q no futuro. Obrigado pelo feedback!
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian. Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
Obrigado Justin! Seria bom poder fazer esse tipo de otimização e / ou uma técnica de enxame de partículas em Q. :)
Eu acredito que encontrei uma lacuna na lógica de negociação. Na seção de filtragem estatística (linhas.
155-176) o algoritmo imediatamente sai se uma prova falhar. Isso evita que novos negócios sejam abertos, mas não faz nada para lidar com negócios existentes. Os negócios abertos permanecem abertos até que todos os testes estatísticos passem novamente e o algoritmo atinja sua lógica de saída padrão.
Por design, também devemos ter uma alta probabilidade de estar em um comércio quando isso acontece, então o impacto pode ser bastante alto. O problema na detecção disso é que se o relacionamento restabelece rapidamente, o desempenho não sofreu. Mas se incluímos um período de tempo em que a relação não retorna rapidamente, como Vladimir fez, os resultados são notáveis.
Eu adicionei algumas linhas para fechar todas as posições que estão abertas quando os testes estatísticos são quebrados. Provavelmente há melhores maneiras de lidar com a lógica de saída, mas essa mudança simples mostra o benefício de tê-lo lá. O algoritmo não faz também durante o período de teste original, mas o desempenho melhora durante o período prolongado.
(Eu também fiz uma alteração menor nas linhas 20 e 21 para usar a função sid () para definir os ativos x e y em vez do símbolo (). O resto do algoritmo é inalterado.)
O intercâmbio de pares usando métodos Copula em vez de cointegração é a nova raiva. Alguém tentou?
O intercâmbio de par usando métodos Copula em vez de cointegração é o novo.
raiva. Alguém tentou?
Este artigo oferece uma comparação sistemática de métodos de cópula e métodos de cointegração quando aplicado a estoques de mina de ouro dos EUA. Além disso, o documento contrasta os critérios de seleção do par de acordo com a estatística do ADF, o tau de Kendall, o rho e a métrica de distância da Spearman. Uma nota: eu não sou o autor.
Obrigado Julian. Eu tive uma chance e os resultados estão muito bons.
Qualquer coisa que você possa compartilhar Aqua, para brincar?
Coloco muitos recursos (tempo e dinheiro) para que as copulas funcionem em Q. Mas você pode usar isso para começar:
Obrigado, eu estava mais procurando o código Q para jogar. o espírito de compartilhar;)
Coloquei muito tempo (e dinheiro) em zipline-live e os algos & # 39; s que desenvolvi e ainda compartilho. Um dia, o karma virá e pagará graciosamente.
Peter, vou tentar colocar algo e publicá-lo sem divulgar meu molho secreto :)
Desculpe, algo deu errado. Tente novamente ou contate-nos enviando comentários.
Você enviou um ticket de suporte com sucesso.
Nossa equipe de suporte estará em contato em breve.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian.
Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.
O material deste site é fornecido apenas para fins informativos e não constitui uma oferta de venda, uma solicitação de compra ou uma recomendação ou endosso para qualquer segurança ou estratégia, nem constitui uma oferta de prestação de serviços de consultoria de investimento pela Quantopian.
Além disso, o material não oferece nenhuma opinião em relação à adequação de qualquer segurança ou investimento específico. Nenhuma informação contida neste documento deve ser considerada como uma sugestão para se envolver ou abster-se de qualquer curso de ação relacionado ao investimento, já que nenhuma das empresas atacadas ou nenhuma das suas afiliadas está a comprometer-se a fornecer conselhos de investimento, atuar como conselheiro de qualquer plano ou entidade sujeito a A Lei de Segurança de Renda de Aposentadoria do Empregado de 1974, conforme alterada, conta de aposentadoria individual ou anuidade de aposentadoria individual, ou dar conselhos em capacidade fiduciária em relação aos materiais aqui apresentados. Se você é um aposentadorio individual ou outro investidor, entre em contato com seu consultor financeiro ou outro fiduciário não relacionado a Quantopian sobre se qualquer idéia, estratégia, produto ou serviço de investimento descrito aqui pode ser apropriado para suas circunstâncias. Todos os investimentos envolvem risco, incluindo perda de principal. A Quantopian não oferece garantias sobre a precisão ou integridade das opiniões expressas no site. Os pontos de vista estão sujeitos a alterações e podem ter se tornado pouco confiáveis ​​por vários motivos, incluindo mudanças nas condições do mercado ou nas circunstâncias econômicas.

Riqueza do robô.
Postado em 2 de janeiro de 2018 por Kris Longmore.
Na primeira publicação desta série, explorei a reversão média das séries temporais financeiras individuais usando técnicas como o teste Aumentado de Dickey-Fuller, o expoente de Hurst e a equação de Ornstein-Uhlenbeck para um processo estocástico reverso médio. Eu também apresentava uma estratégia de reversão média linear simples como prova de conceito. Nesta publicação, explorarei séries temporais estacionárias artificiais e apresentarei uma estratégia comercial mais prática para explorar a reversão média. Mais uma vez, este trabalho baseia-se no comércio algorítmico da Ernie Chan, que eu recomendo e usei como inspiração para uma grande parte da minha própria pesquisa.
Ao apresentar meus resultados, mostrei com facilidade as curvas de equidade de estratégias de reversão médias que passam por períodos de desempenho estelar, bem como períodos tão ruins que eles enviariam a maioria dos comerciantes quebraram. Ao invés de cereja escolher o bom desempenho, eu quero demonstrar o que penso que é de extrema importância neste tipo de negociação, a saber, que a natureza da reversão média para qualquer série de tempo financeiro está em constante mudança. Às vezes, esse dinamismo pode ser explicado pela atualização dos índices de cobertura ou de outros parâmetros estratégicos. Outra vez, a única solução é abandonar totalmente a abordagem de reversão média, talvez em favor de uma tendência após a abordagem. Como esta postagem irá demonstrar, encontrar ou construir séries de preços de reversão média é uma questão relativamente simples. A verdadeira chave para explorar de forma vantajosa essas séries é a questão muito mais difícil de entender, em tempo real, se deve continuar uma estratégia como está, atualizar seus parâmetros ou colocá-lo no gelo temporariamente ou permanentemente.
Cointegração.
Uma coleção de variáveis ​​de séries temporais não estacionárias é dito ser cointegrada se houver uma combinação linear dessas variáveis ​​que crie uma série temporal estacionária. Isso implica que podemos construir artificialmente uma série de tempo de reversão média através da combinação apropriada de séries temporais não estacionárias. Por exemplo, podemos construir um portfólio de ativos cujo valor de mercado é uma série de tempo estacionária e, portanto, passível de exploração lucrativa através de técnicas de reversão média, mesmo através da série de preços dos ativos constituintes não são eles mesmos significativos para reverter. Uma estratégia de negociação de pares, onde nós compramos um ativo e curto outro com uma apropriada alocação de capital para cada um, é um exemplo deste método para explorar o conceito de cointegração, mas também podemos criar portfólios mais complexos de três ou mais ativos.
Podemos testar se uma determinada combinação de ativos forma um processo estacionário usando os testes de estacionaria descritos na publicação anterior. No entanto, é impossível conhecer a priori os coeficientes (ou os coeficientes de cobertura) que formam um portfólio estacionário. Como, então, um teste para cointegração? Eu explorarei duas abordagens: o teste Cointegrated Augmented Dickey-Fuller e o teste de Johansen.
Cointegrated Augmented Dickey-Fuller Test.
O teste Cointegrated Augmented Dickey-Fuller (teste CADF) envolve, em primeiro lugar, realizar uma regressão linear entre duas séries de preços para determinar a relação de hedge ideal da carteira e, em seguida, realizar um teste de estacionaria na série de preços da carteira. O exemplo abaixo ilustra esse conceito usando as moedas da Austrália e da Nova Zelândia, uma vez que parecem ser capazes de cointegrar, dado que as economias de ambos os países são baseadas em commodities e são afetadas por forças geopolíticas similares. Isso amplia o exemplo na primeira publicação, que explorou as tendências de reversão médias do par de câmbio AUD / NZD. Nesse exemplo, a relação de hedge é sempre uma, pois quantidades iguais de AUD e NZD estão sempre sendo compradas e vendidas. Neste exemplo, nós permitimos uma relação hedge flexível e tentamos sua otimização. Para conseguir isso, precisamos introduzir uma moeda de cotação comum, quanto mais líquido, melhor. Faz sentido escolher o dólar dos EUA. Portanto, o exemplo abaixo procura explorar uma carteira estacionária de AUD / USD e NZD / USD.
Em primeiro lugar, as séries de preços de ambas as taxas de câmbio para o período de 2009 a meados de 2018, que parecem cointegrar:
Um gráfico de dispersão sugere ainda que a série de preços pode se cointegrar à medida que os pares de preços caem em uma linha aproximadamente reta:
Podemos usar a regressão dos mínimos quadrados para encontrar a relação de hedge ideal e traçar o resíduo de AUD / USD-beta * NZD / USD, o que, de jeito que não, parece excessivamente estacionário:
NZDUSD. Fechar, data = fecha)
Em seguida, aplicamos o teste ADF à propagação (veja a publicação anterior para uma breve descrição do pacote urca e por que a implementação do teste ADF é adequada para esta aplicação):
z. Lag. 1 + 1 + z. Dif. atraso)
Neste caso, a estatística de teste em que nos interessamos é -0,94, que é superior ao valor crítico de 10% de -2,57. Portanto, infelizmente, não podemos rejeitar a hipótese nula de que o portfólio não é significante reverter. No entanto, o valor negativo da estatística de teste indica que o portfólio não está em tendência.
Uma lacuna da abordagem dos mínimos quadrados comuns é que é assymetrc: mudar as variáveis ​​dependentes e independentes nos resultados de regressão em uma relação de hedge diferente. A boa prática determinaria que ambas as opções fossem testadas e o arranjo que resultasse na estatística de teste mais negativa fosse selecionado. Outra abordagem é usar a regressão dos mínimos quadrados, o que pode ser usado para derivar uma relação de cobertura simétrica. No sentido geométrico, os mínimos quadrados totais minimizam a distância ortogonal à linha de regressão (em oposição à distância vertical no caso dos mínimos quadrados comuns) e, portanto, leva em consideração a variância das variáveis ​​dependentes e independentes. A solução total de mínimos quadrados é facilmente calculada em R usando a análise de componentes principais e não se limita a um portfólio de dois ativos:
AUDUSD. Fechar + NZDUSD. Fechar, data = fecha)
z. Lag. 1 + 1 + z. Dif. atraso)
Isso resulta em uma estatística de teste mais negativa e um spread visualmente mais estacionário (pelo menos para o período de 2009 e 2011, 2018, veja a figura abaixo), mas ainda somos incapazes de rejeitar a hipótese nula de que o spread obtido pelo menos pelo total A regressão dos quadrados é significante reverter.
Teste de Johansen.
O teste de Johansen nos permite testar a cointegração de mais de duas variáveis. Lembre-se da publicação anterior, usando um modelo linear de mudanças de preços:
Δy (t) = λy (t - 1) + β t + μ + α1Δy (t - 1) + ... + αkΔy (t - k) + εt.
que se λ ≠ 0, então Δy (t) depende do nível atual y (t - 1) e, portanto, não é uma caminhada aleatória. Podemos generalizar esta equação para o caso multivariado usando vetores de preços y (t) e coeficientes λ e α, denotados Y (t), Λ e Α respectivamente. O teste de Johansen calcula o número de carteiras estacionárias independentes que podem ser formadas por várias combinações lineares da série de preços com base na decomposição do eelevector de Λ. O pacote urca contém uma implementação do teste de Johansen que fornece valores críticos que podemos usar para testar se podemos rejeitar a hipótese nula de que existem relações de cointegração 0, 1, 2, # 8230 ;, n-1, onde n é o número de séries cronológicas constituintes. Convenientemente, os eigenvectors podem ser usados ​​como os ratios de hedge de séries de preços individuais para formar um portfólio estacionário. Este processo está ilustrado abaixo para o portfólio AUD / USD-NZD / USD. Um terceiro par de moedas e # 8211; USD / CAD & # 8211; é adicionado na próxima seção para tentar criar uma carteira estacionária de três moedas.
Nesse caso, não podemos rejeitar qualquer hipótese nula de que r (o número de carteiras de co-integração) é zero ou um, uma vez que a estatística de teste em ambos os casos é inferior ao valor crítico de 10%. Ou seja, é improvável que possamos formar um portfólio estacionário a partir do histórico de preços usado neste exemplo. No entanto, ainda pode valer a pena prosseguir uma estratégia de reversão média se a meia-vida da reversão média for suficientemente baixa (veja a publicação anterior para mais detalhes).
Conforme mencionado acima, os e-cevectores formam a relação hedge ideal. Eles são convenientemente ordenados pela máxima verossimilhança, então, neste caso, selecionaríamos um portfólio de 1 lote de AUD / USD longo ou curto e 3.41 lotes de NZD / USD na direção oposta. Neste caso, infelizmente, a carteira resultante não parece mais estacionária do que a construída usando as abordagens de mínimos quadrados ordinários e regressões de mínimos quadrados.
Reversão média de um portfólio de mais de dois instrumentos.
Podemos adicionar um terceiro ativo e usar o teste de Johansen para determinar a probabilidade de existir um portfólio de reversão médio junto com os índices de hedge de tal carteira. Neste caso, adicionarei USD / CAD e tomarei o preço recíproco para que as moedas das cotações sejam consistentes (note que, ao criar uma estratégia de negociação a partir deste triplete, que as direções sinalizadas para USD / CAD precisariam ser revertidas):
Novamente, infelizmente não encontramos uma relação de cointegração significativa. No entanto, como discutido na primeira publicação, às vezes não precisamos manter nossos resultados com significância estatística cientificamente rigorosa para ganhar dinheiro, particularmente se a meia-vida da reversão média for suficientemente curta. Portanto, manteremos o primeiro eigenvector para formar uma carteira dos três instrumentos para uma investigação mais aprofundada. Primeiro, vamos dar uma olhada em um gráfico de séries temporais do valor do portfólio:
A meia-vida da reversão média da carteira é de 53,2 dias. Isso é calculado da mesma forma que para uma única série de tempo de reversão média no post anterior, ou seja, regressando o valor do portfólio contra seu valor remanescido por um período de tempo:
y. lag, data = df)
Lembre-se que, na publicação anterior, conseguimos construir uma estratégia de reversão de média linear teoricamente rentável a partir de uma única série de tempo com uma meia vida de reversão média de mais de 300 dias, então, à primeira vista, esse resultado é promissor.
Reversão média linear em uma série de tempo cointegrada.
Abaixo está a curva de equidade da estratégia de reversão média linear da postagem anterior na carteira de três instrumentos com o valor da carteira sobreposta na curva patrimonial:
A estratégia sofre uma redução considerável e apenas retorna um fator de lucro de 1,04 e uma razão Sharpe de 0,29.
Obviamente, a estratégia de reversão média linear apresentada acima e detalhada na publicação anterior não seria adequada para negociação ao vivo, mesmo que o exemplo mostrado aqui gerasse um backtest impressionante. Aplicado às ações, seria necessário comprar e vender um número infinitesimal de ações quando o preço se mover uma quantidade infinitesimal. Isso é menos um problema quando aplicado às moedas, já que podemos comprar e vender em unidades tão pequenas como um centésimo de um lote. No entanto, o verdadeiro assassino de tal estratégia é o custo de negociação associado ao reequilíbrio do portfólio bar-by-bar, bem como o fato de não podermos conhecer o capital necessário no início. Dito isso, ainda há muito valor ao testar uma idéia de reversão média com esta estratégia linear, pois mostra se podemos extrair lucros sem qualquer viés de snooping de dados, pois não há parâmetros para otimizar. Além disso, uma conseqüência do reequilíbrio de portfólio bar-by-bar é que os resultados do backtest de estratégia linear provavelmente terão significância estatística maior que outros backtests que incorporam regras de entrada e saída mais complexas. Essencialmente, a estratégia linear simples aqui apresentada pode ser usada como prova de conceito para determinar rapidamente se um portfólio pode ser explorado usando técnicas de reversão média.
Abordagem prática à reversão média linear.
Se a estratégia linear simples não é prática para negociação, como podemos explorar as carteiras de reversão significativas? Na negociação algorítmica, Ernie Chan sugere uma abordagem de banda de Bollinger onde os negócios são inseridos quando o preço se desvia em mais de x desvios padrão da média, onde x é um parâmetro a ser otimizado. O período de lookback para a média de rolamento e desvio padrão pode ser otimizado ou ajustado para a meia-vida da reversão média. O comércio seria encerrado quando o preço reverter para desvios padrão da média em que novamente y é um parâmetro de otimização. Para y = 0, o comércio é encerrado quando o preço reverte para a média. Para y = - x o comércio é revertido em x desvios padrão da média. A vantagem óbvia dessa abordagem é que podemos controlar facilmente a alocação de capital e o risco. Também podemos controlar o período de espera e a frequência comercial. Por exemplo, definir x e y para valores menores resultará em períodos de espera mais curtos e mais comércios de ida e volta.
Explorar o portfólio AUD-NZD-CAD usando esta implementação simples com x = 2 e y = 1 retorna a seguinte curva de equivalência patrimonial, com os custos de transação incluídos:
A curva de equidade da estratégia de Bollinger é de forma semelhante à estratégia linear de reversão média, mas ela é muito menos e permite um controle mais simples de risco e exposição.
Pensamentos finais.
Esta publicação estendeu o artigo anterior sobre a exploração de séries temporais de reversão média individual explorando a construção de carteiras cujo valor de mercado é significante reverter. Além da estratégia de reversão média linear simples, também apresentava uma abordagem mais prática que poderia constituir a base de uma estratégia comercial real.
Conforme indicado nos parágrafos introdutórios, queria mostrar o bom e o mau da negociação de reversão média. As curvas de equidade apresentadas mostram períodos de desempenho excepcional, bem como períodos do oposto polar. Claramente, há momentos em que a reversão média é altamente rentável, e outras vezes quando simplesmente não funciona (talvez a tendência seguinte seja mais adequada nestes tempos). Mas como é que se determina, em tempo real, qual regime seguir? Como se determina quando mudar? Explorou várias opções, incluindo um filtro simples com base em um indicador de tendência e um filtro baseado no desempenho real da estratégia em tempo real. No entanto, devido ao atraso associado aos valores do filtro, essas abordagens são de pouco ou nenhum valor. A diversificação é outra opção, isto é, negociar continuamente tanto a reversão média quanto a tendência seguindo as estratégias ao mesmo tempo na crença de que o lucro do regime dominante irá mais do que compensar as perdas do outro.
Se você tiver uma idéia sobre como resolver esse problema, informe-me nos comentários. Eu adoraria ouvir de você.
Baixe arquivos e dados usados ​​nesta análise.
Aqui você pode baixar os dados e scripts de preços (Zorro e R) usados ​​nesta publicação: reversão média 2.
Ilya Kipnis.
Saber quando reverter e quando a tendência seguir sem o atraso do sinal é a questão do dólar. Das minhas conversas com o meu mentor, você quer um modelo de mudança de regime para isso.
Afinal, se você tem um instrumento de alcance, escolha o seu indicador de reversão médio favorito e fique nojento. Se você tem um mercado de tendências, basta comprar e manter a tendência. Mas para saber qual é o quê? Eu adoraria ver algumas idéias postadas em outro lugar. Eu tentei as configurações padrão do depmix & # 8217; e me deu lixo.
Kris Longmore.
Os modelos de mudança de regime são uma nova área de pesquisa para mim. Algo que eu já quis dizer há algum tempo, mas ainda não conseguiu chegar. Esta é uma boa motivação para superar a lista de tarefas. Eu passarei algum tempo aprendendo os primeiros princípios e depois darei uma olhada no pacote depmix que você mencionou. Apesar de sua experiência, parece que a solução não é simples.
Sua última sugestão deve funcionar bem. Troque uma cesta de sistemas não correlacionados com uma variedade de parâmetros. Você obterá a soma dos retornos com reduções reduzidas. Algum código Zorro está aqui: financial-hacker / build-better-strategies-part-2-model-based-systems /
Kris Longmore.
Obrigado pela sugestão de Kevin. Eu acho que o termo-chave em seu comentário é # 8216; não correto e # 8217 ;. Eu tive um sucesso misto com a diversificação da estratégia no passado, graças principalmente à correlação entre as estratégias que mudaram ao longo do tempo. Mas isso não é realmente uma falha na diversificação, e sim um fracasso do comerciante para gerenciá-lo adequadamente.
ótima análise. Eu fiz muitas coisas lá e trocou (meu site está baixo), então aqui estão algumas coisas que descobri.
Não é necessário diversificar a reversão e a negociação média, basta encontrar uma relação de co-integração 5-10 e sua relação Sharpe será 2+, pois os resíduos são todos não correlacionados. Você também precisará fazer um teste WFO ou IS / OOS, já que ninguém vai levar a sério se você tiver um viés favorável. (há uma degradação de desempenho de 50% em testes de amostra de minha própria experiência depois de fazer na otimização de amostra) Eu sugiro fortemente WFO para cada parâmetro, pois ele se adaptará a modos de mercado em mudança. Também tente outros carregamentos a partir do PCA, pois o primeiro possui a maior variação, mas também o mais provável de conter tendências.
Quanto ao regime de mudar algum filtro para filtrar as tendências é uma opção se você puder encontrar uma. Não há necessidade de perder tempo, já que o campo de mudança de regime é enorme.
Additional an execution algo that uses EMA vs SMA was better option for me (probably due to large funds using it also and size moves markets), plus you can use 2 st dev to enter but exit after n days could be a better one as a rule.
Anyhow hope it helps. If you want to talk more feel free to contact me.
Kris Longmore.
Hi D, thanks for sharing your findings! Some great stuff there that hadn’t occurred to me. I’ll definitely be pursuing them. Totally agree regarding walk forward testing; it is an essential part of the evaluation phase of strategy development in my opinion.
I hadn’t considered using the other loadings from the principal components analysis, but I will look into that too. I also like the n-day exit idea. It is appealing in its simplicity and I have found it useful in the past.
Eduardo Gonzatti.
Have you tried to use some kind of dominantPhase analysis from Zorro in the cointegrated spread and then trading it (spread) when the phase indicated so?
Ps: I’ve traded cointegrated equity pairs for some 4 yrs, and have no clue about cointegrated fx pairs =) but they do look way better and more robust for doing such.
Kris Longmore.
Hi Eduardo, no I hadn’t considered extracting phase information from the cointegrated spread. My first reaction to the idea is that this approach would be applicable if some sort of cyclical behaviour was present in the spread. I don’t presently know if that is the case or not, but I will certainly look into it. In your experience, have you found exploitable cycles in the spreads you have traded?
Eduardo Gonzatti.
Actually, I had this idea when fiddling with the Zorro manual a couple days ago.. I was studying about spectral analysis of financial time series returns and stumble upon Zorro’s cycle/phase indicators based in Hilbert Transforms, so it just occurred to me that, IF you assume that a spread (say, a cointegrated ols residue of two equities) is mean reverting (cointegrated and low enough half life with OU equation), you could probably use the same kind of transformation / cycle analysis that Zorro does (i thinks it’s based in John Ehlers books) in those spreads, in order to get “optimized” entry points, assuming those would predict turning points in the spread itself.
Don’t know if my assumption is mathematically sound, but it’s a hunch..
Personally, I never tried something aside from N*sigmas deviations for trading cointegrated spreads, because of the assumption that they are stochastic.
Sorry for any misspellings,
Hi Robot Master,
Thank you for the analysis. One question, is keeping the quote currency constant also necessary for CADF and OU, or it is only for required for Johansen?
Kris Longmore.
If you think about what the tests are doing, the answer to this becomes fairly obvious. The tests mentioned look for a unit root and/or stationarity of the time series in question. In this case, the time series is a spread created by the linear combination of the constituent currency pairs. Would it make much sense to test a spread that consists of, for example:
What would the units of the spread be?
Thank you for answering.
With two pairs with same quote currency, one unit moves have the same dollar values. So what you say is, unless we have this, the tests will not make any sense. Then for example for sgdchf vs zarjpy the pairs to test are sgdusd and zarusd, inverting the quotes or trading signals when necessary.
Am i correct with my interpretation.
Kris Longmore.
Assuming you want to trade a mean reverting spread that consists of SGD and ZAR, yes what you described is how I would approach it.
What about using 10 assets and combining them in groups of 3 with a loop and then calculate the eigenvalues of all those combinantions to get as an output the best cointegration portfolio?
Just a heads up:
You’re missing a negative here:
It should be, '-log(2) / lambda'
And caution to the lag function; I'm unsure which package was used, but you might be erroneously shifting the lag forward to y(t+1) by using '-1' if you're using the base. lag function. I like quantmod. Lag(y, k = 1).
Kris Longmore.
Thanks for pointing that out – you are absolutely correct on both counts. I’ve updated the code accordingly and found that the actual half life should be roughly 53 days, an increase over the 40 days calculated erroneously. I will some day get around to updating the affected results (ie the equity curves of the trading strategies that used the erroneous half life)!
Can you enlighten me as to the meaning, when both eigenvalues for a pair are the same sign? They are normally opposite… so I’m selling one and buying the other. The same sign seems to imply go long (or short) on both… which seems at odds with the pair trading methodology.
Riskmaverick.
Just came across your blog post while searching for the concept around half-life in mean reversion. I would be keen to know your thoughts around using Kalman filter to estimate hedge ratio. Would be even better if you have an example implementation in R.
Kris Longmore.
I think Kalman filtering is a great way to estimate hedge ratios. The optimal hedge ratio is rarely static, and Kalman filtering provides a sensible way to update it in real time taking into account the inherent uncertainty in its calculation.
Is there a easy way to ensure that the cointegration relationship is about to expire?
Kris Longmore.
I’m not sure of any easy way, but one reason these relationships break down is a structural change in the underlying relationship, for example following an earnings announcement that causes a sudden revaluation in one security. In that case, a different cointegrating relationship would probably emerge, once the jump or decline in price settled down to its new level. Another example that relates to the cointegration of ETFs that track the economies of two countries: a relationship could break down when one country’s economy shifts in some fundamental way, for example from a manufacturing to a service base. The two ETFs end up being exposed to different factors and so the cointegration relationship breaks down. In this case, it would happen more slowly.

Pairs trading mean reversion strategy


Obter através da App Store Leia esta publicação em nosso aplicativo!
Como construir uma cesta de reversão média?
Eu tenho jogado com pares de reversão significativos, mas parece que a maior parte da fruta de baixa suspensão (ou seja, pares) já foi espremida. Gostaria de começar com cestas significativas de reversão (> 2 títulos) para encontrar estratégias inexploradas e mais suculentas.
Por favor, você pode me orientar a recomendar livros, artigos, etc., sobre como construir tais cestas de reversão?
Existem várias abordagens que você poderia considerar. A idéia básica em todos eles é que você deseja encontrar um portfólio parado. No caso de dois ativos, é bem conhecido como realizar isso. Este artigo de Marcelo Perlin descreve uma abordagem: papers. ssrn / sol3 / papers. cfm? Abstract_id = 952782, mas não estou particularmente inclinado a usar isso. Alternately, see Section 4 of this paper by Attilio Meucci: papers. ssrn/sol3/papers. cfm? abstract_id=1404905 which provides a more general framework. Uma maneira de pensar sobre isso é que, se você organizar as principais carteiras (através da PCA) por variância, então as variantes mais baixas seriam mais estacionárias do que as mais variadas. However, you have to offset the fact that since they have less variance, there is less opportunity to make profitable trades.
O comércio de pares é apenas um tipo de arbitragem estatística (ver as referências na página da wikipedia). Parece que você está falando sobre "fatores" de negociação uns contra os outros. Fatores podem ser indústrias, tamanho, fundamentais ou puramente estatísticos.

Комментарии

Популярные сообщения из этого блога

Opções de volume de opções e resposta ao preço das ações para anúncios de ganhos

Opções binárias. Opções de volume de opções e resposta do preço das ações aos anúncios de ganhos. Amazon, Inc. (AMZN) Data do Relatório de Resultados - NASDAQ. Examinamos o efeito do volume de negociação de opções na resposta do preço das ações aos anúncios de ganhos Volume, Anúncio de ganhos, Preço das ações. Opções de volume de negócios e resposta ao preço das ações. Restricções de vendas curtas e ajustes de preços para anúncios de ganhos: comparamos a resposta aos anúncios de lucros no volume de negociação é de 8% ... Fato e fantasia no uso de opções - cfapubs. volume de negociação da resposta do índice KSE 100 aos anúncios de anúncios de preços ao consumidor e volume de negociação, relação entre Cpi e negociação de ações; Negociação de opções informadas antes de M & A A Announcements. Como é fundamental? Respostas no mercado de ações para receber anúncios Malick Sy, (volume de negócios), nível de preço das ações Fontes de dados: ... Glossário | Learn Options Trading - MarketCha...

Opções de stock de sirius xm

Opções de stock de Sirius xm. Opções de stock de Sirius xm. Opções de stock de Sirius xm. Расчет электрических сетей! A atividade de opções aumentou substancialmente hoje em Sirius XM Holdings Inc. (SIRI) com mais de 25 mil contratos de março de 2017 com US $ 4,50 com negociação em US $ 0. Sirius XM Holdings - Wikipedia. 01.07.2017 & # 0183; & # 32; Análise de estoque para Sirius XM Holdings Inc (SIRI: Viena), incluindo o preço das ações, o gráfico de ações, as notícias da empresa, as estatísticas-chave, os fundamentos e o perfil da empresa. Sirius XM Holdings Inc., SIRI Options Chain - (NASDAQ. Citações de preço de estoque de Sirius XM Radio (SIRI) em tempo real, gráfico de ações, notícias e amp; análise. Sirius XM Holdings Inc. (SIRI) Options Traders Eye an. 26.02.2018 & # 0183; & # 32; Investidores em Sirius XM Holdings Inc (NASD: SIRI) viram novas opções estarem disponíveis hoje, para a expiração de 10 de abril. No canal Opções de estoque, nosso. SIRI: Vienna Stock ...

O que significa quando você vê três corvos pretos

Você já viu corvos? O que o corvo simpatiza (mais do que a morte) Na outra manhã, corri para o meu carro para pegar minha bolsa quando eu ouvi o mais alto # 8220; CAW & # 8221; do meu lado. Olhei de volta para a minha casa e notei um corvo empoleirado na borda de uma janela. Quando eu olhei para ele, voltou a cair e voou para longe. Meu pensamento imediato foi: "Oh meu Deus, quem vai morrer?" # 8221; Sinceramente, não acho que estou sozinho pensando isso. Crows há muito simbolizam a morte porque são pássaros carrion, pássaros que se alimentam de animais mortos. Existem muitos mitos que envolvem aves carrion. Por exemplo, corvos e abutres são ditos simbolizar a guerra, a morte e o infortúnio, e até mesmo são ditos serem retratados como familiares de bruxas. Claro que isso é toda especulação e eu tenho certeza que muitas pessoas já disputam as representações místicas que os pássaros têm, então eu aconselho você a manter uma mente aberta se você optar por ler mais. Fatos do ...