QuantStart.
O que é a Aprendizagem de Máquinas?
E por que isso é útil para financiamento quantitativo?
O aprendizado de máquina faz uso de algoritmos que aprendem a executar tarefas como a predição ou a classificação sem serem explicitamente programadas para fazê-lo. Essencialmente, os algoritmos aprendem com dados em vez de serem pré-especificados.
Tais algoritmos são incrivelmente diversos e variam a partir de modelos estatísticos mais tradicionais que enfatizam a inferência através de arquiteturas de redes neurais "profundas" altamente complexas que se destacam nas tarefas de predição e classificação.
Ao longo dos últimos dez anos, o aprendizado da máquina tem feito ganhos constantes no setor de finanças quantitativas e despertou o interesse de grandes fundos quantitativos, incluindo Man AHL, DE Shaw, Winton, Citadel e Two Sigma para citar alguns.
Os algoritmos de aprendizagem de máquinas podem ser aplicados de maneiras incrivelmente diversas para financiamento quantitativo. Exemplos particulares incluem:
Previsão de movimentos dos preços dos ativos futuros Previsão de movimentos de liquidez devido ao resgate de capital em grandes fundos Determinação de ativos com preços baixos em nichos de mercado Processamento de linguagem natural do sentimento e previsões do analista de ações Classificação / reconhecimento de imagem para uso em sinais de oferta / demanda de commodities.
Infelizmente, muito do trabalho sobre a aplicação de algoritmos de aprendizagem de máquinas para estratégias de negociação em financiamento quantitativo é proprietário e, portanto, dificil de obter. No entanto, com a prática, pode-se ver como tomar determinados conjuntos de dados e encontrar alfa consistente.
O aprendizado de máquina é uma área ampla e não é um campo que pode ser dominado rapidamente. Os seguintes recursos ensinarão o básico, permitindo que você mergulhe mais profundamente em áreas específicas:
Domínios de Aprendizagem de Máquinas.
Quais são as diferentes áreas de estudo na aprendizagem automática?
As tarefas de aprendizagem de máquinas geralmente são categorizadas em três áreas principais, muitas vezes dependendo do tipo de dados que estão sendo analisados: aprendizado supervisionado, aprendizado sem supervisão e aprendizado de reforço.
Todos os métodos diferem em como o algoritmo de aprendizagem da máquina é "recompensado" por estar correto em suas previsões ou classificações.
Aprendizagem supervisionada - Os algoritmos de aprendizagem supervisionados envolvem dados rotulados. Ou seja, dados que foram rotulados, muitas vezes manualmente, com categorias (como na classificação supervisionada) ou com respostas numéricas (como na regressão supervisionada). Tais algoritmos são treinados sobre os dados e aprendem quais preditores correspondem a quais respostas. Quando aplicados em dados não vistos, eles tentam fazer previsões com base na experiência de treinamento anterior. Um exemplo de financiamento quantitativo seria usando regressão supervisionada para prever o preço das ações de amanhã a partir do valor do mês anterior de dados de preços.
Aprendizagem não supervisionada - Os algoritmos de aprendizagem não supervisionados não utilizam dados rotulados. Em vez disso, eles utilizam a estrutura subjacente dos dados para identificar padrões. O método canônico é clustering não supervisionado, que tenta particionar conjuntos de dados em subclusters que estão associados de alguma forma. Um exemplo de financiamento quantitativo seria agrupar certos ativos em classes que se comportam de forma semelhante para ajustar alocações de portfólio. Leia mais sobre Aprendizagem não supervisionada aqui.
Aprendizagem de reforço - Os algoritmos de aprendizagem de reforço tentam realizar uma tarefa dentro de um determinado ambiente dinâmico, tomando ações dentro do meio ambiente para maximizar um mecanismo de recompensa. Esses algoritmos diferem da aprendizagem supervisionada na medida em que não existe um conjunto direto de pares de dados de entrada / saída. Tais algoritmos tornaram-se famosos recentemente porque foram usados pelo Google DeepMind para ultrapassar o desempenho humano nos jogos Atari e no antigo jogo de Go. Tais algoritmos foram aplicados no financiamento quantitativo para otimizar as carteiras de investimentos.
Algoritmos de Aprendizado de Máquinas.
Quais são os diferentes algoritmos?
Devido à sua natureza interdisciplinar, há um grande número de algoritmos diferentes de aprendizagem de máquinas. A maioria surgiu das comunidades de informática, engenharia e estatística.
A lista de algoritmos de aprendizagem de máquina é quase infinita, pois incluem técnicas de cruzamento e conjuntos de muitos outros algoritmos. No entanto, os algoritmos utilizados com frequência no financiamento quantitativo estão listados abaixo:
Regressão linear - Uma técnica supervisionada elementar de estatística clássica que encontra uma superfície de resposta linear ideal a partir de um conjunto de pares preditores-resposta rotulados. Classificação linear - Essas técnicas supervisionadas classificam os dados em grupos, em vez de prever respostas numéricas. As técnicas comuns incluem Regressão Logística, Análise Discriminante Linear e Classificação Naive Bayes. Métodos baseados em árvores - As árvores de decisão são uma técnica supervisionada que divide o espaço preditor / característica em subconjuntos hipercubicos. Conjuntos de árvores de decisão incluem as florestas aleatórias. Support Vector Machines - SVMs são uma técnica supervisionada que tenta criar um limite de separação linear em espaço de dimensões superiores do que o problema original, a fim de lidar com a separação não linear. Redes Neurais Artificiais / Aprendizagem Profunda - As redes neurais são uma técnica supervisionada que cria hierarquias de "neurônios" de ativação que podem se aproximar de funções não lineares de alta dimensão. As redes "profundas" fazem uso de muitas camadas ocultas de neurônios para formar representações hierárquicas para o desempenho de classificação do estado da arte. Bayesian Networks - Bayesian Networks ou "Bayes Nets" são um modelo de modelo probabilístico que representa relações probabilísticas entre variáveis. Eles são utilizados tanto para aplicações de inferência quanto de aprendizagem. Clustering - Clustering é uma técnica não supervisionada que tenta dividir dados em subconjuntos de acordo com alguns critérios de similaridade. Uma técnica comum é K-Means Clustering. Redução de Dimensionalidade - Os algoritmos de redução de dimensão são técnicas não supervisionadas que tentam transformar o espaço de preditores / fatores em outro conjunto que explica a "variação" nas respostas com menos dimensões. A Análise de Componentes Principais é a técnica canônica aqui.
Determinar a "melhor ferramenta para o trabalho" é um dos aspectos mais complicados do aprendizado de máquina aplicado às finanças quantitativas. Muitos artigos sobre o QuantStart discutem este ponto específico e o guiarão a aplicar a técnica correta quando apropriado.
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.
Aprendizagem de máquina aplicada às estratégias de quantidade do mundo real.
Finalmente. implementar estratégias de negociação avançadas usando análises de séries temporais, aprendizado de máquinas e estatísticas bayesianas com as linguagens de programação de código aberto R e Python, para resultados diretos e acionáveis na rentabilidade de sua estratégia.
Tenho certeza de que você notou a sobreaturação de tutoriais iniciantes em Python e referências de estatísticas / máquinas que estão disponíveis na internet.
Poucos tutoriais realmente lhe dizem como aplicá-los às suas estratégias de negociação algorítmicas de uma forma de ponta a ponta.
Existem centenas de livros didáticos, artigos de pesquisa, blogs e postagens do fórum sobre análises de séries temporais, econometria, aprendizagem mecânica e estatísticas bayesianas.
Quase todos eles se concentram na teoria.
E sobre a implementação prática? Como você usa esse método para sua estratégia? Como você realmente programa essa fórmula no software?
Eu escrevi o Advanced Algorithmic Trading para resolver esses problemas.
Fornece aplicação em tempo real da análise de séries temporais, da aprendizagem mecânica estatística e das estatísticas bayesianas, para produzir diretamente estratégias de negociação rentáveis com software open source livremente disponível.
500 páginas mais de técnicas quantitativas de negociação e gerenciamento de riscos profissionais Métodos avançados avançados implementados em código R e Python fáceis de ler Faça o download da tabela de conteúdo.
Você está feliz com a programação básica, mas quer aplicar suas habilidades para uma negociação de quantidade mais avançada.
Se você leu meu livro anterior, Algoritmo de negociação bem sucedida, você terá a chance de aprender algumas habilidades básicas de Python e aplicá-las a estratégias de negociação simples.
No entanto, você cresceu além de estratégias simples e quer começar a melhorar a sua rentabilidade e a introduzir algumas técnicas de gestão de risco robustas e profissionais para o seu portfólio.
No Advanced Algorithmic Trading, examinamos detalhadamente algumas das bibliotecas de recursos quantitativos mais populares para Python e R, incluindo pandas, scikit-learn, statsmodels, QSTrader, timeseries, rugarch e previsão entre muitos outros.
Usaremos essas bibliotecas para analisar uma grande quantidade de métodos nos campos das estatísticas bayesianas, análises de séries temporais e aprendizado de máquinas, utilizando esses métodos diretamente na pesquisa de estratégia comercial.
Nós aplicamos essas ferramentas em um cenário de backtesting e gerenciamento de riscos de ponta a ponta, usando as bibliotecas R e QSTrader, permitindo que você "encaixe-as" facilmente em sua infra-estrutura comercial atual.
Não há necessidade de um software de Quant-The-Shelf Quant.
Você pode gastar muito dinheiro comprando algumas ferramentas de backtesting sofisticadas no passado e, em última instância, encontrou-os difíceis de usar e não relevantes para o seu estilo de negociação de quant.
O Advanced Algorithmic Trading faz uso de software de código aberto completamente gratuito, incluindo bibliotecas Python e R, que possuem comunidades experientes e acolhedoras por trás delas.
Mais importante ainda, aplicamos essas bibliotecas diretamente aos problemas de negociação quantitativa do mundo real, como geração alfa e gerenciamento de riscos de portfólio.
"Mas eu não tenho um doutorado em estatísticas".
Enquanto a aprendizagem de máquinas, análises de séries temporais e estatísticas bayesianas são temas quantitativos, eles também contêm uma riqueza de métodos intuitivos, muitos dos quais podem ser explicados sem recurso a matemática avançada.
No Advanced Algorithmic Trading, nós fornecemos não só a teoria para ajudá-lo a entender o que você está implementando (e melhorá-lo você mesmo!), Mas também tutoriais detalhados de codificação passo a passo que tomam as equações e aplicam-os diretamente ao real estratégias .
Assim, se você é uma codificação muito mais confortável do que com a matemática, você pode facilmente seguir os trechos e começar a trabalhar para melhorar a rentabilidade da sua estratégia.
Sobre o autor.
Então, quem está por trás disso?
Oi! Meu nome é Mike Halls-Moore e eu sou o cara do QuantStart e o pacote 'Advanced Algorithmic Trading'.
Desde que trabalhei como um desenvolvedor de negociação quantitativa em um hedge fund, fiquei apaixonada pela pesquisa e implementação de negociação quantitativa.
Eu comecei a comunidade QuantStart e escrevi 'Advanced Algorithmic Trading' para expor práticas de quasing quasing para os métodos utilizados em hedge funds quantitativos e empresas de gerenciamento de ativos.
Quais são os tópicos incluídos no livro?
Você receberá um guia de iniciante completo para análise de séries temporais, incluindo características de retorno de ativos, correlação serial, o ruído branco e modelos de caminhada aleatória.
Proporcionaremos uma discussão aprofundada dos modelos ARAA e Autoregressivos Condicionais Heteroskedastic (ARCH) usando o ambiente estatístico R.
Continuaremos a discussão sobre as séries temporais cointegradas da Negociação Algorítmica bem sucedida e consideramos o teste de Johansen, aplicando-o às estratégias da ETF.
Você encontrará uma discussão aprofundada sobre como o Filtro de Kalman pode ser usado para criar relações de hedge dinâmicas entre pares de recursos do ETF, usando ferramentas Python livremente disponíveis.
Você receberá uma introdução aos modelos de Markov escondidos e como eles podem ser aplicados em dados financeiros para fins de detecção de regime.
Descobriremos exatamente o que é o "aprendizado da máquina estatística", incluindo a aprendizagem supervisionada e não supervisionada, e como eles podem nos ajudar a produzir estratégias de negociação sistemáticas rentáveis.
Em primeiro lugar, usaremos a técnica familiar de regressão linear, tanto no sentido de Bayesian quanto no clássico, como meio de ensinar conceitos de aprendizado de máquina mais avançados.
Eu falarei sobre um dos conceitos mais importantes no aprendizado de máquina, ou seja, o trade-off de tendência de tendência e como podemos minimizar seus efeitos usando a validação cruzada.
Eu discutirei uma das famílias de modelo ML mais versáteis, ou seja, os modelos Árvore de Decisão, Floresta Aleatória e Árvore Boosada, e como podemos aplicá-las para prever os retornos de ativos.
Vamos discutir a família de Classificadores de vetores de suporte, incluindo o Support Vector Machine, e como podemos aplicá-lo a séries de dados financeiros.
Vou explicar como você pode aplicar técnicas de aprendizagem sem supervisão, como K-Means Clustering para dados financeiros da barra OHLCV, a fim de agrupar "velas" em regimes.
Discutiremos como aplicar métodos de aprendizagem de máquinas a um grande corpus de documentos de linguagem natural e prever categorias em dados de teste não vistos, como um precursor de modelos baseados em sentimentos.
Vou fornecer uma introdução completa aos modelos de probabilidade bayesiana, incluindo um olhar detalhado sobre a inferência, que constitui a base para modelos mais complexos ao longo do livro.
Você aprenderá sobre MCMC, em particular o algoritmo Metropolis-Hastings, que é uma das principais técnicas de amostragem em estatísticas bayesianas, usando o software PyMC3.
Examinaremos os modelos de volatilidade estocástica sob uma estrutura bayesiana, usando estes para identificar períodos de grande volatilidade do mercado para gerenciamento de risco.
Quais habilidades técnicas você aprenderá?
Você será apresentado à R, que é um dos ambientes de pesquisa mais amplamente utilizados em hedge funds quantitativos e gerentes de ativos. Utilizaremos muitas bibliotecas, incluindo timeseries, rugas e previsões.
Usaremos R e Python para estimar o desempenho da nossa estratégia ao longo do tempo, o que nos permite produzir curvas de decaimento da estratégia. Isso ajudará a determinar se uma estratégia precisa ser aposentada ou ainda é viável e lucrativa.
Nós aprofundaremos os recursos avançados do scikit-learn, a biblioteca ML do Python, incluindo a otimização de parâmetros, a validação cruzada, a paralelização e a produção de modelos preditivos sofisticados.
Como criar backtests eficientes em vetorizados e orientados para eventos para pesquisas preliminares, com hipóteses reais de custo de transação e gerenciamento de posição, usando R e a popular biblioteca QSTrader.
Apresentaremos o PyMC3, a modelagem bayesiana flexível ou o kit de ferramentas "Programação Probabilística" e a amostra de Monte Carlo de cadeia de Markov para nos ajudar a realizar uma inferência Bayesiana efetiva em dados de séries temporárias financeiras.
Continuaremos a discussão sobre o gerenciamento de riscos de livros anteriores e analisaremos a detecção de regime e a volatilidade estocástica como forma de determinar nosso atual nível de risco e alocação de portfólio.
Quais estratégias de negociação e gerenciamento de risco você implementará?
Vamos apresentar o nosso quadro de backtesting com carteiras ETF mensais reequilibradas a longo prazo, em vários mercados financeiros, comparando nossos resultados com um benchmark.
Examinaremos uma técnica de séries temporais lineares com base no modelo ARIMA + GARCH em uma série de índices de ações e veremos como o desempenho da estratégia muda ao longo do tempo.
Vamos aplicar o Bayesian Kalman Filter às séries temporais cointegradas para estimar dinamicamente a relação de cobertura entre pares de ativos, melhorando uma estimativa estática de uma relação de hedge tradicional.
Usaremos modelos de Markov ocultos para produzir um modelo de detecção de regime de volatilidade. Isso será usado para vetar ordens em uma tendência de curto prazo seguindo a estratégia para aumentar a lucratividade.
Usaremos inúmeras técnicas de aprendizagem de máquinas, como as florestas aleatórias, para prever a direção e o nível dos ativos, regredindo contra outros recursos transformados.
Usaremos dados de fornecedores de análise de sentimentos para gerar um gerador de sinal comercial baseado em sentimentos, aplicando-o a um conjunto de ações S & amp; P500 em vários setores de mercado.
Onde você pode aprender mais sobre mim?
Eu escrevi mais de 200 posts no QuantStart cobrindo negociação sistemática, cujas carreiras, desenvolvimento de software e aprendizado de máquina. Você pode ler os arquivos para saber mais sobre minha metodologia e estratégias de negociação.
E se você não está feliz com o livro?
Embora eu pense que você encontrará Advanced Algorithmic Trading muito útil em sua educação de negociação quantitativa, também acredito que, se você não estiver 100% satisfeito com o livro por qualquer motivo, você pode devolvê-lo sem perguntas pedidas para um reembolso total.
Você receberá uma cópia impressa do livro?
Não. Nesta fase, o livro só está disponível no formato Adobe PDF, enquanto o próprio código é fornecido como um arquivo zip de scripts R e Python totalmente funcionais, se você comprar a opção "Livro + Software".
Qual pacote você deve comprar?
Isso depende principalmente do seu orçamento. O livro com código fonte extra completo é o melhor se você quiser inserir o código imediatamente, mas o próprio livro contém uma quantidade enorme de fragmentos de código que ajudarão seu processo de negociação de quant.
Posso ser contatado?
Claro! Se você ainda tiver dúvidas depois de ler esta página, entre em contato e farei o meu melhor para lhe fornecer uma resposta necessária. No entanto, veja a lista de artigos, que também pode ajudá-lo.
Você precisará de um diploma em matemática?
A maioria do livro requer uma compreensão do cálculo, álgebra linear e probabilidade. No entanto, muitos dos métodos são intuitivos e o código pode ser seguido sem recurso a matemática avançada.
Gekko Quant - Negociação Quantitativa.
Comércio Quantitativo, Arbitragem Estatística, Aprendizado de Máquinas e Opções Binárias.
Pós-navegação.
Investigação sobre o poder da co-integração / testes de reversão média.
O termo arbitragem estatística (stat-arb) abrange uma ampla variedade de estratégias de investimento que tipicamente visam explorar uma relação de equilíbrio estatístico entre dois ou mais títulos. O princípio geral é que qualquer divergência do equilíbrio é um efeito temporário e que as apostas devem ser colocadas no processo, voltando para o equilíbrio.
A principal advertência das estratégias de tipo de comércio de stat-arb / pairs é que, à medida que a divergência do equilíbrio cresce, o comércio se torna mais desejável, no entanto, em algum momento, a divergência crescerá tão grande que se deve admitir que a relação de equilíbrio não existe mais O modelo está quebrado. Naturalmente, é desejável estimar o poder das ferramentas estatísticas usadas para determinar essas relações e avaliar a duração de qualquer equilíbrio observado a partir da amostra.
Esta publicação investigará o poder dos testes estatísticos em relação à troca de pares para os seguintes testes estatísticos ADF, BVR, HURST, PP, PGFF,
O principal geral é que para dois estoques e eles formam um estacionário e, por definição, significa reverter o par se a seguinte equação contenha:
Se está entre e depois e é co-integrado,
é o coeficiente de reversão média. Um teste estatístico deve ser realizado para verificar se, isso é conhecido como um teste de raiz unitária. Se a série contiver uma unidade de raiz, ela não é adequada para troca de pares. Existem vários testes de raiz unitária, cada um executando um teste diferente no processo residual. Poder-se-ia tentar estimar o modelo residual AR (1) e verificar o uso do método de regressão linear convencional, calculando o índice t padrão. No entanto, Dicky e Fuller [1979] demonstraram que a relação t não segue a distribuição t, portanto, testes de significância não-padrão são necessários conhecidos como testes de raiz unitária.
Tal como acontece com cada modelo, existem trocas ao determinar o tamanho da janela de treinamento, uma janela muito longa e o modelo pode conter dados irrelevantes e ser lento para se ajustar a eventos recentes, uma janela muito curta e o modelo apenas responde aos eventos recentes e esquece sobre eventos passados rapidamente. Este trade off é problemático nos testes de co-integração, foi demonstrado em Clegg, M., janeiro de 2017. Sobre a persistência da cointegração em pares, negociando que, para um tamanho de janela fixo, o poder da maioria dos testes de raiz unitária diminui como.
tende para 1 de baixo, para 250 pontos de dados com.
A barragem de testes de co-integração só detecta a co-integração com menos de 25% do tempo!
Intuitivamente, isso faz sentido, quanto mais lento o processo é reverter, mais pontos de dados serão necessários para ver a reversão. É indesejável que o poder dos testes de raiz unitária varie dependendo das propriedades do processo subjacente, no entanto, não é necessário para negociação de pares bem-sucedida que todos os pares co-integrados são identificados como tal, a propriedade de poder variável dos testes de raiz unitária é em grande parte irrelevante.
O que é mais interessante é a taxa de falsos positivos, então os pares identificados como significativos revertam quando não são, e quão persistentes são os resultados.
Gerar 1000 séries temporais co-integradas e uniformemente distribuídas no conjunto, e no conjunto de acordo com Clegg isso é semelhante aos tipos de pares de ações encontradas na realidade. Repita isso para diferentes séries de tempo e teste para ver quantas séries de tempo se classificam corretamente como co-integrado / significa reverter usando vários testes para diferentes pValores.
Na maioria dos testes PP e PGFF superam os outros métodos. Quando o processo foi fortemente revertido com menos de 0,85, os testes PP, PGFF, JO-E e JO-T identificaram corretamente o processo como co-integrado / significar reverter mais de 75% do tempo no pValue 0.01. Para alguns dos pares de reversão mais fracos com maior que 0,95, o desempenho dos testes estatísticos é pesaroso com apenas 250 pontos de dados.
Vale a pena ter em mente que 250 pontos de dados são aproximadamente o número de dias de negociação em um ano, e talvez dê uma indicação de quanto dados históricos são necessários em uma estratégia de negociação de pares.
Siga o mesmo procedimento descrito para o teste de precisão, mas escolheu no conjunto para gerar séries temporais que não são co-integradas. Veja qual porcentagem dos caminhos é falsamente relatado como co-integrado / retorno médio.
Eu nunca vi esse gráfico em um livro de texto e fiquei surpreso com os resultados, tanto HURST quanto BVR relatam mais falsos positivos como aumenta! Quanto mais o processo explode, mais provável é que o teste fosse mostrar um falso positivo!
Felizmente, os outros testes se comportam de forma razoável com alguns falsos positivos.
Redes Neurais em evolução através de Topologias de Aumentação - Parte 4 de 4 e # 8211; Estratégia de negociação.
Esta publicação explora a aplicação do NEAT para negociar o S & amp; P. A estratégia aprendida significativamente desempenha a compra e a manutenção dentro e fora da amostra.
Uma parte fundamental de qualquer problema de aprendizado de máquina é definir os recursos e garantir que eles sejam normalizados de alguma forma.
As características serão os percentis de rolamento dos seguintes dados econômicos, um percentil rotativo leva os últimos n pontos de dados e calcula o que% de dados apontam para o ponto de dados mais recente.
A função de fitness é o patrimônio final e visa maximizar o patrimônio final.
Qualquer genoma que tenha uma redução de 20%, ou as tentativas de usar uma alavanca maior que +/- 2 é encerrada. Na prática, você não deseja que sua máquina do sistema aprenda os controles de risco, pois existe potencial que eles não aprendam. A razão pela qual eles estão incorporados dentro da estratégia é acelerar o processo de aprendizagem, pois podemos matar os genomas cedo antes da simulação estar completa com base em quebrar as regras de risco.
Lote de todos os dados / recursos.
Parece que, quando as não-fazendas caem em seus percentis mais baixos / o desemprego atinge os percentis mais altos, o dia-a-dia retorna no S & amp; P torna-se mais volátil. Espera-se que a aprendizagem possa tirar proveito disso.
A aprendizagem identificou uma estratégia que executa simplesmente comprando e segurando. A estratégia proposta tem uma redução máxima em torno de 20%, contra a compra e a retenção, tendo uma redução de 40%. Além disso, a estratégia desacelerou o índice entre 2000-2003, já que estava sendo vendida antes de longo período de 2007. Gerando um retorno de 80% contra compra e retenção de 7%!
Nos dados fora da amostra (não utilizados durante o treinamento), a estratégia atingiu significativamente a compra e a retenção, aproximadamente 250% de retorno vs 50% com uma redução máxima de cerca de 20% contra a compra e retenção de 50%.
RNeat & # 8211; Rede Neural de Raiz Quadrada treinada usando Topologias de Aumento e # 8211; Exemplo simples.
Um tutorial simples que demonstra como treinar uma rede neural para números de raiz quadrada usando um algoritmo genético que busca através do espaço de estrutura topológica. O algoritmo é chamado NEAT (Neuro Evolution of Augmenting Topologies) disponível no pacote RNeat (ainda não em CRAN).
O treinamento é muito semelhante a outros pacotes de aprendizagem / regressão de máquinas em R. A função de treinamento leva um quadro de dados e uma fórmula. A fórmula é usada para especificar quais colunas no quadro de dados são as variáveis dependentes e quais são as variáveis explicativas. O código é comentado e deve ser simples o suficiente para novos usuários R.
O desempenho da rede pode ser visto no gráfico inferior esquerdo da imagem acima, há diferenças consideráveis entre a saída esperada e a saída real. É provável que, com mais treinamento, a magnitude desses erros se reduza, pode-se ver no gráfico de baixo direito que a aptidão máxima, média e mediana geralmente aumenta com cada geração.
Redes Neurais em evolução através de Topologias Aumentando - Parte 3 de 4.
Esta parte do tutorial NEAT mostrará como usar o pacote RNeat (ainda não em CRAN) para resolver o problema clássico do balanço do pólo.
A simulação requer a implementação de 5 funções:
processInitialStateFunc & # 8211; Isso especifica o estado inicial do sistema, para o problema do balanço do pólo, o estado é a localização do carrinho, a velocidade do carrinho, a aceleração do carrinho, a força sendo aplicada ao carrinho, o ângulo do pólo, a velocidade angular do pólo e a aceleração angular do pólo. processUpdateStateFunc & # 8211; Isso especifica como levar o estado atual e atualizá-lo usando as saídas da rede neural. Neste exemplo, esta função simula as equações de movimento e leva a saída da rede neural como a força que está sendo aplicada ao carrinho. processStateToNeuralInputFunc & # 8211; Permite modificar o estado / normalização do estado antes de ser passado como uma entrada para a rede neural fitnessUpdateFunc & # 8211; Toma a velha aptidão, o estado antigo e o novo estado atualizado e determina o que é a nova aptidão do sistema. Para o problema do equilíbrio do pólo, esta função quer recompensar o pendulo sendo certo e recompensar o carrinho próximo ao meio da pista. terminationCheckFunc & # 8211; Toma o estado e verifica se o término deve ser encerrado. Pode optar por terminar se o pólo cair, a simulação correu demais ou o carrinho foi retirado do final da pista. plotStateFunc & # 8211; Traça o estado, para o equilíbrio do pólo, isso desenha o carrinho e o pêndulo.
Redes Neurais em evolução através de Topologias de Aumentação - Parte 2 de 4.
Esta parte do tutorial sobre o uso do algoritmo NEAT explica como os genomas são cruzados de maneira significativa, mantendo sua informação topológica e como a especiação (genomas grupais em espécies) pode ser usada para proteger os genomas fracos com novas informações topológicas de serem erradicadas prematuramente pelo gene piscina antes do seu espaço de peso pode ser otimizado.
A primeira parte deste tutorial pode ser encontrada aqui.
Acompanhando história de genes através de números de inovação.
A Parte 1 mostrou duas mutações, mutação de ligação e mutação do nó, que adicionaram novos genes ao genoma. Cada vez que um novo gene é criado (através de uma inovação topológica), um número de inovação global é incrementado e atribuído a esse gene.
O número de inovação global está rastreando a origem histórica de cada gene. Se dois genes tiverem o mesmo número de inovação, eles devem representar a mesma topologia (embora os pesos possam ser diferentes). Isso é explorado durante o crossover do gene.
Genomas crossover leva dois genomas dos pais (vamos chamá-los de A e B) e cria um novo genoma (vamos chamá-lo de criança) levando os genes mais fortes de A e B copiando qualquer estrutura topológica ao longo do caminho.
Durante o cruzamento, os genes de ambos os genomas são alinhados usando seu número de inovação. Para cada número de inovação, o gene do pai mais adequado é selecionado e inserido no genoma infantil. Se ambos os genomas dos pais são a mesma aptidão, então o gene é selecionado aleatoriamente de ambos os pais com a mesma probabilidade. Se o número de inovação só estiver presente em um dos pais, isso é conhecido como um gene disjunto ou excesso e representa uma inovação topológica, também é inserido na criança.
A imagem abaixo mostra o processo de cruzamento para dois genomas da mesma forma física.
A especificação leva todos os genomas em um determinado conjunto de genomas e tenta dividi-los em grupos distintos conhecidos como espécies. Os genomas em cada espécie terão características semelhantes.
É necessária uma maneira de medir a semelhança entre dois genomas, se dois genomas forem & # 8220; semelhantes; # 8221; eles são da mesma espécie. Uma medida natural a utilizar seria uma soma ponderada do número de disjuntos e excesso de genes (representando diferenças topológicas) e a diferença de pesos entre genes correspondentes. Se a soma ponderada estiver abaixo de algum limiar, então os genomas são da mesma espécie.
A vantagem de dividir os genomas em espécies é que, durante o passo de evolução genética, onde os genomas com baixa aptidão são retirados (removidos inteiramente do grupo do genoma) ao invés de cada genoma lutar pelo lugar dele contra todos os outros genomas no todo pool de genoma, podemos fazê-lo lutar pelo lugar dele contra genomas da mesma espécie. Desta forma, as espécies que se formam a partir de uma nova inovação topológica que pode não ter uma alta aptidão, ainda que não tenha os pesos otimizados sobreviverão ao abate.
Resumo do processo inteiro.
Crie um grupo de genoma com n genomas aleatórios Pegue cada genoma e aplique para problema / simulação e calcule a habilidade do genoma. Atribua cada genoma a uma espécie Em cada espécie, remova os genomas removendo alguns dos genomas mais fracos. Raça de cada espécie (genomas selecionados aleatoriamente nas espécies para crossover ou mutar) Repita todos os itens acima.
Aprendizado de máquinas em estratégias de negociação de pares
Um tipo de algo popular e bem sucedido que eu vejo no Quantopian é Pairs Trading. Embora essa categoria de estratégias possa exibir características de desempenho atrativas, muitas vezes vejo algoritmos de comunidade que possuem um conjunto muito pequeno de pares elegíveis. Como em qualquer estratégia quantitativa, a amplitude das apostas é proporcional aos retornos de qualidade. Como tal, como criador de uma estratégia de negociação de pares, você sempre prefere mais pares (válidos) em vez de menos. O caderno abaixo mostra um exemplo concreto de usar técnicas de aprendizado de máquina, prontamente disponíveis em scikit-learn, para encontrar pares. A presunção aqui é que esses pares têm uma alta probabilidade de continuar exibindo um comportamento de reversão médio fora de amostra - um objetivo que podemos validar no devido tempo.
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.
@ Jonathan. Muito obrigado por isso. Este é um caderno muito legal para ilustrar o uso do ML para auxiliar na análise e descoberta de relacionamento. Chega de aplicação direta de ML a dados de mercado (OHLCV). Obrigado por avançar a fronteira. Novamente.
HI @Jonathan, esta é uma pesquisa extremamente boa e definitivamente vou passar por cada passo e fazer minha própria análise detalhada.
Eu tenho algumas perguntas tangenciais com a implementação de uma estratégia de negociação de pares ou uma variante dela em um portfólio longo e curto com a finalidade de escrever um algoritmo que possa atender aos requisitos para uma alocação.
a) O alfa da estratégia é originário do conjunto de dados (financial_health_grade). It appeared to me the assumption that stocks of the same financial_health_grade behave similarly is made at the beginning of the process. But the clustering appears to be using the equity pricing to arrive at clusters. Will the alpha be considered to be part of dataset or the clustering algorithm. I am asking this question because there has been a push recently to find alpha in the datasets that Quantopian provides and not sure if an economic rationale can be made that the alpha was derived from the financial_health_grade directly.
b) I also have a general question with pairs trading as a strategy for Q fund allocation. Does pairs trading fit with the requirements of Q fund allocation criteria where we need to control for beta, sector risk and position concentration risk to be within certain bounds that is achieved normally through order_optimal_portfolio and underlying cvxopt. If we know which pairs we are going to trade, it might not always be possible to fit in well with the underlying algorithm in order_optimal_portfolio for stock selection with controlled risk exposures.
Regardless of my Q allocation questions, definitely seems a very interesting area to explore further.
Thanks for sharing this work. One of my goals with Quantopian is to learn some ML techniques; I'll benefit from looking over your notebook in detail.
A few initial comments:
You do the clustering, followed by the pairs analysis. But how does this compare with finding pairs by randomly picking pairs from the entire universe and testing them? In other words, if I am willing to wait N minutes/hours/days to find M pairs, how much benefit does the clustering provide over a brute force technique? And would I expect the trade-ability to be better for pairs from the clustering technique, over brute force?
I can address a few of these points.
Just looking through all pairs will yield a massive amount of multiple comparisons bias quantopian/lectures/p-hacking-and-multiple-comparisons-bias, which would render the results not useful. The advantage of a clustering technique is it lets you do a first pass that can suggest related baskets, effectively doing dimensionality reduction on features. Within this new smaller set you can pick likely candidates and do out of sample testing.
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.
@Anthony, To your point, I think there are many applications of ML which can be valuable to an investment process beyond trying to fit and predict prices/returns directly. This is just one example. Signal combination, as described in this popular series is another great application.
a) Does the alpha from the strategy originate from the dataset (financial_health_grade). It appeared to me the assumption that stocks of the same financial_health_grade behave similarly is made at the beginning of the process. But the clustering appears to be using the equity pricing to arrive at clusters. Will the alpha be considered to be part of dataset or the clustering algorithm. I am asking this question because there has been a push recently to find alpha in the datasets that Quantopian provides and not sure if an economic rationale can be made that the alpha was derived from the financial_health_grade directly,
My analysis does not purport to say anything about any alpha embedded in the financial_health_grade . There very well may be some alpha there, but this analysis does not require that. I'm simply saying that stocks with similar health grades should have similar economic reactions and stock price behavior. I use equity prices, translated to returns and then reduced to 50 PCA loadings, to do the clustering along with market cap and financial_health_grade . The feature matrix for the clustering has 52 columns: 50 are the PCA loadings, one is the financial_health_grade , and one is market cap. A completely separate analysis could be done (via alphalens ) to see if the financial_health_grade is in fact an alpha factor, but, again, that's unrelated to my post.
b) I also have a general question with pairs trading as a strategy for Q fund allocation. Does pairs trading fit with the requirements of Q fund allocation criteria where we need to control for beta, sector risk and position concentration risk to be within certain bounds that is achieved normally through order_optimal_portfolio and underlying cvxopt. If we know which pairs we are going to trade, it might not always be possible to fit in well with the underlying algorithm in order_optimal_portfolio for stock selection with controlled risk exposures.
Sim! A pairs algo is very well suited to a Q fund allocation. One feature of pairs algos which is very nice is that the long and short sides are naturally balanced with self-similar assets. Thus a pairs book, often without any additional massaging, is naturally beta and sector neutral. The challenge with pairs algos is often coming up with enough valid pairs and, relatedly, achieving consistent capital usage. There is a sample algo here which uses order_optimal_portfolio within a pairs algo.
I concur with Delaney's response. Regarding the Johansen test, I noticed this lonely post which points to a Python implementation you can copy/paste. I have not tried it.
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.
@Jonathan, thanks for explaining in detail and providing useful pointers including the order_optimal_portfolio changes that are needed to go along with paris trading strategy. I see now how the pairs trading strategy itself can reduce the risk exposures and why we don't need order_optimal_portfolio to do that for us in this strategy.
I had stayed away from what would appear to be pure price based strategies before because I had developed some misconceptions that Mean reversion type algorithms wree not being favored in the Q allocation after reading some forum posts, thanks for clarifying the situation.
This is a very interesting topic to explore and I would definitely be spending some time in this area soon expanding upon your excellent research work.
I don't get the PCA decomposition that you use:
pcaponents_.T as the new data.
I would have done:
res['Market Cap'][returns. columns].values[:, np. newaxis],
res['Financial Health'][returns. columns].values[:, np. newaxis])
Essentially, you have 504 data samples with some 1400 features that you want to reduce to 50. i. e. 504 samples of 50 features. The fit_transform finds the new axes and transforms the data. You just use the axes.
Regarding the multiple comparisons bias, I don't yet have an intuitive feel for it. Say I have a box of 1000 toothpicks and I want to find pairs that have nearly the same weight and length, to within specified tolerances. I have a weighing scale and a measurement microscope. I roll up my sleeves and start making random pairwise comparisons. After 1000*999/2 = 499,500 comparisons, I'm done, and have a list of pairs of toothpicks (I forgot to mention, prior to my evaluation, I had each toothpick laser-engraved with a serial number). So where does the bias come in?
I guess the idea here is that if I have some additional information about the toothpicks, aside from weight and length, then I might be able to use it to improve my assessment. For example, if the toothpicks are colored (for the holidays), red and green, then I might hypothesize that the red toothpicks were made in a red toothpick factory, and the green ones in separate factory. In this case, clustering by color might help improve my assessment, and reduce the number of spurious pairs. But then, if the toothpicks are all made in the same factory, and the coloring process does not affect the weight and/or length differently by color, then I could be claiming I'd discovered an improved technique for toothpick pairing, but done nothing substantive.
For Jonathan's analysis, I'm thinking that the hypothesis is something like "All of this fancy analysis works, and reduces the number of spurious cointegrated pairs, over a brute-force approach." So, it would seem that one would actually need to do the brute-force analysis, and then figure out how to compare it to the proposed technique, to determine if it is beneficial. It may be "the bomb" but to me the advantage is unclear (other than perhaps reducing the problem down to being more computationally tractable with the resources available).
A pairs algo is very well suited to a Q fund allocation.
Intuitively, like other well-known quant techniques using readily available data (e. g. price mean reversion), I'd think that there would be pretty slim pickings out there. My assumption is that for decades now, hedge funds have had big honkin' computers churning away at the problem, squeezing out the alpha from pairs trading. I don't have any industry experience, but it doesn't seem like Quantopian would have any edge in this area. That said, perhaps as an incremental alpha factor in the multi-factor grand scheme described in Jonathan's blog post, one could roll it into the mix, just for yucks. Would it be feasible to formulate pairs trading as a general pipeline alpha factor?
As a general comment, I'd concur that the messaging on what is most likely to get an allocation is muddled. On the one hand, we have the directive to use "alternate data sets" and on the other, guidance that pairs trading, potentially only using company fundamentals and price-volume data would be attractive. And also guidance that multi-factor algos are desirable (but perhaps only if all of the factors are based on alternate data sets?). Personally, I don't want to spend the next 6 months developing a pairs trading algo (or alpha factor, if that is feasible), and then another 6 months paper trading it, only to hear that my odds of getting an allocation are slim due to the strategic intent not matching the requirements (this is the message I think I got regarding price mean reversion strategies and possibly even price mean reversion alpha factors. I'm not sure). In some sense, an advantage Quantopian has over traditional hedge funds is that they could ignore the strategic intent altogether, and just base their assessments and allocations on the black-box algo performance. This would eliminate the risk of herd mentality or personal biases on the part of the the fund team. Just go with the data.
The notebook is great. I think everyone understands that the sample algo here (lecture 24) referenced in passing was merely provided as a starting point for pairs trading back then, I'll just temper it a little bit, not to over-dissect, but since I took a look, then for those who might travel that path, couple of things to know. If cloning that, the end date is automatically adjusted forward for today and so it isn't a surprise that since it originated quite awhile ago, 3 of its 4 stocks have delisted, so these comments apply only running to the end of 2018 before the delists (before the first in Feb 2018). It does hit a leverage of 1.36 at one point and as always that is something for us to keep an eye on. Its FixedSlippage results in no partial fills which can be useful for testing sometimes, from Help: naive use of fixed slippage models will lead to unrealistic fills, particularly with large orders and/or illiquid securities . Using the same FixedSlippage, returns are nearly identical at 1M vs 10M although capital usage becomes just 9%. So the slippage line can be commented for default slippage and then at 1M there are an average of [integer edited later because there may have been a bug in the count at this time] minutes of partial fills per stock, and the effect takes returns from +29 to -16 and lowers max leverage to .52. Both of the ABGB and FSLR pair took losses. Not a big deal since it is just a starting point to build upon, there's also the other pairs-trading algo (more basic, lecture 23) in the lecture series worth knowing about.
Essentially, you have 504 data samples with some 1400 features that you want to reduce to 50. i. e. 504 samples of 50 features. The fit_transform finds the new axes and transforms the data. You just use the axes.
It is intentional that I don't do the transform of the data. The financial interpretation is that the pcaponents_.T are per stock betas to hidden statistical factors. When you go through with fit_transform(. ) you get the time series of each hidden factor. I don't want those. I simply want to cluster on the betas.
@Grant, Olive Coyote,
I don't agree that this work is for the sole benefit of computation time. The key difference between finding pairs and your toothpick analogy is that the result of your toothpick search will be the ground truth but this is not so in statistical work. The shortest toothpick today doesn't stop being the shortest toothpick tomorrow. A brute force pairs search will surely come up with many spurious results. To protect against data mining you should condition your search.
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.
I posted this example, which may be of interest.
That example is based on an example in the scikit-learn docs here. If you think about this work as a three step process: 1) define features, 2) cluster, 3) visualize, I chose 1) PCA + financial_health_grade + market cap, 2) DBSCAN , 3) T-SNE ; the example cited chose 1) covariance. GraphLassoCV on intraday price changes, 2) Affinity Propagation, and 3) Locally Linear Embedding.
I had reproduced this in Quantopian Research awhile back. We don't expose some of the fancy matplotlib classes and methods he uses, so my actual visualization code is a little different.
It's fun to see how many different ways one can cluster stocks.
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.
Thanks for the additional example.
For the toothpicks, there is a measurement error of the weight and length, so just picking at random will result in some pairings that aren't correct. But if clustering by color results in more uniformity in each cluster, then it should help. For example, if the differences were slight and were not well-resolved by the measurements, then the color factor could provide a boost. At least that's my intuition, but I need to sleep on it, and read a bit more about multiple comparisons bias (if that is actually what is at play here).
I'm not saying that the clustering, etc. doesn't help for stocks, but just that if you don't actually compare it to brute force, then there is no way to tell. So if you are trying to show the benefit over brute force, you'll need to do a bit more work.
After reading this notebook, I needed only one experiment to ascertain if there was something in this clustering of correlated stocks. Since the notebook is looking at one stock universe from its leet (1337) point of view, I opted to simply change its random seed, without changing anything else. This way, all that is changed is this peeping hole into the past.
Here are the outcome of the 4 tests:
The clustering which should have been only slightly differentiable, is all over the place. The point being that out of the gazillion possibilities, gazillions were possible. And, therefore, whatever trading strategy that might be constructed from any of those perceptions might not carry that well going forward.
My way of saying: I do not see anything there. Or, am I missing on something.
T-SNE is a visualization step; it does not affect the formation of the clusters. T-SNE is meant to visually validate that the clusters are distinct. To me, your experiment validates the soundness of these clusters, not the other way around. With the various random state parameters you chose, in all cases, the clusters remain intact and clearly separable in space. The individual cluster shapes are in many cases even the same (just rotated in space). The location of the clusters in the plane is not important. The random state parameter serves to simply inform the artistic rendering of the plot.
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.
I think you bring up a great example of one of the fundamental differences between systems studied in engineering and systems studied in finance. Generally in engineering the past is representative of the future. A toothpick's weight will not change over time (by much at least), and other properties are also the same over time. We refer to this more generally as stationarity. In engineering systems studied are similar, laws of physics hold over time. A bridge built one way that stands up now will likely stand up tomorrow. The opposite is true in finance and many other more volatile and less stationary systems.
The implicit assumption in many engineering approaches is that the past implies the future. In finance that assumption is not a given and must in itself be checked.
Consider if the weights of the toothpicks were changing over time and drawn from some unknown stochastic process. This is effectively the case here. When non-stationarity exists, you cannot just assume past implies future. You need to understand more of the system and effectively model what is going on. At the end of the day you do want to produce stationarity in your residuals (model error), as this means you have explained any non-stationarity in the system. If you just searched through your data from yesterday's toothpicks, there may be no relationship to tomorrows toothpicks.
What the clustering is doing is searching for toothpicks that have properties which we believe are more likely to make them similar, effectively the driving factors of the relationship. As far as multiple comparisons, I recommend you actually go through the lecture and get your hands dirty. There are real experiments in there that you can muck with and see for yourself if you don't believe me.
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.
I know about stationarity. In manufacturing, it is a key concept in statistical process control (e. g. see the Shewhart control chart described on the nice NIST site). In trading, Bollinger bands are basically control charts with a bet on stationarity.
As far as I can tell, the multiple comparisons problem has nothing to do with stationarity. It is a general pitfall associated with making repeated statistical tests and finding an increasing number of false positives with the number of tests. In the case of toothpick weight, suppose my question is "Do I have a bunch of toothpicks in excess of 101 g?" and in my box of 1000 toothpicks, there are none above 100 g (but a lot right at 100 g). If I use a cheapo "noisy" weight scale, the probability of answering incorrectly goes up, with the number of toothpicks I measure (asymptotically approaching an answer of "yes" when the correct answer is "no"). The solution to the problem is to get a better weight scale. In the case of stock pairs, if the question is "Do I have a bunch of stock pairs that I can trade profitably?" and I search brute force with a marginal technique, then I'll answer "yes" (and lose money) when the correct answer is "no" (and not lose money). The brute force approach for finding stock pairs would work if one had a better test.
The issue I see here is that the analysis needs to test for both cointegration and its stationarity. The latter is what really matters for trading, so to show that clustering is an improvement over brute-force pair selection, one would need to look at the persistence of the conintegration of each pair versus time. If I'm thinking about this correctly, one really needs to find techniques that spit out pairs with persistent cointegration. Presumably clustering helps, but it is still an open question.
One suggestion is to consider if using minutely data would help. In science/engineering, one common technique to improve the signal to noise ratio (SNR) is to increase the sampling rate, smooth, and then down-sample (for data storage, computations, etc). For example, rather than using daily closing prices, estimate the daily VWAP from the minute bars, and use it instead (unless there is something special about the last trade price of the day). The "error bars" will be much smaller.
Also, analyses can take into account the error bars. For example, for x-y data that have unequal error bars, one can do a straight-line fit, applying less weight to points with larger error bars. Is there a way to account for error bars when searching for pairs?
@Jonathan, even if I can see the artistry of the cluster separation, it does not mean I can extract worthwhile profits when they move from quadrant to quadrant shifting their center of mass, their axis, and size. It is like hitting a moving target that can change shape and direction from second to second, almost like shooting in the dark. An illusion: oops, it was there, and now it's not. Where did it go? Oops, it moved again.
To me, you are more providing a do not do this in your trading strategy since overall profit might be more than illusive. For instance, what kind of pair trading strategy could even extract a reasonable profit from cluster 4? I do not see how anyone could ever extract more than 1% over those 2 years, no matter the nature of his/her pair trading strategy.
There might be something to do playing cluster against cluster, but they too are moving all over the place. They positively correlate one second, and the reverse the next. The image I get from peeping at that past data is more than just a blur.
All I see from cluster 4 is this: take anyone of those 3 stocks, they were about equivalent in the past. If someone forced the inclusion of one of those 3 stocks in another kind of simulation, they might not see much of a difference whichever stock was used.
Has anyone on Quantopian posted a cloneable pair trading strategy using these clustering methods? Let me see how productive they would have been or could be?
You said something which is exactly right "one would need to look at the persistence of the conintegration of each pair versus time. If I'm thinking about this correctly, one really needs to find techniques that spit out pairs with persistent cointegration." That's the core of this, we're looking for cointegration that persists.
The noisy scale analogy works as well, just keep in mind that it can not only incorrectly categorize 99g picks as 101g, but it could also categorize 102g as 97g. Getting a more accurate scale/test is absolutely the solution. That is the subject of a lot of research in statistics, and generally the only real way is to increase sample size and check underlying assumptions. Otherwise I think you're on the right track here. The other thing about clustering is just that we're hoping it will increase your likelihood of finding pairs. If you brute forced it you might end up with way too many pair candidates to wade through. There are many ways to find pairs, this is just one potential technique to be investigated.
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.
I'm trying to picture what this whole thing might look like, using the Q research platform, to sort out if it at all makes sense to then pursue an algo. It seems like we need some sort of rolling analysis, going back as far as we can (e. g. 2002). I guess every day, one would find a new set of clusters, and then find the pairs in those clusters? And then find pairs that persist long enough to make money on them? And then sort out a model that would reliably identify pairs that will persist long enough to make money on them (since on any given day, we'd want to know how to do a drop/add of our universe of pairs of stocks)?
I'm also wondering how to deal with the fact that we don't really have discrete pairs, but baskets of stocks (since some stocks form pairs with more than a single other stock)?
And I guess we'd want to have the pairs trading strategy as an alpha factor in a multi-factor algo, not as a single-factor algo, right?
The whole thing feels kinda gnarly at this point. whew! Or am I making it harder than it needs to be?
What's the game plan on your end? Are you going to work this through to the end, as a public domain effort? Or are you looking for the crowd to carry it through?
Using the white/grey/black edge lingo of the book "Black Edge," pairs trading of this sort would be firmly in the white edge category. The information is readily accessible (although not necessarily free) and the analysis tools (both software and hardware) are commercial off-the-shelf (again, not necessarily free, but we aren't talking about nation-state class supercomputers coded by a team of wizards here). For a universe of stocks comparable to the Q1500US, it would be interesting to see what kind of "alpha decay" pairs trading has undergone since, say, 1990 (or even back to 2002, using the Q data). If the trend is asymptotically approaching zero alpha, then it might be wise to move on to something else.
Another angle is that although reportedly the hedge fund world is highly secretive, I suspect not so much. I gather that Quantopian is now pretty well plugged into the hedge fund scene. What's the word on the street regarding the potential viability of equity pairs trading, using Quantopian in its present form? I don't work in the field, and so I have no idea if this is more of an illustration, a pure academic exercise, or a short-putt to a Q fund allocation (I sorta doubt the latter, since if it were, then it wouldn't be put in the public domain). I have no idea if this is akin to "Hey, check this out: we have a new-fangled contraption called the automobile powered by an internal combustion engine. Just pour in some gasoline and away she goes!" More background and justification would be helpful. I'm happy to donate some time to Quantopian, but it is a lot more fun if, intuitively, I have a sense that I'm vectored in the right direction.
On a separate note, I'd be careful not to dismiss the brute force approach out of hand due to the computational effort. For the Q1500US, there are 1,124,250 pairs to analyze. On the surface, it doesn't sound so bad, since the computation can be parallelized to generate the base list of pairs versus time. There are about 2x10^6 pixels in a 1080p HDTV, so it is like one HDTV frame per trading day--back-of-the-envelope, data storage and transmission should be no problemo. o que estou perdendo? I guess where I'm heading is that Q could put out a database of all the pairs, back to 2002, and then users could try to understand how to filter out the spurious pairs (the implication of Jonathan's post is that they aren't all spurious; it is just a matter of developing a model to find the trade-able pairs point-in-time).
Here's a potentially relevant paper:
In general you need a hypothesis to start off with, as to why two time-series would affect one another, otherwise you select pairs which have no relationship at all ( Delaney's link to lecture 16 is effective ).
For example, if I give you the following data for a time-series.
. how confident are you that the trend will repeat?
(The above is a real time-series and has a real answer.)
Well, my hypothesis could be that the Q1500US has no spurious pairs; any pair found by brute force will be profitable. Personally, I don't know if the hypothesis is true or false (but it should be easy to show; perhaps Delaney shows this in his notebook, if I can wade through all of the Python and stats). My point is that one way to go at the problem is to pre-compute all of the pairs, and then try to sort out a means to filter out the spurious ones. In some sense, that's what Jonathan is doing. Any pairs not within clusters would be filtered out. There is a multitude of filters that could be applied, so having the entire universe of point-in-time candidate pairs to filter on could be useful (it would seem to be a nice fit for Pipeline). Then testing simple hypotheses would be easy (e. g. "Filtering out all pairs with tickers not starting with the same letter of the alphabet will result in a profitable portfolio of remaining pairs").
Regarding the time series you shared, I'll bet $5 US it will repeat. How long do I have to wait for the answer?
"Horses are highly social herd animals that prefer to live in a group. There also is a linear dominance hierarchy in any herd. They will establish a "pecking order" for the purpose of determining which herd member directs the behavior of others, eats and drinks first, and so on."
So before knowing any more, you were willing to bet $5.
In fact the time-series is the monthly average temperature recorded in London in degrees C, starting from December 2018.
With that new knowledge, how much would you bet now? A lot more I would assume. Of course this scenario is academic but the point remains: we want a structural reason for a pattern to continue because, without it, you can invest very little.
A fun example would be to take a year of temperatures following that period and do some stats. What if I gave you a p-value of 0.06 that the following year's data came from the same population? Would you assume the pattern had ended?
Taking only the pairs which satisfy the statistical mumbo jumbo (from your total 1,124,250 pairs) will definitely contain spurious results. Your argument is then to filter them down more.
. one option is to take each pair and decide whether there is any reason why two entities should be so related. That would take a while.
. another option is to wait 2 years, and use the out-of-sample data to "filter your filter". Some of those which had real relationships will be filtered out (false negatives) and some of those with no relationship will continue (false positives). That's the same problem you had before.
@Grant, I agree with your point of view. Let me clarify mine.
Let's take 1,000 Q members running Jonathan's notebook. They all, only replace the leet with none (no random seed), or each take a different seed. This would make the pinhole from which they will look at this Q1500US ball of variance unique. The outcome would be related to the very microsecond they launch the pairing clustering. What would be the answer?
Everyone of them would get a different pairing chart. They might get some look alike clusters, which is cute, but these clusters would appear in different quadrants, having positive and negative inter-correlations, spread more or less around their erratic center of mass.
Technically, you would have 1,000 charts like the ones I've posted. Some in the group, if they apply some pair trading strategy to their found clusters, might win something, not much, but still win. However, we would have no way of saying: members 13, 37, and 42 will be the best, or even worse, that they will win at all.
And if those 1,000 members did the test again, they each would get a different answer. What would their trading strategies do with that? Designing a trading strategy using clustered pairing that could be profitable would be a daunting task. However, for anyone succeeding over some 100 simulations, meaning profiting, might have a robust system even if profits are low.
The tool, nonetheless, might be useful in detecting price movement similarities. A way of finding substitute replacement candidates for your portfolio, if you ever needed some. But then again, why select another poorly behaving stock to replace the one you had if you could go right out and simple select a better one with maybe no relation to the one you had or its cluster?
The cluster pairing might have its use for someone wishing stable returns, even if below market averages. I think I will be looking for greener pastures.
I found Jonathan's notebook very interesting.
Another random thought is that one could do the fancy ML either as Jonathan has shown and then find the pairs or first trim down the Q1500US to contain only stocks that belong to at least one pair (or only one pair?), and then run the ML, and pair identification, per Jonathan's recipe.
It seems like this would give the ML a better shot since irrelevant stocks would not be adding noise/confusion.
First, @Jonathan, thanks for the instructive notebook. I appreciate the effort and know that ita always takes a few long days to complete something like what you did!
Second, I've been trying to learn&apply some stat arb, that uses pairs or copula trading, and came upon this interesting final report from a recent class project. Any comments about how one would apply the clustering used in this post, using ideas in the linked-to paper below would be appreciated.
Third, there were some Q forum posts relating to cointegration and pairs trading, both notebook and algo, in the past that would seem useful to create an algo. I'm looking at them for ideas on how to get pairs that are in a productive mean-reversion state. Any help here appreciated!
Personally, I have been having trouble with time-outs wrt the limits Q sets on when trying to compute factors based on the above concepts.
I end up having to put timers all over the place and adjust the problem size parameters based on how much time is allotted for that run.
Great post @Jonathan. How did you come up with the number of 1.9 in DBSCAN(eps=1.9, min_samples=3) . Eps is an important parameter in DBSCAN and can influence number of pairs. Was it a random guess ? I see it creates maximum number of pairs at 1.9.
I have modified Jonathan's notebook to use monthly returns of stocks as clustering features instead of a PCA decomposition of the daily returns. My assumption is that co-integrated stocks move in similar fashion over longer periods of time. So instead of reducing 504 day returns to 50 components, I directly use 24 months of returns as features. The results seem correct to me.
It's a big stretch, in my opinion, to say that this (large) number of principal components has any underlying economic meaning. Maybe the first 3 can proxy for latent factors -- the yield curve can be decomposed into parallel shifts, tilts, and twists, using PCA, for example -- but 50?
This still feels like a data mining exercise, with the main benefit being computational efficiency.
I made an affirmative choice to use 50 factors. Commercial risk models for the US equity market typically have between 20 and 75 factors. For example, the Barra US Total Market Model has 75 factors (all with direct economic meaning); the Northfield US Short Term Equity Risk Model has 20 factors (purely statistical). The US treasury yield curve or major swap curves can be well explained by a very small number of factors, but the equity market is much more complex.
. even if I can see the artistry of the cluster separation, it does not mean I can extract worthwhile profits when they move from quadrant to quadrant.
. replace the leet with none (no random seed), or each take a different seed. This would make the pinhole from which they will look at this Q1500US ball of variance unique. The outcome would be related to the very microsecond they launch the pairing clustering.
The clusters are deterministic and do not move. They are chosen by the DBSCAN algorithm which is deterministic. You are conflating the clustering with the visualization.
How did you come up with the number of 1.9 in DBSCAN(eps=1.9, min_samples=3) .
I chose DBSCAN because, unlike KMeans, Agglomerative Clustering, etc., you do not need to specify the number of clusters and not all samples get clustered. The latter feature is attractive to me because it makes sense to me that not every stock will be so closely related to at least one other stock that a viable pair relationship would sustain. It is likely that most stocks are "noise" with respect to this analysis and DBSCAN handles that well. I chose 3 as the min_samples parameter because I wanted to be able to find small clusters. In this application, it seems reasonable to me that tightly related stocks would exist in small clusters. Per the docs, "Epsilon is a distance value, so you can survey the distribution of distances in your dataset to attempt to get an idea of where it should lie." That's essentially what I did -- I did not tune the parameter programmatically; rather I chose a few values and settled on this one once I found a setting that produced a handful of tight clusters. The result might be improved with a different approach. I was careful though not to spend a lot of time on tuning this parameter.
On a separate note, I'd be careful not to dismiss the brute force approach out of hand due to the computational effort.
This example workflow is not meant to reduce the computational effort; rather it is meant to mitigate data mining and spurious results.
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.
There's a lot for my little pea brain to take in here, but there appears to be a straightforward recipe for avoiding this multiple comparisons pitfall, call the Bonferroni correction. You are using a fixed p-value:
Unless there is a reason to think that the clustering has completely eliminated the multiple comparisons bias, shouldn't the p-value be divided by the number of candidate pairs within each cluster?
Trying the Bonferroni correction should be a minor tweak to your code:
What needs to change?
As is stated here, "The correction comes at the cost of increasing the probability of producing false negatives, i. e., reducing statistical power." Elsewhere, I've read that for a large number of comparisons (e. g. brute-force pairs search), the p-value ends up so small that the correction tends to reduce the statistical power to zero. But here we have a more modest number of pairs, and your hypothesis is that some of them should be the real deal, so maybe the Bonferroni correction would be appropriate (perhaps multiplying the resulting p-value by a hyperparameter scale value, if too few pairs result). Generally, I'd think that if the clusters are of unequal size, then you shouldn't be using the same p-value for each (since the risk of multiple comparison bias goes up with cluster size).
it is meant to mitigate data mining and spurious results.
If that is the premise, then you'll need to compare the brute-force method to this one. If both methods yield zilch in terms of profitability (or if the new method provides negligible benefit), then no progress has been made. Since you have data going back to 2002, you can make the comparison without waiting for out-of-sample data to roll in (if you are careful in your methodology). My basic point is that if you are wanting to show that the proposed method is better, you have to say better than what, and quantify the improvement.
Bonferroni is a great way to correct your p-values when running a smaller number of tests. It tends to be over-conservative when running many tests and can quickly reduce a process to one that is way too under-sensitive and never triggers.
If you were to run it on 1M pairs you'd be dividing the p-values by 1M, which would result in an incredibly low chance a good pair ever made it through. This is the fundamental problem with multiple comparisons. Generally it's best to intelligently reduce the number of tests that are being done.
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.
Generally it's best to intelligently reduce the number of tests that are being done.
ESTÁ BEM. Sounds good. But if the number of tests is more than one, then a correction for multiple comparisons would need to be applied, right?. So, I'm wondering if the p = 0.05 used above is too high?
Here's my attempt to apply the Bonferroni correction to Jonathan's notebook, accounting for the within-cluster multiple comparisons bias, at a significance of p = 0.05. Did I apply it correctly?
The result, as one might expect, is that we end up with fewer pairs--only two! And interestingly, there are 4 unique tickers. All 4 are in the energy business, so I guess at some level, it makes sense. Is there something unique about the energy business that would tend to result in statistically significant pairs (over other businesses)?
We have to distinguish between exploratory analysis and definitive testing. The analysis above is exploratory and intended to suggest hypotheses. As such the certainty doesn't have to be as rigorous. After you had a specific set of pairs you had validated, then you would want to definitively test using all the proper correction factors.
In exploratory analysis we face higher risk of the test saying no to a good pair, so we are okay with it being overly sensitive.
In definitive testing we face risk of trading something not really a pair, so we want to make sure the test is very specific and apply all correction factors.
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.
It is potentially an incremental improvement to Jonathan's code:
If I've done it correctly, the Bonferroni correction is applied to each cluster. To get more pairs, one can simply increase the p-value. For example, I've increased it to p = 0.2 in the attached notebook, and now get 6 pairs:
[(Equity(1665 [CMS]), Equity(21964 [XEL])), (Equity(5792 [PCG]), Equity(18584 [LNT])),
(Equity(1023 [BOH]), Equity(11215 [UMBF])),
(Equity(3675 [EQC]), Equity(11478 [FR])),
(Equity(3675 [EQC]), Equity(33026 [DCT])),
(Equity(3675 [EQC]), Equity(39204 [PDM]))]
Generally, my point is that the pair search algorithm should account for cluster size, since if I understand this multiple comparisons jazz correctly, the probability of spitting out spurious pairs goes up with cluster size.
I'm still getting up the learning curve, but I gather that one would run so-called ROC curves, to compare various approaches (e. g. brute force, clustering with no Bonferroni correction, clustering with Bonferroni correction, etc.). Basically, the notebook is spitting out pairs that are hypothetically trade-able. So, with a way to determine the true trade-ability of the pairs, one could do a set of ROC curves, to compare the power of detecting pairs. How would one score the trade-ability of a pair?
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.
Forex Mecânico.
Negociação no mercado FX usando estratégias mecânicas de negociação.
Machine Learning in Forex Trading: Why many academics are doing it all wrong.
Building machine learning strategiesВ that can obtain decent results under live market conditions has always been an important challenge in algorithmic trading. В Despite the great amount of interest and the incredible potential rewards, there are still no academic publications that are able to show good machine learning models that can successfully tackle the trading problem in the real market (to the best of my knowledge, post a comment if you have one and I’ll be more than happy to read it). Although many papers published do seem to show promising results, it is often the case that these papers fall into a variety of different statistical bias problems that make the real market success of their machine learning strategies highly improbable. On today’s post I am going to talk about the problems that I see in academic research related with machine learning in Forex and how I believe this research could be improved to yield much more useful information for both the academic and trading communities.
Most pitfalls in machine learning strategy design when doing Forex trading are inevitably inherited from the world of deterministic learning problems. When building a machine learning algorithm for something like face recognition or letter recognition there is a well defined problem that does not change, which is generally tackled by building a machine learning model on a subset of the data (a training set) and then testing if the model was able to correctly solve the problem by using the reminder of the data (a testing set). This is why you have some famous and well established data-sets that can be used to establish the quality of newly developed machine learning techniques. The key point here however, is that the problems initially tackled by machine learning were mostly deterministic and time independent.
When moving into trading, applying this same philosophy yields manyВ problems related with both the partially non-deterministic character of the market and its time dependence. The mere act of attempting to select training and testing sets introduces a significant amount of bias (a data selection bias) that creates a problem. If the selection is repeated to improve results in the testing set – which you must assume happens in at least some cases – then the problem also adds a great amount of data-mining bias. The whole issue of doing a single training/validation exercise also generates a problem pertaining to how this algorithm is to be applied when live trading. By definition the live trading will be different since the selection of training/testing sets needs to be reapplied to different data (as now the testing set is truly unknown data). The bias inherent in the initial in-sample/out-of-sample period selection and the lack of any tested rules for trading under unknown data makes such techniques to commonly fail in live trading. If an algorithm is trained with 2000-2018 data and was cross validated with 2018-2018 data there is no reason to believe that the same success will happen if trained in 2003-2018 data and then live traded from 2018 to 2017, the data sets are very different in nature.
Measuring algorithm success is also a very relevant problem here. Inevitably the machine learning algorithms used for trading should be measured in merit by their ability to generate positive returns but some literature measures the merit of new algorithmic techniques by attempting to benchmark their ability to getВ correct predictions. Correct predictions do not necessarily equal profitable trading as you can easily see when building binary classifiers. If you attempt to predict the next candle’s direction you can still make a loss if you are mostly right on small candles and wrong on larger candles. As a matter of fact most of this type of classifiers – most of those that don’t work – end up predicting directionality with an above 50% accuracy, yetВ not above the level needed to surpass commissions that would permit profitable binary options trading.
To build strategiesВ that are mostly rid of the above problems I have always advocated for a methodology in which the machine learning algorithm is retrained before the making of any training decision. By using a moving window for training and never making more than one decision without retraining the entire algorithm we can get rid of the selection bias that is inherent in choosing a single in-sample/out-of-sample set. In this manner the whole test is a series of training/validation exercises which end up ensuring that the machine learning algorithm works even under tremendously different training data sets. I also advocate for the measuring of actual backtesting performance to measure a machine learning algorithm’s merit and furthermore I would go as far as to say that no algorithm can be worth its salt without being proven under real out-of-sample conditions. Developing algorithms in this manner is much harder and I haven’t found a single academic paper that follows this type of approach (if I missed it feel free to post a link so that I can include a comment!).
This does not mean that this methodology is completely problem free however, it is still subject to the classical problems relevant to all strategy building exercises, including curve-fitting bias and data-mining bias. This is why it is also important to use a large amount of data (I use 25+ years to test systems, always retraining after each machine learning derived decision) and to perform adequate data-mining bias evaluation tests to determine the confidence with which we can say that the results do not come from random chance. My friend AlgoTraderJo – who also happens to be a member of my trading community – is currently growing a thread at ForexFactory following this same type of philosophy for machine learning development, as we work on some new machine learning algorithms for my trading community. You can refer to his thread or past posts on my blog for several examples of machine learning algorithms developed in this manner.
If you would like to learn more about our developments in machine learning and how you too can also develop your own machine learning strategies using the F4 frameworkВ please consider joining Asirikuy, a website filled with educational videos, trading systems, development and a sound, honest and transparent approach towards automated trading.
5 Responses to “Machine Learning in Forex Trading: Why many academics are doing it all wrong”
Great article, the problems you highlight are certainly valid for system robustness!
A question I have, is it normal for say an EA to do exceedingly well in a certain pair and do terrible in all others?
Or, should a robust EA do well in at least several pairs, without any change in settings!
Thanks, for your great thoughts.
That question is interesting ;o). I believe that the question is better phrased as “can a system that survives on only one pair generate returns when live traded?” the answer is yes (both from theory and from my own experience). Having returns on only one pair does not mean that the system is “bad” it simply means that it exploits a historical inefficiency that is only present on one instrument. Provided you take care of bias sources (such as data-mining bias and curve-fitting bias) there is no reason why this will not work.
Now, if you have a system that works across many symbols then data-mining bias will be exponentially lower for an equal system that only works on one symbol and curve-fitting bias will also be lower due to the use of more data. So I would say that it’s better, but definitely not required.
But remember, measure your statistical biases!
I am so glad that you said it does not have to make a profit across all pairs! Also curve fitting, how does one know the limit of tweaking allowed before it becomes fitted?
Finally, I did a very simple test using the bog standard Moving Average EA on MT4, to see which pairs would react most widely to MAs. I backtested 52 pairs to see how many ‘Moving Period’between (1-20) would make a profit, regardless of drawdown. I wondered what you make of the results!
* 5 year test period.
* Drawdown not measured.
* 52 Pairs tested.
* Settings tested (Periods 1-20).
1 23 pairs, made no profit on any bar settings 1-20.
2 6 pairs, could only make profit on 1 setting.
3 14 pairs only, returned a profit on 5, or more different settings.
4 5 pairs only, returned a profit on 10, or more different settings.
1 BTCUSD 19 Settings out of 20, made a profit.
You need to make a distinction between curve-fitting bias and data-mining bias (or at least these two different types of bias, however you may want to call them). Curve-fitting bias is a bias created by finding an inefficiency across a set of data, it answers the question: is my system finding something general or something specific to the data I am using?. Data-mining bias answers the question: is my system finding a real historical inefficiency or are the results just because of my mining process (meaning coming from random chance)?
By increasing parameter spaces and degrees of freedom you are increasing data-mining bias (you are more likely to find a system just by chance, instead of a system that trades a real historical inefficiency). You can measure data-mining bias by using a test like White’s reality check. Doing this type of test is fundamental to reliable strategy design.
Read more about this distinction between biases here:
Also read this paper on the subject:
Before dwelling into the complexities of trading system design and finding strategies for trading I strongly advice getting a solid formation in statistics (coursera statistics courses are an excellent free start). Statistics will give you the power to analyse your own results and methodically address questions like these ;o)
[…] Machine Learning in Forex Trading: Why many academics are doing it all wrong [Mechanical Forex] Building machine learning strategies that can obtain decent results under live market conditions has always been an important challenge in algorithmic trading. Despite the great amount of interest and the incredible potential rewards, there are still no academic publications that are able to show good machine learning models that can successfully tackle the trading problem in the real m […]
No comments:
Post a Comment