Sunday, 11 March 2018

Estratégia de negociação de pares matlab


MatlabTrading.


Blog para MATLAB & # 174; usuários interessados ​​em estratégias de negociação algorítmica, backtesting, pares de negociação, arbitragem estatística etc.


Quarta-feira, 7 de dezembro de 2016.


Teste e Análise de Estratégias de Negociação Algorítmica no MATLAB (Parte 4) & # 8211; Algorítmos genéticos.


Otimização de Algoritmos Genéticos.


Apesar do fato de que o princípio do algoritmo genético (evolucionário) é muito bem explicado nos webinars do MathWorks, nos exemplos, no entanto, ele é usado apenas para otimização da escolha de um grupo de estratégia de um conjunto. Este é um bom exemplo do uso destes algoritmos, no entanto, acontece que há uma necessidade de definir muitas variáveis ​​com intervalos significativos para uma estratégia, você não consegue com uma iteração e a paralelização de processos & # 8211; cálculos podem levar vários dias. Certamente, existem estratégias no estágio final de otimização, quando quase certamente sabemos que a estratégia de negociação é bem-sucedida, podemos esperar vários dias ou alugar todo o cluster - o resultado pode valer a pena. No entanto, se precisamos "estimar" os resultados de uma estratégia "volumosa" e decidir se vale a pena gastar o tempo, então os algoritmos genéticos podem ser perfeitamente adequados.


Método linear & # 8211; é um modo usual de ordenação no qual você verá todos os resultados intermediários (sub-ótimos). Dá máxima precisão. Método paralelo & # 8211; todos os kernels da sua CPU serão usados. Não permite ver resultados intermediários, mas acelera significativamente a operação. Dá máxima precisão durante o aumento da velocidade de cálculo. Método genético & # 8211; ele usa o algoritmo de otimização evolutiva. Permite ver valores sub-ótimos, mas dá o resultado próximo ao melhor. Não é um método muito preciso, mas é preciso o suficiente para a "execução" inicial da estratégia. Muito rápido.


Segunda-feira, 5 de dezembro de 2016.


Teste e Análise de Estratégias de Negociação Algorítmica no MATLAB (Parte 3) & # 8211; Visualização do Processo.


Visualização do processo de teste.


Em minha experiência de trabalho, muitas vezes analisei outras plataformas populares para testes de estratégia de negociação, como TradeStation, MetaStock, Multicharts etc. e sempre fiquei surpreso com a pouca atenção dada à visualização do processo de teste. O problema é que, quando não vemos os resultados dos valores intermediários e sub-ótimos dos parâmetros otimizados, muitas vezes jogamos ouro fora junto com a sujeira. A questão é por causa de uma amostragem excessivamente ampla, a estratégia ajusta os parâmetros da maneira como vemos uma "estratégia perfeita" que falha na vida real ou vê uma ou duas transações, que são supostamente as melhores porque foram selecionados esses dados de intervalo de tempo onde a melhor estratégia de negociação seria comprar e manter, mas por que outras estratégias são necessárias?


E se houver mais de 4 dimensões? Quando você vê quais sinais e em que frequência eles aparecem na faixa de preço, você tem quase toda a representação visual necessária de sua estratégia: a frequência das transações, sua lucratividade (curva de renda), a precisão da abertura, a semelhança com outras valores sub-ótimos, etc .; isso não pode ser dito sobre o desempenho no espaço N-dimensional, onde toda a informação útil é, de fato, que o valor ótimo não é apenas um, mas há toda uma gama de valores sub-ótimos em uma ou mais áreas.


Enquanto otimiza uma estratégia no WFAToolbox & # 8211; Walk-Forward Analysis Toolbox para MATLAB & # 174 ;, como um novo valor ótimo é encontrado, os sinais da estratégia de negociação no período in-sample e out-of-sample aparecem imediatamente no gráfico, para que você possa sempre controlar qual faixa de opções você deve atribuir, e também pode pausar a otimização sem esperar pelo fim do teste, pois fica claro que algo deu errado ou está tudo bem.


Quarta-feira, 30 de novembro de 2016.


Teste e Análise de Estratégias de Negociação Algorítmica no MATLAB (Parte 2) & # 8211; GUI fácil de usar.


GUI fácil de usar.


Vamos começar com o fato de que não há interface gráfica porque se presumimos que quase todo o processo de teste e análise de estratégias de negociação é padronizado (é 99%), você gostaria de ter a interface que ajuda a chamar os dados necessários. e inicie o processo de teste com um clique.


Para usuários novos (e não apenas) do MATLAB, é muito mais conveniente usar uma GUI com botões e campos de entrada do que pesquisar no código; Portanto, há uma GUI, mesmo nas caixas de ferramentas MathWorks, na maioria dos casos, porque é mais conveniente. Ele permite focar apenas no código da sua estratégia, porque o uso de uma GUI não implica, de forma alguma, que ela limita de alguma forma sua capacidade de escrever uma estratégia.


Assim, no WFAToolbox, criamos a possibilidade de escrever qualquer código para sua estratégia, usando qualquer uma das caixas de ferramentas do MATLAB e trabalhando com múltiplos ativos para as estratégias como negociação de pares, negociação de cestas ou arbitragem tripla, etc .; mas, ao mesmo tempo, esse código é facilmente integrado à GUI por meio de padrões, que são simples o suficiente para serem aplicados no código e não limitam as oportunidades.


Terça-feira, 29 de novembro de 2016.


Teste e Análise de Estratégias de Negociação Algorítmica no MATLAB (Parte 1) - Introdução.


Como tudo começou.


Foi em 2008 (se não me engano) quando o primeiro webinar sobre negociação algorítmica no MATLAB com Ali Kazaam foi lançado, abordando o tópico de otimização de estratégias simples baseadas em indicadores técnicos, etc. apesar de um caótico & # 8220; 8221; código, ferramentas eram interessantes o suficiente para usar. Eles serviram como ponto de partida para pesquisa e aprimoramento de um modelo de teste e análise que permitiria usar todo o poder das caixas de ferramentas e a liberdade das ações do MATLAB durante a criação das próprias estratégias comerciais, ao mesmo tempo em que permitiria controlar o processo. de teste e os dados obtidos e sua análise posterior escolheria carteira eficaz de sistemas de negociação robustos.


Por que todo Algotrader deveria reinventar a roda?


No entanto, o Mathworks não ofereceu uma solução completa para testes e análises das estratégias & # 8211; Esses códigos que você poderia obter dos webinars eram os únicos "elementos" de um teste completo do sistema, e era necessário modificá-los, personalizá-los e adicioná-los à GUI para facilitar o uso. Foi muito demorado, colocando-se uma questão: seja qual for a estratégia, ela deve passar pelo mesmo processo de teste e análise, o que permitiria classificá-la como estável e utilizável & # 8211; então, por que todo algotrader deveria reinventar a roda e escrever seu próprio código para estratégias de teste adequadas no MATLAB?


Decidimos chamar a solução WFAToolbox - Walk-Forward Analysis Toolbox, cuja versão demo está disponível no wfatoolbox desde 2013.


Segunda-feira, 7 de novembro de 2016.


Uau?! O que aconteceu com o blog?


O que aconteceu com o blog?


1. Jev Kuznetsov não é mais o dono.


2. Nós mudamos a marca.


O que vai acontecer com o blog?


1. Mais posts e artigos.


Esperamos trazer vida a este blog publicando conteúdos relevantes uma ou duas vezes por semana. Nos primeiros meses, postaremos na maior parte os artigos e vídeos que já temos para facilitar aos nossos queridos leitores a busca de informações sobre um recurso e ter links neles.


A negociação de pares de arbitragem estatística / reversão à média / estratégias de negociação de mercado neutras baseadas em cointegração / bandas de bollinger / filtro de kalman etc para commodities, ações e Forex. Estratégias de acompanhamento de tendências com a média móvel de Jurik e outros filtros digitais sofisticados; Estratégias de previsão com aprendizado de máquina (Support Vector Machines) e outros métodos; Criação de estratégias de negociação robustas usando o gerenciamento visual de dinheiro para reinvestir seu capital (ciência sobre como obter $ 1M de $ 10K em um ano com recompensas máximas, mas estimadas de risco e suor). Talvez depois de ler isso você tenha pensado que esse vai ser um outro artigo idiota para aqueles pobres rapazes que procuram como se tornar rico através da "negociação no forex" e tudo mais. Bem, isso é totalmente falso! Estamos trabalhando no MATLAB, e a maioria de nós somos cientistas e especialistas nesse aspecto, então tudo é sério.


2. Mais interatividade.


Terça-feira, 1 de janeiro de 2013.


Reversão média intradiária.


As regras são simples e semelhantes à estratégia que testei no último post:


Se o retorno da barra do par exceder 1 na pontuação z, troque a próxima barra.


O resultado parece muito bonito:


Se você acha que esse gráfico é bom demais para ser verdade, infelizmente é realmente o caso. Nenhum custo de transação ou spread bid-ask foi considerado. Na verdade, duvido que restaria algum lucro depois de subtrair todos os custos de negociação.


Ainda assim, esse tipo de gráfico é a cenoura pendurada na frente do meu nariz, me fazendo continuar.


Domingo, 30 de dezembro de 2012.


Os pares estão negociando mortos?


A partir desses etfs, 90 pares exclusivos podem ser feitos. Cada par é construído como um spread neutro de mercado.


Em cada dia, para cada par, calcule o z-score com base no desvio padrão de 25 dias.


Se z-score & gt; limiar, ir curto, fechar no dia seguinte.


Se z-score & lt; - limite vai longo, feche no dia seguinte.


Aqui estão os resultados simulados para vários limites:


Esta não é a primeira vez que me deparo com essa mudança no comportamento de reversão da média no etfs. Não importa o que eu tentei, eu não tive sorte em encontrar uma estratégia de negociação de pares que funcionaria em ETFs após 2010. Minha conclusão é que esses tipos de modelos stat-arb simples simplesmente não funcionam mais.


WFAToolbox - Caixa de ferramentas de análise Walk-Forward.


MATLAB Add-on para o desenvolvimento de estratégias de negociação algorítmica no MATLAB, o caminho mais fácil.


O MATLAB emparelha a estratégia de negociação.


Esta demo utiliza o MATLAB e a Caixa de Ferramentas do Desenvolvedor Technical Analysis (TA) para criar e testar uma estratégia de negociação de pares. A caixa de ferramentas TA Developer complementa as caixas de ferramentas de finanças computacionais existentes adicionando funcionalidades avançadas de backtesting, como backtesting de portfólio, cálculo de métricas de negociação padrão e uma interface gráfica interativa que permite a aplicação de indicadores técnicos via drap & drop.


Exemplo: Austrália - Canadá espalhado.


Este primeiro passo na criação de uma estratégia de negociação de pares é a escolha de dois instrumentos financeiros historicamente correlacionados. A estratégia de negociação de pares aproveita a divergência de curto prazo inserindo uma posição curta em um instrumento e uma posição longa no outro. A estratégia pressupõe que o par convergirá a longo prazo. Por ser curto em um instrumento e por longo tempo no instrumento correlato, essa estratégia é neutra em termos de mercado. Por exemplo, se o mercado de ações quebra lucros de curto prazo, um instrumento deve compensar as perdas da posição longa. Nesta demonstração, usamos o fato de que a Austrália e o Canadá são dois países ricos em recursos que têm uma correlação econômica e estatística, conforme explicado aqui:


Baixando os dados.


Para a estratégia de negociação de pares, usamos o índice iShares MSCI Australia (EWA) como proxy para a economia australiana e o Índice iShares MSCI Canada (EWC) como proxy para a economia canadense. Os dados podem ser baixados do Yahoo finance usando o script getyahoo10.m da troca de arquivos MATLAB. O getyahoo10.m faz o download de 10 anos de dados diários do Yahoo finance e salva os arquivos baixados no diretório especificado.


Os dados baixados podem então ser importados para o TA Developer Toolbox, conforme descrito aqui:


Criando um novo arquivo m de estratégia.


Uma estratégia de negociação consiste em uma função MATLAB com um único parâmetro chamado sys. O parâmetro sys contém dados do sistema de negociação como os preços de abertura, alta, baixa e fechamento de uma ação ou futuro. Vamos adicionar regras de entrada e saída de negociação a este arquivo-m da estratégia de negociação. Nenhuma gravação adicional do código de backtesting é necessária. O back-back e a avaliação de desempenho são todos manipulados pela caixa de ferramentas do desenvolvedor Technical Analysis (TA). A estratégia de negociação vazia deve ser semelhante a esta e aos servidores como ponto de partida para cada estratégia de negociação.


Definindo os símbolos primário e secundário.


Em nossa estratégia de negociação, começamos com a definição dos nomes dos símbolos dos instrumentos primários e secundários, bem como o nome da watchlist que foi selecionado durante a importação de dados. Colocar esses valores em variáveis ​​permite ajustar facilmente a estratégia a outros pares posteriormente.


Parâmetros de negociação.


Os parâmetros de negociação podem ser usados ​​em uma varredura de parâmetro. Se não estivermos executando uma varredura de parâmetro, esses parâmetros serão padronizados para o segundo parâmetro passado para a função 'GetTradingParameter'.


Cálculo e plotagem da razão, média, desvio padrão e z-score.


Relação entre primário (EWA) e secundário (EWC)


Calcule o escore z e plote os limites. O escore z indica quantos desvios padrão uma observação está acima ou abaixo da média.


Sinais primários de entrada e saída.


O ZScoreUpper é padronizado como 1,5 e o ZScoreLower é definido como 1. Portanto, inserimos uma posição curta no primário (EWA) quando o escore z excede 1,5 desvios padrão (linha vermelha superior) e saímos da posição curta quando o escore z cai abaixo de 1 padrão desvio (linha verde superior).


Adicionar posição longa quando o escore z cair abaixo de -1,5 desvios padrão (linha vermelha inferior) e sair da posição longa quando o escore z subir acima de -1 desvio padrão (linha verde inferior).


Sinais de entrada e saída secundários.


Alterne para o contexto secundário (EWC). Todas as funções chamadas após 'SwitchSymbol' são executadas no símbolo secordary até que 'RestoreSymbol' seja chamado.


Backtesting a estratégia.


Digite 'tadeveloper' no prompt de comando do MATLAB para abrir a interface gráfica com o usuário do TA Developer. Clique em Arquivo & gt; Abrir no menu e navegue até o local onde você salvou a estratégia PairsTradingStrategy. m e abra o arquivo.


Antes de executar a estratégia, precisamos definir alguns parâmetros primeiro. No canto inferior direito, há uma janela chamada Propriedades. Esta janela contém parâmetros de execução importantes. Vamos definir o capital inicial para a simulação como 100000. O tipo de posição é definido como 'Porcentagem' e o valor da posição é definido como 50, o que significa que 50% do capital disponível é usado por comércio.


Certifique-se de que o nó raiz da lista de controle esteja selecionado na janela Símbolos. Você deveria ver o painel de backtest. Pressione o botão verde Play para iniciar a simulação.


Avaliação de desempenho.


Quando a estratégia é executada com sucesso, a guia "Estatísticas" fica disponível. Ele mostra várias métricas de negociação, como o retorno anualizado, o índice de Sharpe, a razão de Sortino, o índice de úlcera, o número de transações e muito mais. Essas métricas são divididas em 'All' (para todos os negócios simulados), 'Long' (somente para negociações longas) e 'Short' (somente para negociações curtas). Além da página de métricas, uma lista de todas as negociações executadas e uma curva de capital são calculadas e exibidas.


Varredura de parâmetro.


Até agora, usamos 1,5 como um limite superior e 1 como um limite inferior para o escore z para entrar e sair da nossa posição de propagação. O MATLAB facilita a execução de uma varredura de parâmetros para executar vários valores para determinar os valores ideais dos parâmetros. Os passos envolvidos na execução de uma varredura de parâmetro são explicados aqui MATLAB Algo Trading sob o subtítulo 'Parmeter Optimization'.


Escolha o seu país.


Escolha o seu país para obter conteúdo traduzido onde estiver disponível e veja eventos e ofertas locais. Com base na sua localização, recomendamos que você selecione:.


Você também pode selecionar um local na lista a seguir:


Am & eacute; rica Latina (Español) Canadá (inglês) Estados Unidos (inglês)


Bélgica (inglês) Dinamarca (inglês) Deutschland (Deutsch) España (Español) Finland (inglês) France (Français) Ireland (inglês) Italia (Italiano) Luxembourg (inglês)


Holanda (inglês) Noruega (inglês) Österreich (Deutsch) Portugal (inglês) Sweden (inglês) Switzerland Deutsch English Français Reino Unido (inglês)


Ásia-Pacífico.


Austrália (inglês) Índia (inglês) Nova Zelândia (inglês) 中国 (简体 中文) 日本 (日本語) 한국 (한국어)


Explorar produtos.


Experimente ou compre.


Aprenda a usar.


Obtenha suporte.


Sobre o MathWorks.


Acelerando o ritmo da engenharia e da ciência.


MathWorks é o desenvolvedor líder de software de computação matemática para engenheiros e cientistas.


O MATLAB emparelha a estratégia de negociação.


Esta demo utiliza o MATLAB e a Caixa de Ferramentas do Desenvolvedor Technical Analysis (TA) para criar e testar uma estratégia de negociação de pares. A caixa de ferramentas TA Developer complementa as caixas de ferramentas de finanças computacionais existentes adicionando funcionalidades avançadas de backtesting, como backtesting de portfólio, cálculo de métricas de negociação padrão e uma interface gráfica interativa que permite a aplicação de indicadores técnicos via drap & drop.


Exemplo: Austrália - Canadá espalhado.


Este primeiro passo na criação de uma estratégia de negociação de pares é a escolha de dois instrumentos financeiros historicamente correlacionados. A estratégia de negociação de pares aproveita a divergência de curto prazo inserindo uma posição curta em um instrumento e uma posição longa no outro. A estratégia pressupõe que o par convergirá a longo prazo. Por ser curto em um instrumento e por longo tempo no instrumento correlato, essa estratégia é neutra em termos de mercado. Por exemplo, se o mercado de ações quebra lucros de curto prazo, um instrumento deve compensar as perdas da posição longa. Nesta demonstração, usamos o fato de que a Austrália e o Canadá são dois países ricos em recursos que têm uma correlação econômica e estatística, conforme explicado aqui:


Baixando os dados.


Para a estratégia de negociação de pares, usamos o índice iShares MSCI Australia (EWA) como proxy para a economia australiana e o Índice iShares MSCI Canada (EWC) como proxy para a economia canadense. Os dados podem ser baixados do Yahoo finance usando o script getyahoo10.m da troca de arquivos MATLAB. O getyahoo10.m faz o download de 10 anos de dados diários do Yahoo finance e salva os arquivos baixados no diretório especificado.


Os dados baixados podem então ser importados para o TA Developer Toolbox, conforme descrito aqui:


Criando um novo arquivo m de estratégia.


Uma estratégia de negociação consiste em uma função MATLAB com um único parâmetro chamado sys. O parâmetro sys contém dados do sistema de negociação como os preços de abertura, alta, baixa e fechamento de uma ação ou futuro. Vamos adicionar regras de entrada e saída de negociação a este arquivo-m da estratégia de negociação. Nenhuma gravação adicional do código de backtesting é necessária. O back-back e a avaliação de desempenho são todos manipulados pela caixa de ferramentas do desenvolvedor Technical Analysis (TA). A estratégia de negociação vazia deve ser semelhante a esta e aos servidores como ponto de partida para cada estratégia de negociação.


Definindo os símbolos primário e secundário.


Em nossa estratégia de negociação, começamos com a definição dos nomes dos símbolos dos instrumentos primários e secundários, bem como o nome da watchlist que foi selecionado durante a importação de dados. Colocar esses valores em variáveis ​​permite ajustar facilmente a estratégia a outros pares posteriormente.


Parâmetros de negociação.


Os parâmetros de negociação podem ser usados ​​em uma varredura de parâmetro. Se não estivermos executando uma varredura de parâmetro, esses parâmetros serão padronizados para o segundo parâmetro passado para a função 'GetTradingParameter'.


Cálculo e plotagem da razão, média, desvio padrão e z-score.


Relação entre primário (EWA) e secundário (EWC)


Calcule o escore z e plote os limites. O escore z indica quantos desvios padrão uma observação está acima ou abaixo da média.


Sinais primários de entrada e saída.


O ZScoreUpper é padronizado como 1,5 e o ZScoreLower é definido como 1. Portanto, inserimos uma posição curta no primário (EWA) quando o escore z excede 1,5 desvios padrão (linha vermelha superior) e saímos da posição curta quando o escore z cai abaixo de 1 padrão desvio (linha verde superior).


Adicionar posição longa quando o escore z cair abaixo de -1,5 desvios padrão (linha vermelha inferior) e sair da posição longa quando o escore z subir acima de -1 desvio padrão (linha verde inferior).


Sinais de entrada e saída secundários.


Alterne para o contexto secundário (EWC). Todas as funções chamadas após 'SwitchSymbol' são executadas no símbolo secordary até que 'RestoreSymbol' seja chamado.


Backtesting a estratégia.


Digite 'tadeveloper' no prompt de comando do MATLAB para abrir a interface gráfica com o usuário do TA Developer. Clique em Arquivo & gt; Abrir no menu e navegue até o local onde você salvou a estratégia PairsTradingStrategy. m e abra o arquivo.


Antes de executar a estratégia, precisamos definir alguns parâmetros primeiro. No canto inferior direito, há uma janela chamada Propriedades. Esta janela contém parâmetros de execução importantes. Vamos definir o capital inicial para a simulação como 100000. O tipo de posição é definido como 'Porcentagem' e o valor da posição é definido como 50, o que significa que 50% do capital disponível é usado por comércio.


Certifique-se de que o nó raiz da lista de controle esteja selecionado na janela Símbolos. Você deveria ver o painel de backtest. Pressione o botão verde Play para iniciar a simulação.


Avaliação de desempenho.


Quando a estratégia é executada com sucesso, a guia "Estatísticas" fica disponível. Ele mostra várias métricas de negociação, como o retorno anualizado, o índice de Sharpe, a razão de Sortino, o índice de úlcera, o número de transações e muito mais. Essas métricas são divididas em 'All' (para todos os negócios simulados), 'Long' (somente para negociações longas) e 'Short' (somente para negociações curtas). Além da página de métricas, uma lista de todas as negociações executadas e uma curva de capital são calculadas e exibidas.


Varredura de parâmetro.


Até agora, usamos 1,5 como um limite superior e 1 como um limite inferior para o escore z para entrar e sair da nossa posição de propagação. O MATLAB facilita a execução de uma varredura de parâmetros para executar vários valores para determinar os valores ideais dos parâmetros. Os passos envolvidos na execução de uma varredura de parâmetro são explicados aqui MATLAB Algo Trading sob o subtítulo 'Parmeter Optimization'.


Algorithmic Trading com MATLAB: negociação de pares.


Esta demonstração mostra como a funcionalidade dentro da Econometric Toolbox pode ser usada para identificar e calibrar uma estratégia simples de negociação de pares intradiários.


Copyright 2010-2012, The MathWorks, Inc. Todos os direitos reservados.


Carregar dados intraday de um banco de dados.


Como antes, faremos download de dados intradicionais para Brent Crude (LCO) da nossa base de dados. Também faremos o download de dados correspondentes ao West Texas Intermediate (WTI).


A estrutura de teste de cointegração.


O Econometrics Toolbox suporta os frameworks de cointegração Engle-Granger e Johansen. Engle-Granger é o modelo mais antigo e Johansen é particularmente útil para analisar mais de duas séries temporais de cada vez. Nós usaremos Engle-Granger para o nosso modelo de negociação.


Mesmo assim, há janelas menores de tempo em que existe um relacionamento de cointegração.


O teste estima os coeficientes da regressão de cointegração, bem como os resíduos e os erros padrão dos resíduos: todas as informações úteis para qualquer estratégia de negociação de pares.


A estratégia de negociação de pares.


A função a seguir descreve nossa estratégia de pares. É basicamente uma cópia de nossos outros arquivos de estratégia existentes, com mudanças significativas para apenas cerca de 7 linhas de código.


Podemos testar essa estratégia conforme fazemos nossas outras regras:


Podemos usar nossa estrutura de varredura de parâmetro existente para identificar a melhor combinação de janela de calibração e frequência de rebalanceamento. Isso se baseia no código existente e aproveita a computação paralela:


Apesar do fato de que essas séries temporais de rastreamento histórico divergiram, ainda podemos criar uma estratégia de negociação de pares lucrativa recalibrando com frequência.


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 as 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 de probabilidade integral 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 de funções de distribuição univariadas. 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 Marginais Uniformes, 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, 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) Conferência de 2013. 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 a mais de 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 para o 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 compara 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!

No comments:

Post a Comment