Estratégia de negociação de pares em r


Guia para negociação de pares.
A negociação de pares é uma estratégia de negociação neutra de mercado que corresponde a uma posição comprada com uma posição vendida em um par de instrumentos altamente correlacionados, como duas ações, fundos negociados em bolsa (ETFs), moedas, commodities ou opções. Os operadores de pares aguardam a fraqueza na correlação e, em seguida, perdem tempo com o sub-performer, ao mesmo tempo que vendem em curto, o super-performer, fechando as posições à medida que o relacionamento retorna às normas estatísticas.
O lucro da estratégia é derivado da diferença na mudança de preço entre os dois instrumentos, e não da direção que cada um move. Portanto, um lucro pode ser realizado se a posição longa subir mais do que a curta, ou a posição curta cair mais do que a longa (em uma situação perfeita, a posição longa sobe e a posição curta cai, mas isso não é um requisito para fazendo um lucro). É possível para os comerciantes de pares lucrarem durante uma variedade de condições de mercado, incluindo períodos em que o mercado sobe, desce ou de lado - e durante períodos de baixa ou alta volatilidade. (Veja também: 4 fatores que moldam as tendências do mercado.)

Estratégia de negociação de pares em r
Obter via App Store Leia este post em nosso aplicativo!
Como voltar a testar estratégias de negociação de pares em R.
Eu estou tentando aprender sobre estratégia de negociação de pares e estou usando este pseudo código para escrever meu programa R.
Atualmente estou usando Systematic Investor Toolbox (SIT) para backtesting usando análise técnica, mas eu não sei como fazer backtest par estratégias de negociação usando SIT.
O problema atual é como simular a compra e venda de pares no SIT. Se SIT não pode fazer pares de estratégia de negociação de volta, em seguida, como devo executar estratégia de negociação de pares, especialmente entrando e saindo. Que lógica devo usar?
Depois de pesquisar um pouco, sei que podemos criar um backtester a partir do zero usando o PerformanceAnalytics; mas antes do teste de volta, temos que criar valores de sinal e retorno. Abaixo está um código de exemplo.
No código acima, a criação de sinal é fácil, mas para pares que trocam a lógica que devo usar para criar sinais e retornar para esses sinais?

Parear a estratégia de negociação: como usar o & quot; PairTrading & quot; pacote.
Este artigo mostra como você pode usá-lo.
O par de negociação é uma estratégia de negociação neutra no mercado e dá aos comerciantes a chance de lucrar, independentemente das condições do mercado. A ideia dessa estratégia é bem simples.
1: Selecione dois estoques (ou quaisquer ativos) que se movam de maneira semelhante.
2: Ações com desempenho inferior a curto prazo, compre um com baixo desempenho.
3: Se “spread” (diferença de preço entre dois estoques) convergir, feche sua posição.
Então, vamos começar a explicar como usar este pacote.
(Este exemplo está no manual em PDF deste pacote)
0: Instalar e carregar o pacote.
Você pode instalar e carregar o pacote “PairTrading” via CRAN da mesma forma que outros pacotes.
1: Carregar dados de amostra.
Preparamos os dados do preço das ações da amostra em nosso pacote. Você pode carregá-lo usando o comando “data”.
2: Estimar parâmetros.
Em seguida, extraímos dois preços das ações (a partir de 31 de março de 2008) e estimamos os parâmetros.
No momento, temos apenas um método de regressão linear normal para estimar parâmetros, mas vamos desenvolver um método mais sofisticado no futuro.
O resultado da estimativa contém o seguinte conteúdo.
O mais importante nessa estimativa é “espalhar”, então tentamos plotá-lo.
E você pode verificar a estacionariedade disso usando a função “IsStationary”.
Esta função retorna o resultado do teste de raiz unitária de dois tipos.
(teste aumentado de Dickey-Fuller (ADF) e teste de Phillips-Perron)
3: Estimar parâmetros para back-test.
Para executar o back-test, você precisa estimar os parâmetros historicamente usando a função “EstimateParametersHistorically“. Esta função faz algo como “regressão rolante” para estimar parâmetros. Este ponto é diferente da função “EstimateParameter”.
4: criar sinal de negociação.
Neste caso, o sinal de negociação é desenhado como abaixo.
ading sinal é.
5: desempenho do teste de volta.
Neste caso, nossa estratégia parece funcionar corretamente 🙂
6: Conclusão e observações.
Pode ser útil para você entender o conceito básico de par de negociação se estiver interessado nela.
Comentários estão fechados.
Posts populares recentes.
Artigos mais visitados da semana.
Jobs para usuários de R.
É alimentado por WordPress usando um design bavotasan.
Direitos autorais & copy; 2017 R-blogueiros. Todos os direitos reservados. Termos e Condições para este site.

Tutoriais
Veja também documentação, vídeos e chat.
Jing é um desenvolvedor quantitativo na QuantConnect. Ela tem um mestrado em Matemática Financeira da John Hopkins e trabalhou anteriormente na Northeast Securities fazendo pesquisas quantitativas.
Artigos recentes.
Pairs Trading & # 8211; Cópula vs Cointegração.
Em Tutoriais De Estratégia, Publicado em 13 de junho de 2017.
Investigamos dois métodos de negociação de pares e comparamos os resultados. O comércio de pares envolve investigar a estrutura de dependência entre dois ativos altamente correlacionados. Com a suposição de que ocorrerá reversão à média, posições longas ou curtas são inseridas na direção oposta quando há uma divergência de preços. Tipicamente, a distribuição do preço do ativo é modelada por uma distribuição Gaussiana de séries de retorno, mas a distribuição normal conjunta pode falhar em capturar algumas características-chave da dependência do preço dos pares de ações, como a dependência da cauda. Nós investigamos usando a teoria da cópula para identificar essas oportunidades de negociação.
Neste tutorial, discutiremos a estrutura básica da cópula a partir da perspectiva matemática e explicaremos como aplicar a abordagem em pares de negociação. A implementação do algoritmo baseia-se no papel Trading estratégias com copulas [1] Stander Y, Marais D, Botha I. Estratégias de negociação com cópulas [J]. Revista de Ciências Econômicas e Financeiras, 2013, 6 (1): 83-107. Cópia Online do Stander Y, Marais D, Botha I (2013). Comparamos o desempenho da estratégia de negociação de pares de cópulas com o método de negociação de pares de co-integração baseado no artigo Estratégias de negociação de arbitragem estatística e negociação de alta frequência da Hanson TA, Hall J R. (2012) [2] Hanson TA, Hall J R. Estratégias de negociação de arbitragem estatística e negociação de alta frequência [J]. 2012.. A técnica de cointegração assume uma relação de cointegração entre equidades pareadas para identificar oportunidades de negociação lucrativas. Os resultados empíricos sugerem que a estratégia baseada em cópulas é mais lucrativa do que as técnicas tradicionais de negociação de pares.
Estrutura do Copula.
1. Definição.
Dado um vetor aleatório, suas funções de distribuição cumulativa marginal (CDFs) são. Aplicando a transformada integral de probabilidade a cada componente, as distribuições marginais de são uniformes (da Wikipedia).
Então a cópula de é definida como a função de distribuição cumulativa da junção, para a qual a distribuição marginal de cada variável U é uniforme como.
A função de cópulas contém todas as características de dependência das distribuições marginais e descreverá melhor a relação linear e não linear entre variáveis, usando probabilidade. Eles permitem que as distribuições marginais sejam modeladas independentemente umas das outras, e nenhuma suposição sobre o comportamento conjunto dos marginais é necessária. [3] Rad H, Baixo R K Y, Faff R. A rentabilidade das estratégias de negociação de pares: métodos de distância, cointegração e cópula [J]. Financiamento Quantitativo, 2016, 16 (10): 1541-1558.cópia online.
2. Cópulas Bivariadas.
Uma vez que esta pesquisa se concentra em cópulas bivariadas (para a troca de pares, temos duas variáveis ​​aleatórias), algumas propriedades probabilísticas são especificadas.
Seja X e Y duas variáveis ​​aleatórias com função de probabilidade cumulativa e. que são uniformemente distribuídos. Então a função da cópula é. Tomando a derivada parcial da função cópula sobre U e V daria a função de distribuição condicional da seguinte forma:
3. Cópulas Arquimedianas.
Existem muitas funções de cópula que nos permitem descrever estruturas de dependência entre variáveis, além da hipótese gaussiana. Aqui vamos nos concentrar três destes; as fórmulas Clayton, Gumbel e Frank cópula da classe de Arquimedes.
Cópulas arquimedianas [4] Mahfoud M, Michael M. Cópulas arquimedianas bivariadas: uma aplicação a dois índices do mercado de ações [J]. BMI Paper, 2012. A cópia on-line é baseada nas transformações de Laplace das funções de distribuição univariada. Eles são construídos por uma função geradora particular [5]. Os pares baseados em cópulas de alta frequência são negociados nos US Goldmine Stocks [J]. 2016.
A função de densidade de probabilidade é:
Onde é o inverso da segunda derivada da função geradora.
Genest e MacKay (1986) [6] Genest, C. e MacKay, J., 1986, A Alegria de Copulas: Distribuições Bivariadas com Margens de Uniforme, The American Statistician, 40, 280-283 provaram que a relação entre a função de gerador de cópula e a correlação de classificação de Kendall tau no caso bivariado pode ser dada por:
Assim, podemos estimar facilmente o parâmetro em cópulas arquimedianas se soubermos a medida de classificação tau de Kendall e a função geradora. Por favor, consulte o passo 3 para ver as fórmulas.
Parte I: Método Cópula.
Os ETFs têm muitos setores de ações e classes de ativos diferentes que nos fornecem uma ampla gama de pares que negociam candidatos. Nosso conjunto de dados consiste em dados diários dos ETFs negociados na NASDAQ ou na NYSE.
Utilizamos os primeiros 3 anos de dados para escolher o melhor par de cópula e ativo ("período de formação"). Em seguida, utilizamos um período de 5 anos, de 2011 a 2017 ("o período de negociação"), para executar a estratégia. Durante o período de negociação, usamos uma janela de dados de 12 meses para obter os parâmetros da cópula ("período de formação de rolamento").
Etapa 1: Selecionando os estoques pareados.
O método geral de seleção de pares é baseado na análise fundamental e estatística. [7] Jean Folger. Pares que negociam a cópia em linha do exemplo.
1) Monte uma lista de pares potencialmente relacionados.
Quaisquer pares aleatórios podem ser correlacionados. É possível que essas variáveis ​​não estejam causalmente relacionadas entre si, mas por causa de uma relação espúria devido à coincidência ou à presença de um certo terço, fator invisível. Assim, é importante começarmos com uma lista de títulos que têm algo em comum. Para esta demonstração, escolhemos alguns dos ETFs mais líquidos negociados na Nasdaq ou na NYSE. O relacionamento para esses pares potencialmente relacionados pode ser devido a uma sobreposição de índice, setor ou classe de ativos. por exemplo. QQQ e XLK são dois ETFs que rastreiam os índices líderes do mercado.
2) Filtrar o par de negociação com correlação estatística.
Para determinar quais pares de ações incluir na análise, as correlações entre os pares de ETF pré-selecionados são analisadas. Abaixo estão três tipos de medidas de correlação que costumamos usar nas estatísticas:
= número de concordantes.
= número de discordantes.
= a diferença entre as classificações dos valores correspondentes e.
Podemos obter esses coeficientes em Python usando funções da biblioteca de estatísticas do SciPy. As correlações foram calculadas usando os retornos diários dos preços das ações durante o período de formação. Encontramos que as 3 técnicas de correlação dão aos ETFs pareados o mesmo ranking de coeficientes de correlação. A correlação de Pearson assume que ambas as variáveis ​​devem ser distribuídas normalmente. Assim, aqui usamos o Kendall rank como medida de correlação e escolhemos os pares com a maior correlação de rank de Kendall para implementar a negociação de pares.
Obtemos o preço de fechamento histórico diário de nosso par de ETFs usando a função Histórico e convertendo os preços em uma série de devolução de registros. Indique e denote a série histórica de preços de ações para ações xe ações y. Os retornos de log para o par de ETFs são dados por:
t = 1,2. n onde n é o número de dados de preço.
Etapa 2: Estimando Distribuições Marginais de log-retorno.
Para construir a cópula, precisamos transformar a série log-return e dois valores uniformemente distribuídos uev. Isso pode ser feito estimando as funções de distribuição marginais de ee conectando os valores de retorno a uma função de distribuição. Como não fazemos suposições sobre a distribuição das duas séries de log-retorno, aqui usamos a função de distribuição empírica para abordar a distribuição marginal e. A função ECDF do Python da biblioteca statsmodel nos fornece o CDF empírico como uma função de etapa.
Etapa 3: Estimando os Parâmetros do Copula.
Como discutido acima, estimamos o parâmetro cópula teta pela relação entre a cópula e a medida de dependência tau de Kendall, para cada uma das cópulas de Arquimedes.
Etapa 4: Selecionando a melhor cópula de adaptação.
Uma vez que recebemos a estimativa de parâmetros para as funções da cópula, usamos os critérios da AIC para selecionar a cópula que fornece o melhor ajuste na inicialização do algoritmo.
onde é a função log-likelihood ek é o número de parâmetros, aqui k = 1.
As funções de densidade de cada função da cópula são as seguintes:
A cópula que fornece o melhor ajuste é aquela que corresponde ao menor valor do critério da AIC. O par escolhido é "QQQ" & amp; "XLK".
Etapa 5: Gerando os Sinais de Negociação.
As funções da cópula incluem todas as informações sobre as estruturas de dependência de duas séries de retorno. Segundo Stander Y, Marais D, Botha I (2013) [8] Stander Y, Marais D, Botha I. Estratégias de negociação com copulas [J]. Revista de Ciências Econômicas e Financeiras, 2013, 6 (1): 83-107. Cópia Online, a cópula ajustada é usada para derivar as faixas de confiança para a função de distribuição marginal condicional de, ou seja, os índices de preço errado. Quando as observações de mercado estão fora da faixa de confiança, é uma indicação de que a oportunidade de negociação de pares está disponível. Aqui escolhemos 95% como a faixa de confiança superior, 5% como a faixa de confiança mais baixa, conforme indicado no artigo. O nível de confiança foi selecionado com base em uma análise de backtest no artigo, que mostra que usar 95% parece levar a oportunidades comerciais apropriadas a serem identificadas.
Dados os retornos atuais do estoque X e o estoque Y, definimos os "índices de precificação incorreta" como:
Para mais provas matemáticas, por favor, consulte Xie W, Wu Y (2013) [9] Xie W, Wu Y. estratégia de negociação de pares baseada em Copula [C] // Asian Finance Association (AsFA) 2013 Conference. doi. 2013, 10.
As fórmulas de probabilidade condicional de cópulas bivariadas podem ser derivadas tomando derivadas parciais das funções da cópula mostradas na Tabela 1. Os resultados são os seguintes:
Após a seleção de pares de negociação e as cópulas melhor ajustadas, seguimos os seguintes passos para negociação. Por favor, note que implementamos os Passos 1, 2, 3 e 4 no primeiro dia de cada mês usando os dados diários dos últimos 12 meses, o que significa que nossas funções empíricas de distribuição e parâmetros de cópula são atualizadas uma vez por mês. Em resumo, a cada mês:
Durante o período de formação de 12 meses, os preços de fechamento diários são usados ​​para calcular os retornos diários de log para o par de ETFs e, em seguida, calcular a correlação de classificação de Kendall. Estime as funções de distribuição marginal dos retornos de log de X e Y, que são ecdf_x e ecdf_y separadamente. Plugue o tau de Kendall nas funções de estimativa de parâmetros da cópula para obter o valor de theta. Execute a regressão linear nas duas séries de preços. O coeficiente é usado para determinar quantas ações das ações X e Y comprar e vender. Por exemplo, se o coeficiente for 2, para cada X ação comprada ou vendida, 2 unidades de Y serão vendidas ou compradas.
Finalmente, durante o período de negociação, a cada dia convertemos os retornos atuais para uev usando as funções de distribuição empírica ecdf_x e ecdf_y. Depois disso, dois índices de precificação são calculados a cada dia de negociação usando a cópula estimada C. O algoritmo constrói posições curtas em X e posições longas em Y nos dias que e. Constrói posições curtas em Y e posições longas em X nos dias que e.
Parte II: Método de Cointegração.
Para o método de negociação de pares de cointegração, escolhemos o mesmo par de ETF "GLD" & amp; "DGL". Não há necessidade de escolher uma função de cópula, portanto há apenas um período de formação de 12 meses. O período de negociação é de 5 anos, de janeiro de 2011 a maio de 2017.
Etapa 1: gere a série de propagação.
No início de cada mês, geramos a série de preços de log de dois ETFs com o fechamento diário. Em seguida, a série de spread é estimada usando a análise de regressão com base nos dados da série de preços de log.
Para as ações X e Y, executamos a regressão linear sobre a série de preços de log e obtemos o coeficiente β.
Etapa 2: calcular o limite.
Usando o desvio padrão do spread durante o período de formação, um limite de dois desvios-padrão é definido para a estratégia de negociação, conforme indicado no documento.
Etapa 3: configurar os sinais de negociação.
Em cada dia de negociação, entramos em uma negociação sempre que o spread se move mais do que dois desvios padrão de sua média. Em outras palavras, construímos posições curtas em X e posições longas em Y no dia em que se espalhou & gt; significa + 2 * std. Construímos posições curtas em Y e posições compradas em X no dia em que se espalhou & lt; mean-2 * std. O comércio é encerrado se o spread reverter ao seu equilíbrio (definido como menos de metade de um desvio padrão do spread zero).
O valor da média e do desvio padrão é calculado a partir do período de formação contínua e será atualizado uma vez por mês.
Conclusão.
Em última análise, a negociação em pares pretende capturar a divergência de preços de dois ativos correlacionados por meio da reversão da média. Nossos resultados demonstram que a abordagem da cópula para a troca de pares é superior ao método de cointegração convencional, porque é baseada na probabilidade da estrutura de dependência, versus cointegração, que depende da variação de regressão linear simples da precificação normal. Encontramos através do teste do desempenho do método da cópula menos sensível aos parâmetros iniciais. Como o método de cointegração depende da distribuição padrão e os pares de ETFs tinham baixa volatilidade, havia poucas oportunidades de negociação.
Geralmente, os ETFs não são muito voláteis e, portanto, a reversão à média não oferece muitas oportunidades de negociação. Existem apenas 39 negociações durante 5 anos para o método de cointegração.
Observa-se que o uso de cópula em pares de negociação proporciona mais oportunidades de negociação, uma vez que não requer quaisquer pressupostos rígidos [10] Liew R Q, Wu Y. Pares de negociação: A abordagem da cópula [J]. Journal of Derivatives & amp; Hedge Funds, 2013, 19 (1): 12-30. .
Backtest para o método copula.
Colaboradores
Referências.
`Oi Jing Wu. Obrigado por um excelente artigo. Eu tenho uma pergunta, mas pode ser porque eu estou entendendo mal o seu código Python (meu fundo é em C #). A teoria afirma que a série de retorno de log é dada por ln (P_x, t / P_x, t-1), porém em seu código parece que você está retornando apenas ln (P_x, t), na seguinte linha de código: np. log ([float (z) para z em close_price]). Por favor, deixe-me saber o que estou perdendo. Obrigado.
Você está falando sobre a cointegração? Teoricamente, ln (Pt) deve ser usado em vez disso, se o log retornar.
Desculpe, um erro de digitação para minha última resposta:
Por favor, ignore meu comentário / pergunta anterior, eu percebo que o & # 8220; diff & # 8221; função cuida disso & # 8211; Matemática 101
Oi Jing Wu, eu tenho backtested sua estratégia do período de 2010-01-01 a 2017-09-11. No entanto, a partir de setembro de 2012, beta, liquidez e alavancagem parecem ser constantes. Existe alguma intuição para isso? Eu não acho que o código está quebrado, mas estou apenas curioso para ver qual seria a intuição de causar tal resultado.
Isso pode porque não há novo comércio naquele momento. Para negociação de pares, isso significa que a condição de negociação não é acionada.
Muito obrigado por este post muito interessante. É muito útil ter todo o raciocínio e fórmula tão claramente explicados e sintetizados.
Eu tenho 2 observações sobre o algoritmo embora:
+ o ajuste de Gumbel feito no conjunto de calibração [2006 - 2009] não funciona. Isso não impede o algoritmo, e o último escolhe a cópula de Frank no final, mas só decide usar o AIC para Frank e Clayton. A razão pela qual o ajuste em Gumbel não funciona vem de 2 divisões por 0, devido aos valores u ou v.
+ um post acima menciona o beta muito alto do algoritmo e eu concordo que é surpreendente para uma estratégia de par. Este beta alto é particularmente interessante quando se comparam simplesmente os resultados do algoritmo e o S & amp; P. Correções locais dos estoques dos EUA no 3T15 e no 1T16 são visíveis na cópula como se fossem ações de longo prazo. Tomei a liberdade de calcular a posição líquida diária em cada componente do par selecionado [isto é, XLK e QQQ]. Parece que a partir do final de 2010 até o final o algoritmo é LONG BOTH ETFs e quase não altera a posição. Eu posso estar totalmente errado, mas eu acho que isso explica o beta, as liquidações e o tamanho repentino dos negócios.
Oi, Jing Wu, eu tenho backtested sua estratégia, mas eu não pareço entender exatamente como as posições são feitas. De acordo com a guia Comércio, apenas pequenas quantidades de ativos subjacentes são negociadas.
Meu raciocínio é esse. Suponha que eu tenha $ 100.000 e que haja um sinal das cópulas para comprar A (atualmente os preços são de $ 10) e o de curto B (atualmente custa $ 20). Eu compro 10 000 ações de A e curto 5 000 ações de B?
Quanto tempo estarei nesta posição? Até o final do dia / dia seguinte ou até que outro sinal ocorra? Obrigado.
Oi Fraty, sim, aqui eu alocar 40% de capital em cada ação. Mas a razão entre as ações A e B baseia-se no coeficiente de regressão do preço histórico de dois ativos, e não apenas no preço no dia de negociação. A posição é alterada até que outro sinal ocorra.
Olá Jing, Muito obrigado por seu excelente artigo e por apresentar o método aplicando Copula para parear o comércio 🙂
Com relação aos sinais de negociação que você mencionou, "construímos posições curtas em X e posições longas em Y no dia em que o spread for & gt; significa + 2 * std. Construímos posições curtas em Y e posições compradas em X no dia em que spread & lt; mean-2 * std. & Quot;
Como estamos regredindo Y em X, então, se o spread "normalizado", (spread-mean) / sd, for maior do que dois desvios-padrão, isso significa que Y está com desempenho superior a X e, portanto, gostaríamos de reduzir o spread , o que significa que vamos curto em Y (que é o estoque de alto desempenho) e Long X (que é o estoque de baixo desempenho).
Olá eu sou um par de estudantes de negociação, e eu sou apenas iniciante,
Eu quero executar seu código e entender a lógica, mas não consigo ver.
todo o seu código .. se você se importar peça que você envie para mim código completo.
Eu não sou tão bom em inglês porque eu sou coreano Me desculpe por isso!
Espero que sua resposta. obrigado.
O código está no final da página. Basta clicar no código & # 8216; & # 8217; guia do backtest anexado ou clone o algoritmo você verá o código.
Bom trabalho. Às vezes, podemos estar interessados ​​em saber quando e por que a suposição de reversão à média prevalece. Seria tentador introduzir novas ideias para confirmar a propriedade de reversão à média nos momentos de negociação. Seu trabalho é incrível, espero que seja melhor.
Ótimo post. Eu não sou um programador python, então estou puxando meu cabelo convertendo isso para o MATLAB. Mas, nas linhas de código a seguir, parece-me que a ordem de calcular os retornos de log é diferente:
1. logreturn [self. ticker [j]] = np. diff (np. log ([float (z) para z em close]))
2. return_x = np. log (flutuante (self. price_list [self. syl [0]] [- 1] /self. price_list [self. syl [0]] [- 2]))
Em (1) o log do preço é diferenciado, mas em (2) a diferença é registrada?
(1) e (2) são os mesmos porque log (A / B) = log (A) & # 8211; log (B)
Você pode por favor explicar o que as seguintes linhas fazem?
% Converte os dois retornos para valores uniformes uev usando as funções de distribuição empírica.
Presumivelmente, não é simplesmente: ecdf_x, ecdf_y = ECDF (x), ECDF (y)?
Por que o algoritmo coupla só comercializa o QQQ / XLK? Eu fiz um backtest a partir de 01/01/2006 e só este par é negociado.
Levando a discussão para o uso de Cópula em outras áreas (eu sou um comerciante de opções) & # 8230;.wikipedia diz: "Enquanto a aplicação de cópulas em crédito passou por popularidade, bem como infelicidade durante o crise financeira global de 2008-2009, [29] é indiscutivelmente um modelo padrão do setor para preços de CDOs. Copulas também foram aplicadas a outras classes de ativos como uma ferramenta flexível na análise de produtos derivativos de múltiplos ativos. A primeira aplicação desse tipo fora do crédito foi usar uma cópula para construir uma superfície de volatilidade de cesta implícita, [30] levando em conta o sorriso de volatilidade dos componentes da cesta. Copulas, desde então, ganhou popularidade em preços e gestão de risco [31] de opções em multi-ativos, na presença de volatilidade sorriso / skew, & # 8221; Isso significa construir um sorriso de volatilidade para as opções da SPX usando os sorrisos de volatilidade de seus componentes? Este é um problema que enfrentei inúmeras vezes como gerente de posição. Obrigado.
Pode esta abordagem da cópula emparelhar o trabalho de negociação em um período de tempo muito mais curto & # 8230; .. dizer gráfico de 3 a 5 minutos onde você está procurando por uma frequência muito maior de negociações?
Obrigado pelo seu trabalho e parece bom. No entanto, ainda tenho uma preocupação com o resultado do teste de volta. Suponho que você calcule o sinal com base no preço de fechamento de cada dia das ações. Quando há um sinal, você entra na posição com o mesmo preço de ação ou preço do dia seguinte? Se você usar o preço de fechamento do mesmo dia, talvez não consiga obter a negociação. Eu realmente aprecio você pode deixar mais claro. Obrigado novamente pelo excelente trabalho.
O sinal é decidido por ontem, mas a posição é inserida com base no preço atual. O LEAN cuidará disso para evitar o viés de antecipação.
Graças Jing! Isso torna o teste de retorno mais confiável. Ótimo trabalho!

Par Estratégia de Negociação e Backtesting usando Quantstrat.
Um recente Webinar Apresentação de Marco Nicolas Dibo.
Este webinar perspicaz sobre negociação de pares e dados de sourcing abrange os fundamentos da estratégia de negociação de pares, seguidos de dois exemplos. No primeiro exemplo, Marco cobre a estratégia de negociação de pares para diferentes ações negociadas na mesma bolsa, e no segundo exemplo, Marco ilustrou a estratégia de pares para diferentes futuros de commodities negociados em diferentes bolsas. Marco também detalha as diferentes fontes de dados, incluindo o Quandl, que pode ser usado para criar estratégias de negociação.
Este artigo é o projeto final submetido pelo autor como parte de seu curso no Executive Program em Algorithmic Trading (EPAT) da QuantInsti. Confira nossa página de projetos e veja o que nossos alunos estão construindo.
Marco passou sua carreira como comerciante e gerente de portfólio, com um foco particular nos mercados de ações e derivativos. Ele é especialista em finanças quantitativas e negociação algorítmica e atualmente atua como chefe da Quantitative Trading Desk e vice-presidente da Argentina Valores SA Marco também é co-fundador e CEO da Quanticko Trading SA, uma empresa dedicada ao desenvolvimento de estratégias de negociação de alta frequência e software de negociação. Marco é bacharel em Economia e mestre em Finanças pela Universidade de San Andrés.
Introdução.
Uma das minhas aulas favoritas durante a EPAT foi a arbitragem estatística, então a estratégia de negociação em pares pareceu uma boa ideia para mim. Minha estratégia desencadeia novas ordens quando a relação par dos preços das ações diverge da média. Mas, para trabalhar, primeiro temos que testar o par a ser cointegrado. Se o coeficiente par é cointegrado, a razão é reversão-média e quanto maior a dispersão de sua média, maior a probabilidade de reversão, o que torna o comércio mais atraente. Eu escolhi o seguinte par de ações:
A idéia é a seguinte: Se encontrarmos duas ações correlacionadas (elas correspondem ao mesmo setor), e a proporção de pares divergir de um certo limite, nós encurtaremos o estoque que é caro e compraremos aquele que é barato. Uma vez que eles convergem para a média, fechamos as posições e lucramos com a reversão.
Lógica de Estratégia de Negociação.
A lógica é simples. O algoritmo calcula a pontuação Z diária para cada par de ações. O escore Z é o número de desvios padrão que a relação do par divergiu da média:
Onde R é a razão de preço de ambos os estoques, μ é a média da razão e σ é o desvio padrão da relação de preço.
Uma vez que a pontuação Z está fora de um certo limite, preenchemos a primeira condição necessária para enviar um pedido.
Mas o algoritmo também deve atender a uma segunda condição: calcula o teste de Dickey Fuller aumentado para o par de estoques. Mais especificamente, obtém o valor p do teste. Em seguida, compara-o com um nível de significância definido (alfa) e, se o valor p for menor que o alfa, isso significa que as séries de razão de preço são estacionárias e a segunda condição é atendida. Se ambas as condições forem atendidas, o algoritmo compra o perdedor e vende o vencedor. As regras de saída se aplicam em um determinado limite de pontuação Z. Para a otimização da estratégia, as variáveis ​​que usei foram as seguintes:
Limites de entrada do Z-Score Limites de saída do Z-Score Segunda condição (cointegração) Verdadeiro ou Falso.
Detalhes do código e Backtest no exemplo:
O período in-sample para o backtesting foi de 01-01-2009 a 31-12-2012. O escore Z foi calculado usando os seguintes parâmetros:
Média móvel do índice de preço: 20 dias Desvio padrão do índice de preço: 20 dias Janela de teste do ADF: 60 dias Capital inicial = 100.000 USD Quantidades de compra / venda de spread = 3000.
Quando encurtarmos o spread, estamos vendendo "C & # 8221; e comprando & # 8220; BAC & # 8221; e quando compramos o spread, estamos fazendo o oposto. Eu usei biblioteca quantstrat [1] para backtesting a estratégia. Vamos mergulhar no código:
Como mencionado anteriormente, usarei a biblioteca quantsrat para otimizar minha estratégia. Para usar a quantstrat, primeiro precisamos definir e inicializar instrumentos, estratégia, portfólio, conta e ordens:
Então, calculamos e adicionamos à estratégia nossos dois indicadores para a estratégia:
& # 8211; Teste ADF (Verdadeiro ou Falso)
No gráfico a seguir, podemos ver a evolução do escore Z durante o período e os valores possíveis para o limiar, onde a razão reverte para a média e os valores extremos. Eu defino algumas linhas no limiar da pontuação Z +/- 2, onde parece haver uma reversão da proporção do par. Este valor do z-score significa que a relação do par é +/- desvios-padrão da sua média.
Agora, definimos nossas variáveis ​​de otimização:
Como podemos ver em nosso resumo, existem 2 indicadores, 7 sinais e 3 regras definidas em nossa estratégia. Agora podemos executar o backtest, verificar as transações e o desempenho da nossa estratégia.
A otimização foi feita com os seguintes valores para as variáveis:
Do backtest na amostra, obtivemos os seguintes resultados:
Desta tabela podemos obter os valores das variáveis ​​que otimizam a estratégia. À primeira vista parece que há 3 candidatos (caso 4, caso 6 e caso 8). Se compararmos entre os casos 6 e 8 chegamos à conclusão de que o caso 8 é o melhor, pois tem um índice de Sharpe anualizado maior e lucro para rebaixamento máximo, uma porcentagem maior de negócios positivos, um patrimônio final maior e com o mesmo número de comércios. Então agora ficamos com apenas 2 candidatos: 4 e 8. Se nós apenas estivéssemos verificando o que tem o maior índice anualizado de Sharpe, preferiríamos o caso 4. O caso 8 também não leva em conta que a série deve ser cointegrado, e caso 4, portanto, isso seria outra vantagem para o caso 4. Mas se levarmos em conta o número de transações, o lucro para o rebaixamento máximo, o patrimônio final, a porcentagem de negócios positivos e o fato de que diferença na relação de Sharpe não é uma grande diferença, nós definitivamente selecionaremos o caso 8 como nosso melhor candidato.
Fora do Backtest de Amostra:
Agora que otimizamos a estratégia e obtivemos os valores ideais para os parâmetros, podemos executar uma amostra da blacktest e ver como a estratégia funciona. O período fora da amostra para o teste de retorno vai de 01-01-2013 a 31-12-2015 e os valores otimizados para os limites e regras foram os seguintes:
Limite de Compra do Z-Score = -2 Limite de Venda do Z-Score = 2 Limite de Saída Longo do Z-Score = -1 Limite de Saída Curto do Z-Score = 1 Teste do ADF = Falso.
O gráfico a seguir mostra as diferentes transações, a equidade final e os resultados de redução para nossa estratégia:
Da tabela abaixo podemos ver que os resultados do backtest out of sample não são tão bons quanto os que obtivemos do backtest in sample.
O índice de Sharpe anualizado ainda é positivo, mas menor do que o 3,52 obtido anteriormente. O lucro para o rebaixamento máximo é bem pior do que o 4,23, mas o rebaixamento máximo diminuiu de 16327 para 8641. Nossa estratégia oferece um retorno acumulado de 16,04% e um retorno anualizado de 5,08% durante os três anos em que foi implementado.
Conclusão.
A ideia quando comecei o Programa Executivo em negociação algorítmica era aprender como modelar uma estratégia de negociação quantitativa, fazer o backtest e depois otimizá-la. Graças aos meus professores e ao pessoal da QuantInsti, sinto que o objetivo foi alcançado. Tudo no curso foi excelente e recomendaria a todos os interessados ​​em aprender negociação algorítmica.
Próximos passos.
Para entender as estatísticas por trás do Pair Trading, Correlation e Cointegration, dê uma olhada no nosso post aqui. Aprenda a aplicação da reversão à média e otimize os parâmetros de negociação usando este modelo Excel para download.
Se você é um codificador ou um profissional de tecnologia olhando para iniciar sua própria mesa de negociação automatizada. Aprenda negociação automatizada de palestras interativas ao vivo por profissionais diários. O Programa Executivo em Negociação Algorítmica abrange módulos de treinamento, como Estatísticas & amp; Econometria, Computação Financeira & amp; Tecnologia e Algoritmica & amp; Negociação Quantitativa. Inscreva-se agora!

R Página de desenvolvimento.
Pacotes R contribuídos.
Abaixo está uma lista de todos os pacotes fornecidos pelo projeto PairTrading.
Nota importante para os binários do pacote: O R-Forge fornece esses binários apenas para a versão mais recente do R, mas não para versões mais antigas. Para instalar com sucesso os pacotes fornecidos no R-Forge, você precisa alternar para a versão mais recente do R ou, alternativamente, instalar a partir das fontes de pacotes (.tar. gz).
par clássico de negociação baseado em cointegração em finanças.
Construa códigos de status.
0 - Atual: o pacote está disponível para download. O pacote correspondente passou verificações na plataforma Linux e Windows sem ERRORs.
1 - Planejado para compilação: o pacote foi reconhecido pelo sistema de compilação e fornecido na área de preparação.
2 - Construção: o pacote foi enviado para as máquinas de construção. Ele será construído e verificado usando a última versão corrigida do R. Observe que ele está incluído em um lote de vários pacotes. Assim, esse processo levará algum tempo para ser concluído.
3 - Falha ao criar: o pacote falhou ao criar ou não passou as verificações na plataforma Linux e / ou Windows. Não é disponibilizado, pois não atende às políticas.
4 - Conflitos: existem dois ou mais pacotes com o mesmo nome. Nenhum deles será construído. Os mantenedores são solicitados a negociar novas ações.
5 - Offline: o pacote não está disponível. O sistema de compilação pode estar offline ou o mantenedor do pacote não acionou uma reconstrução (feito, por exemplo, através do envio para o repositório de pacotes).
Se o seu pacote não for exibido nesta página ou não estiver sendo construído, verifique o relatório de status do sistema de construção.

Comments