Introdução ao Deep Learning Trading em Hedge Funds

Publicados: 2022-03-11

Nos últimos anos, as redes neurais profundas tornaram-se extremamente populares. Esse campo emergente da ciência da computação foi criado em torno do conceito de redes neurais biológicas, e o aprendizado profundo se tornou uma palavra da moda hoje.

Cientistas e engenheiros de aprendizado profundo tentam descrever matematicamente vários padrões de sistemas nervosos biológicos. Os sistemas de aprendizado profundo têm sido aplicados a vários problemas: visão computacional, reconhecimento de fala, processamento de linguagem natural, tradução automática e muito mais. É interessante e empolgante que, em algumas tarefas, o aprendizado profundo tenha superado os especialistas humanos. Hoje, vamos dar uma olhada no aprendizado profundo no setor financeiro.

Uma das aplicações mais atraentes do aprendizado profundo é em fundos de hedge. Os fundos de hedge são fundos de investimento, organizações financeiras que captam recursos de investidores e os administram. Eles geralmente trabalham com dados de séries temporais e tentam fazer algumas previsões. Existe um tipo especial de arquitetura de aprendizado profundo que é adequado para análise de séries temporais: redes neurais recorrentes (RNNs), ou ainda mais especificamente, um tipo especial de rede neural recorrente: redes LSTM (long short-term memory).

LSTMs são capazes de capturar os recursos mais importantes de dados de séries temporais e modelar suas dependências. Um modelo de previsão de preços de ações é apresentado como um estudo de caso ilustrativo de como os fundos de hedge podem utilizar tais sistemas. O framework PyTorch, escrito em Python, é usado para treinar o modelo, projetar experimentos e desenhar os resultados.

Começaremos com alguns conceitos básicos de aprendizado profundo antes de passar para exemplos do mundo real:

  • Introduzir o aprendizado profundo como um conceito abstrato.
  • Apresente RNNs – ou, mais especificamente, LSTMs – e como eles podem ser usados ​​para modelar dados de séries temporais.
  • Familiarize os leitores com dados financeiros adequados para aprendizado profundo.
  • Ilustre como um fundo de hedge real usa aprendizado profundo para prever os preços das ações.
  • Por fim, forneça recomendações acionáveis ​​para fundos de hedge novos e existentes sobre como usar/alavancar o aprendizado profundo para aumentar seu desempenho.

Apresentando o caso para negociação de aprendizado profundo

Uma das tarefas mais desafiadoras e empolgantes do setor financeiro é prever se os preços das ações vão subir ou descer no futuro. Hoje, estamos cientes de que os algoritmos de aprendizado profundo são muito bons para resolver tarefas complexas, por isso vale a pena tentar experimentar sistemas de aprendizado profundo para ver se eles podem resolver com sucesso o problema de prever preços futuros.

Como conceito, a rede neural artificial existe há muito tempo, mas o hardware não era bom o suficiente para permitir experimentos rápidos em aprendizado profundo. A Nvidia ajudou a revolucionar as redes de aprendizado profundo há uma década, quando começou a oferecer unidades de processamento gráfico (GPUs) muito rápidas para computação de uso geral em produtos da série Tesla. Em vez de sombrear polígonos em jogos e aplicativos de design profissional, as GPUs altamente paralelizadas também podem calcular outros dados e, em muitos casos, são muito superiores às CPUs.

Existem muito poucos artigos científicos sobre o uso de deep learning em finanças, mas a demanda por especialistas em deep learning de empresas de fintech é forte, pois elas obviamente reconhecem seu potencial. Este artigo ajudará a explicar por que o aprendizado profundo em finanças está se tornando cada vez mais popular, descrevendo como os dados financeiros são usados ​​na construção de sistemas de aprendizado profundo. Um tipo especial de rede neural recorrente – a rede LSTM – também será apresentado. Descreveremos como uma tarefa relacionada a finanças pode ser resolvida usando redes neurais recorrentes.

Este artigo também apresenta um estudo de caso ilustrativo de como os fundos de hedge podem utilizar tais sistemas, apresentado por meio de experimentos. Também consideraremos como os sistemas de aprendizado profundo podem ser aprimorados e como os fundos de hedge podem contratar talentos para construir esses sistemas, ou seja, que tipo de experiência o talento de aprendizado profundo precisa ter.

O que diferencia os fundos de hedge

Antes de prosseguirmos para o aspecto técnico do problema, precisamos explicar o que torna os fundos de hedge únicos. Então, o que é um fundo de hedge?

Um fundo de hedge é um fundo de investimento – uma organização financeira que capta recursos de investidores e os coloca em investimentos de curto e longo prazo, ou em diferentes produtos financeiros. É normalmente formado como uma sociedade limitada ou uma sociedade de responsabilidade limitada. O objetivo de um fundo de hedge é maximizar os retornos. Um retorno é um ganho ou perda no patrimônio líquido dos fundos de hedge em um determinado período de tempo. É geralmente aceito que quando mais risco é assumido, há maior potencial para maiores retornos e perdas.

Para obter bons retornos, os fundos de hedge contam com vários tipos de estratégias de investimento, tentando ganhar dinheiro explorando as ineficiências do mercado. Devido a vários tipos de estratégias de investimento que não são permitidas em fundos de investimento comuns, os fundos de hedge não são registrados como fundos, ou seja, geralmente não são fiscalizados pelo Estado como outros fundos. Eles não precisam publicar suas estratégias de investimento e resultados de negócios, o que pode torná-los bastante arriscados. Alguns fundos de hedge geram mais dinheiro do que a média do mercado, mas alguns deles perdem dinheiro. Alguns deles trazem resultados permanentes, enquanto alguns dos resultados dos hedge funds são variáveis.

Ao investir em fundos de hedge, os investidores aumentam o patrimônio líquido do fundo. No entanto, não é qualquer um que pode investir em fundos de hedge. Os fundos de hedge são destinados a um pequeno número de investidores ricos. Normalmente, aqueles que desejam participar de fundos de hedge precisam ser credenciados. Isso significa que eles devem ter um status especial em relação às leis de regulação financeira. Há uma distinção de país para país em relação a quem pode ter esse status especial. Normalmente, o patrimônio líquido de um investidor precisa ser muito alto – não apenas pessoas físicas, mas bancos e grandes corporações também podem operar em fundos de hedge. Esse credenciamento é projetado para permitir que apenas indivíduos com conhecimento significativo de investimentos participem, protegendo assim os investidores pequenos e inexperientes do risco.

Este artigo considera o marco regulatório dos Estados Unidos, pois os Estados Unidos possuem o mercado financeiro mais desenvolvido do globo. Assim, nos Estados Unidos da América, o termo “investidor credenciado” é definido na Regra 501 do Regulamento D da Comissão de Valores Mobiliários dos EUA (SEC).

De acordo com este regulamento, os investidores credenciados podem ser:

  • Bancos
  • Empresas privadas de desenvolvimento de negócios
  • Organizações
  • Diretores, diretores e sócios gerais dos emissores dos valores mobiliários oferecidos ou vendidos
  • Pessoas físicas cujo patrimônio líquido individual, ou patrimônio líquido conjunto com o cônjuge dessa pessoa, exceda $ 1.000.000
  • Pessoas físicas que tiveram uma renda individual superior a US$ 200.000 em cada um dos dois anos mais recentes ou renda conjunta com o cônjuge dessa pessoa superior a US$ 300.000 em cada um desses anos e tem uma expectativa razoável de atingir o mesmo nível de renda no ano atual
  • Fundos com ativos totais superiores a $ 5.000.000
  • Entidades nas quais todos os acionistas são investidores credenciados

Os gestores de fundos de hedge gerenciam o fundo de hedge. Um gestor de fundos de hedge deve encontrar uma maneira de criar uma vantagem competitiva para ter sucesso, ou seja, criar uma vantagem sobre os rivais e a capacidade de gerar maior valor. Pode ser uma escolha de carreira muito atraente, pois pode ser muito lucrativa se um indivíduo se destacar na gestão do fundo.

Por outro lado, se muitas decisões dos gestores de fundos de hedge forem ruins, eles não serão pagos e ganharão uma reputação negativa. Os melhores gestores de fundos de hedge compõem uma das profissões mais bem pagas em todos os setores. Os gestores de fundos de hedge recebem uma porcentagem dos retornos que obtêm para os investidores, além da taxa de administração. Essa forma de compensação faz com que os gestores de fundos de hedge invistam de forma mais agressiva para obter maiores retornos, mas, por outro lado, isso também leva a um aumento do risco do investidor.

Uma Breve História dos Fundos de Hedge

O primeiro fundo de hedge surgiu em 1949, fundado pelo ex-escritor e sociólogo Alfred Winslow Jones. Foi enquanto ele escrevia um artigo sobre as tendências atuais de investimento para a Fortune, em 1948.

Ele tentou administrar o dinheiro e foi muito bem sucedido. Ele levantou dinheiro usando sua inovação de investimento, que agora é amplamente conhecida como ações longas/curtas. A estratégia ainda é muito popular entre os fundos de hedge. As ações podem ser compradas (comprar: compradas) ou vendidas (vendas: vendidas).

Quando o preço de uma ação está baixo e se espera que o preço de uma ação suba, é lógico comprar uma ação (longa) e vendê-la (curta) assim que atingir seu pico de preço alto, e que é exatamente o ponto da inovação que Alfred Winslow Jones fez - assumir posições longas em ações que devem se valorizar e posições curtas em ações que devem cair.

Dados financeiros e conjuntos de dados

Os dados financeiros pertencem aos dados de série temporal. Uma série temporal é uma série de pontos de dados indexados no tempo. Normalmente, uma série temporal é uma sequência tomada em pontos sucessivos e igualmente espaçados no tempo: uma sequência de dados de tempo discreto. Exemplos de séries temporais são alturas de marés oceânicas, contagens de manchas solares e o valor de fechamento diário do Dow Jones Industrial Average.

Dados históricos neste contexto são dados de séries temporais do passado. É uma das partes mais importantes e valiosas para especular sobre preços futuros. Existem alguns conjuntos de dados disponíveis publicamente online, mas geralmente esses dados não contêm muitos recursos - geralmente são dados de intervalo de 1 dia, dados de intervalo de 1 hora ou dados de intervalo de 1 minuto.

Conjuntos de dados com recursos mais ricos e em intervalos de tempo menores geralmente não estão disponíveis publicamente e podem ser muito caros para obter. Intervalos menores significam mais dados de séries temporais em um período fixo – em um ano há 365 (ou 366) dias, portanto, há um máximo de 365 (ou 366) pontos de dados disponíveis. Cada dia tem 24 horas, então em um ano há 8.760 (ou 8.784) pontos de dados por hora disponíveis, e cada dia tem 86.400 minutos, então em um ano há 525.600 (ou 527.040) minutos de pontos de dados disponíveis.

Com mais dados, mais informações estão disponíveis e, com mais informações, é possível tirar melhores conclusões sobre o que acontecerá no próximo período de tempo – assumindo, é claro, que os dados consistem em um recurso bom o suficiente para generalizar bem. Os dados de preços de ações de 2007-2008, no auge da crise financeira global, são tendenciosos e provavelmente não são relevantes para fazer previsões de preços nos dias de hoje. Com um intervalo de tempo menor, é mais fácil prever o que acontecerá a seguir devido a muitos pontos de dados em um intervalo fixo. É mais fácil prever o que acontecerá no próximo nanossegundo se tivermos todos os pontos de dados para cada nanossegundo em um intervalo fixo de n anos do que o que acontecerá no mercado de ações no próximo ano se tivermos todos os n pontos de dados para cada ano em um intervalo fixo de n anos.

No entanto, isso não significa que, supondo que uma série rápida de previsões de curto prazo esteja correta, a previsão de longo prazo também deva estar correta. Cada previsão introduz um erro e, ao encadear várias previsões, a previsão de longo prazo conterá uma quantidade significativa de erro no final e será inútil. Abaixo está um exemplo de dados de intervalo de 1 dia para ações do Google raspadas online do Yahoo Finance.

Uma série temporal de dados financeiros sobre ações do Google para negociação algorítmica

Existem apenas algumas colunas no conjunto de dados: Data, Abertura, Alta, Baixa e Fechamento - respectivamente, o preço pelo qual um título é negociado pela primeira vez na abertura de uma bolsa, o preço mais alto que o título alcançou em um determinado dia de negociação , o preço mais baixo alcançado em um determinado dia de negociação e o preço final pelo qual um título é negociado naquele dia.

Normalmente, há mais duas colunas em tais conjuntos de dados – Fechamento e Volume Ajustados, mas elas não são relevantes aqui. Fechamento Ajustado é o preço de fechamento após ajustes para desdobramentos e distribuições de dividendos aplicáveis, enquanto Volume é o número de ações negociadas no mercado durante um determinado período de tempo.

Você pode ver que algumas das datas estão faltando. São os dias em que a bolsa de valores não está funcionando, geralmente durante os finais de semana e feriados. Para fins de nossa demonstração do algoritmo de aprendizado profundo, os dias ausentes são complementados com o preço disponível anteriormente. Por exemplo, os preços de fechamento para 16/01/2010, 17/01/2010, 18/01/2010 serão todos 288,126007 porque era o que estava em 15/01/2010. É importante para o nosso algoritmo que os dados estejam sem lacunas para não confundi-los. O algoritmo de aprendizado profundo pode aprender a partir daqui quando são fins de semana e feriados - por exemplo, ele aprenderá que após cinco dias úteis, deve haver dois dias com preços fixos a partir do último dia útil.

representação visual dos movimentos do preço das ações do Google durante um período de tempo

Este é um gráfico dos movimentos do preço das ações do Google desde 2010-01-04. Observe que apenas os dias de negociação são usados ​​para traçar o gráfico.

O que é Aprendizado Profundo?

O aprendizado profundo faz parte do aprendizado de máquina e é baseado em representações de dados de aprendizado. O aprendizado de máquina examina algoritmos cuja funcionalidade não é programada, mas aprendida com os dados. É essencialmente uma abordagem à inteligência artificial.

O aprendizado profundo foi aplicado a vários campos: visão computacional, reconhecimento de fala, processamento de linguagem natural, tradução automática – e em algumas dessas tarefas, alcançou desempenho superior ao dos humanos.

Uma rede neural profunda está no centro do aprendizado profundo. O exemplo mais simples e básico de uma rede neural profunda é uma rede neural feedforward. Abaixo está uma imagem de uma rede neural feedforward simples. Consiste nas camadas de entrada e saída e camadas ocultas.

diagrama de uma rede neural feedforward simples, com camadas de entrada e saída e aprendizado representadas como nós

Camadas ocultas são todas as camadas entre as camadas de entrada e saída. Dizemos que uma rede neural é profunda se tiver mais de uma camada oculta. Cada camada é composta de vários números de neurônios. As camadas nesta rede neural feedforward básica são chamadas de camadas lineares - os neurônios na camada linear apenas multiplicam valores de entradas 1-D (ou 2-D se os dados forem enviados pela rede em lotes) com peso apropriado, somam produtos e dê o resultado final como saída 1-D ou 2-D.

A função de ativação é geralmente aplicada em redes feedforward para introduzir não linearidades para que a rede possa modelar problemas não lineares mais complexos. Em redes feedforward, os dados fluem da camada de entrada para a camada de saída sem loopback. As conexões entre os neurônios são ponderadas. Os pesos precisam ser ajustados para que a rede neural retorne as saídas corretas para as entradas fornecidas. A rede feedforward mapeia dados do espaço de entrada para o espaço de saída. As camadas ocultas extraem recursos importantes e mais abstratos dos recursos da camada anterior.

O pipeline geral de aprendizado profundo é igual ao pipeline de aprendizado de máquina e consiste nas seguintes etapas:

  1. Coleção de dados. Os dados são separados em três partes: dados de treinamento, dados de validação e dados de teste.
  2. Treinar o DNN usando os dados de treinamento em várias “épocas” (cada uma consistindo em várias iterações) e validação após cada época usando os dados de validação.
  3. Testar o modelo (uma instância de uma rede neural com parâmetros fixos) após a sequência de sessões de treinamento e validações.

Treinar a rede neural, na verdade, significa ajustar os pesos entre os pares de neurônios, minimizando a função de perda usando um algoritmo de retropropagação em combinação com o gradiente descendente estocástico. Exceto pelos pesos que são determinados por meio do processo de aprendizado, os algoritmos de aprendizado profundo geralmente exigem a configuração dos hiperparâmetros — parâmetros que não são aprendidos, mas fixados antes do aprendizado. Os hiperparâmetros são número de camadas, número de neurônios em camadas, tipos de camadas, tipos de neurônios e inicialização de peso.

Existem restrições de hardware na configuração de hiperparâmetros; atualmente não é fisicamente possível definir um trilhão de neurônios em uma única GPU. O segundo problema para a busca exaustiva de hiperparâmetros é a explosão combinatória; não é possível pesquisar todas as combinações possíveis de hiperparâmetros porque levaria um tempo infinito. Por causa disso, os hiperparâmetros são definidos aleatoriamente ou usando algumas heurísticas e exemplos conhecidos descritos em artigos científicos - um dos hiperparâmetros usados ​​para análise de dados financeiros mostrados mais adiante neste post é o uso de neurônios recorrentes, como cientistas e engenheiros provaram que funcionam bem com dados de séries temporais. Normalmente, a melhor maneira de ver se os hiperparâmetros de um determinado problema são bons ou não é por meio de experimentos.

O objetivo do treinamento é fazer com que as redes neurais se ajustem aos dados de treinamento. Tanto a validação do modelo, que é feita após cada etapa de treinamento, quanto o teste do modelo, que é feito após todo o procedimento de treinamento, são feitos para ver se o modelo pode generalizar bem. A generalização significa que a rede neural pode fazer boas previsões sobre dados novos e não vistos.

Existem dois termos importantes relacionados à seleção de modelos: overfitting e underfitting . Se uma rede neural for muito complexa em relação aos dados em que é treinada - se tiver muitos parâmetros (muitas camadas e/ou muitos neurônios em camadas) - a rede neural pode se ajustar demais aos dados. Ele pode se ajustar bem aos dados de treinamento porque tem capacidade mais do que suficiente para ajustar todos os dados, mas o desempenho na validação e nos conjuntos de teste é ruim.

Se a rede neural for muito simples em relação aos dados em que é treinada, a rede neural pode se ajustar aos dados. Nesse caso, a rede neural tem baixo desempenho nos conjuntos de treinamento, validação e teste porque sua capacidade não é boa o suficiente para ajustar os dados de treinamento e generalizar. Na imagem abaixo, esses termos são explicados graficamente. A linha azul representa o que é modelado pela rede neural. A primeira imagem mostra a situação em que há poucos parâmetros de rede neural, insuficientes para ajustar os dados de treinamento e generalizar. A segunda imagem mostra a situação quando há o número ideal de parâmetros e a rede neural pode generalizar bem em dados não vistos, e a terceira imagem mostra a situação quando o número de parâmetros de uma rede neural é muito grande e a rede neural pode perfeitamente ajustou todos os dados do conjunto de treinamento, mas tem desempenho ruim nos conjuntos de validação e teste.

representação gráfica de cenários de underfit, ótimo e overfit

Redes Neurais Recorrentes

Uma versão mais complicada de uma rede neural é uma rede neural recorrente. Em redes neurais recorrentes, os dados podem fluir em qualquer direção, ao contrário das redes neurais de feedforward. Eles podem aprender bem as dependências de séries temporais. A arquitetura de uma rede neural recorrente geral é mostrada na imagem abaixo.

representação gráfica da arquitetura geral do rnn

Na imagem abaixo é mostrado um neurônio recorrente. Ele recebe X_{t} , ponto no tempo t , como entrada e retorna h_{t} , estado oculto no tempo t , como saída. A saída oculta é propagada de volta ao neurônio. O neurônio recorrente pode ser desenrolado conforme mostrado na mesma imagem do lado direito. X_{t_0} é um ponto no período t_{0} , X_{t_1} no período t_{1} e X_{t} no período t . As saídas obtidas usando as entradas X_{t_0} , X_{t_1} , …, X_{t_n} em períodos de tempo t_{0} , t_{1} , …, t_{n} são chamadas de saídas ocultas: h_{t_0} , h_{t_1} , …, h_{t_n} , respectivamente.

ilustração visual da estrutura de i/o de um neurônio recorrente

Uma das melhores arquiteturas de redes neurais recorrentes é a arquitetura LSTM. LSTM é mostrado abaixo:

visualização da arquitetura lstm

Os LSTMs têm a mesma estrutura geral que as redes neurais recorrentes gerais, mas o neurônio recorrente é um pouco diferente com uma estrutura mais complexa. Pode-se ver na imagem acima que muita computação é feita dentro de uma célula LSTM. As células LSTM podem ser observadas como uma caixa preta no contexto deste post, mas para leitores mais curiosos, este ótimo post explica cálculos dentro de LSTMs e muito mais.

Vamos chamar a entrada para a rede neural de “vetor de recursos”. É um vetor n -dimensional cujos elementos são feições: f_{0} , f_{1} , f_{2} …, f_{n} .

 \vv{X} = [f_{0}, f_{1}, f_{2}, …, f_{n}]

Agora, vamos explicar como as redes neurais recorrentes podem ser aplicadas a uma tarefa relacionada a finanças. A entrada para a rede neural recorrente é [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] . Digamos que n = 5 . Tomamos cinco preços de ações do Google Close de cinco dias consecutivos (veja a tabela com dados de Abrir/Alto/Baixo/Fechar acima) entre, digamos, 2010-01-04 e 2010-01-08, ou seja, [[311.35], [309.98], [302.16], [295.13], [299.06]] . O vetor de recursos neste exemplo é unidimensional. A sequência de tempo consiste em cinco desses vetores de características. As saídas da rede neural recorrente são recursos ocultos [h_{t_0}, h_{t_1}, h_{t_2}, …, h_{t_n}] . Esses recursos estão em um nível mais abstrato do que os recursos de entrada [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] —LSTM deve aprender as partes importantes dos recursos de entrada e projetá-los para o espaço de recursos ocultos. Esses recursos ocultos e abstratos podem ser propagados na próxima célula LSTM, que fornecerá o próximo conjunto de recursos ocultos e mais abstratos que podem ser propagados novamente para o próximo LSTM e assim por diante. Após a sequência de LSTMs encadeados, o componente final da rede neural é a camada linear (a parte de construção da rede feedforward simples explicada na seção anterior) que mapeia recursos ocultos do último LSTM para o ponto em um espaço dimensional e esse ponto é a saída final da rede - o preço de fechamento previsto no período X_{t+1} . A verdade básica neste exemplo para X_{t+1} é 298.61 .

Observação: também pode haver apenas um LSTM — definir o número de LSTMs é um hiperparâmetro, que geralmente é encontrado empiricamente, embora possamos usar algumas heurísticas. Se os dados não forem tão complexos, usamos uma arquitetura menos complexa para que o modelo não se ajuste demais aos dados. Se os dados forem complexos, usamos um modelo complexo para que o modelo não se ajuste aos dados.

Na fase de treinamento, os preços de fechamento previstos estão sendo comparados com os preços de verdade, e a diferença entre os preços de fechamento previstos e os preços de verdade é minimizada usando um algoritmo de retropropagação e um algoritmo de otimização de gradiente descendente (ou uma de suas formas - concretamente, neste blog, é usada a chamada versão “Adam” de um algoritmo de otimização de gradiente descendente) alterando os pesos da rede neural.

Após o treinamento e teste, no futuro, o usuário só precisa fornecer dados de entrada para a rede neural e ela retornará o preço previsto (e esperançosamente, um preço muito próximo ao preço de verdade do futuro).

Mais uma coisa a mencionar aqui é que, normalmente, lotes de dados são enviados pela rede, tanto nas fases de treinamento quanto nas fases de teste, para que a rede calcule várias saídas em apenas uma passagem.

Abaixo está uma imagem de uma arquitetura usada neste blog para experimentos. Consiste em dois LSTMs empilhados e uma camada linear.

representação visual da arquitetura descrita acima

Experiências com algoritmos de fundos de hedge

Tente usar estratégias de negociação algorítmicas simples assim: se o algoritmo prevê que o preço subirá no dia seguinte, compre n ( n = 1 neste exemplo) ações de uma empresa (longa), caso contrário, venda todas as ações de uma empresa (curta). O valor inicial da carteira (o valor do dinheiro e das ações combinados) é definido como $ 100.000. Cada ação longa ou curta comprará n ações de uma empresa (Google, neste exemplo) ou venderá todas as ações de uma empresa, respectivamente. No início, o sistema possui 0 ações de uma determinada empresa.

Lembre-se sempre de que este é um exemplo muito básico e simples, não destinado ao uso no mundo real, pois seria necessário muito mais trabalho de P&D para ajustar o modelo para funcionar bem na prática. Algumas coisas são negligenciadas aqui que devem ser consideradas em um cenário do mundo real; por exemplo, as taxas de transação não são incorporadas ao modelo. Supõe-se que o sistema pode negociar exatamente no mesmo horário todos os dias, e assume-se que todos os dias, mesmo em um fim de semana ou feriado, é um dia de negociação.

Para testar, um método de backtesting é usado. O método de backtesting usa dados históricos para reconstruir negócios que teriam ocorrido no passado usando as regras definidas com a estratégia desenvolvida. O conjunto de dados é dividido em duas partes - a primeira parte é o conjunto de treinamento (passado) e a segunda parte é o conjunto de teste (futuro). O modelo é treinado em um conjunto de treinamento e, após o treinamento, simulamos o futuro na segunda parte do conjunto de dados para ver como o modelo treinado se comportaria no futuro sem ser treinado nele.

A métrica para avaliar a estratégia de negociação é o índice de Sharpe (sua versão anualizada, assumindo que todos os dias de um ano são dias de negociação e o ano tem 365 dias: sqrt(365)*mean(returns)/std(returns)) , onde o retorno é definido como p_{t}/p_{t-1} - 1 e p_{t} é o preço no período de tempo t . O índice de Sharpe mostra a relação entre os retornos e o risco adicional incorrido, por isso é bom ter um índice de Sharpe maior. Normalmente, um índice maior que 1 é aceitável pelos investidores, 2 é muito bom e 3 é excelente.

Apenas o preço de fechamento diário, dos preços históricos do Google do conjunto de dados do Yahoo Finance, é usado como recurso. Mais recursos ajudarão, mas está fora do escopo deste blog testar quais outros recursos do conjunto de dados (Aberto, Alto, Baixo) são importantes. Alguns outros recursos não incluídos na tabela também podem ser úteis – por exemplo, o sentimento das notícias em um determinado minuto ou acontecimentos importantes em um determinado dia. No entanto, às vezes é muito difícil fazer representações de dados que sejam úteis para entrada de rede neural e combiná-las com recursos existentes. Por exemplo, é fácil estender o vetor de recursos e colocar um número que represente o sentimento das notícias ou o sentimento do tweet de Trump ( -1 muito negativo, 0 neutro, +1 muito positivo etc.) tão fácil colocar momentos particulares orientados a eventos (piratas no canal de Suez, bomba em uma refinaria no Texas) no vetor de recursos porque, para cada momento específico, precisaremos ter um elemento adicional no vetor de recursos para colocar 1 se o evento aconteceu ou 0 caso contrário, o que levará a um número infinito de elementos para todos os momentos possíveis.

Para esses dados mais difíceis, poderíamos definir algumas categorias e, para cada momento, determinar a qual categoria pertence. Também poderíamos adicionar recursos de ações de outras empresas para um sistema aprender a correlação entre os preços das ações de diferentes empresas. Além disso, existe um tipo de rede neural especializada em visão computacional – redes neurais convolucionais – que seria interessante combinar com camadas recorrentes e ver como os recursos visuais se correlacionam com os preços de algumas empresas. Talvez pudéssemos usar o feed da câmera de uma estação de trem lotada como um recurso e anexar esse feed a uma rede neural e ver se o que a rede neural vê está correlacionado com os preços das ações de algumas empresas - pode haver algum conhecimento oculto mesmo nisso exemplo banal e absurdo.

Abaixo está um gráfico que mostra como a perda média de treinamento está diminuindo ao longo do tempo, o que significa que a rede neural tem capacidade suficiente para ajustar os dados de treinamento. É importante dizer que os dados precisam ser normalizados para que o algoritmo de aprendizado profundo possa convergir.

Gráfico de negociação de aprendizado profundo mostrando a perda média ao longo do tempo

Abaixo está um gráfico que mostra como a perda média de teste está diminuindo ao longo do tempo, o que significa que a rede neural tem a capacidade de generalizar em dados não vistos.

Gráfico de negociação de aprendizado profundo mostrando a perda média de teste ao longo do tempo

O algoritmo é ganancioso; se ele previu que o preço subiria no dia seguinte, então o algoritmo imediatamente compra n=1 ação de uma empresa (se houver dinheiro suficiente no portfólio) e, caso contrário, ele vende todas as ações da empresa (se houver algum ). O período de investimento é fixo e leva 300 dias. Após 300 dias, todas as ações são vendidas. A simulação em dados não vistos, após algum treinamento, pode ser vista abaixo. É mostrado como o valor do portfólio está aumentando ao longo do tempo por ações longas/curtas (ou não fazer nada) a cada dia.

Gráfico de finanças de Deep Learning mostrando a simulação em dados não vistos

O índice de Sharpe para a simulação acima é 1,48. O valor final do portfólio após 300 dias é de $ 100.263,79. Se apenas comprássemos ações no primeiro dia e as vendêssemos após 300 dias, a carteira valeria $ 99.988,41.

Abaixo é mostrada uma situação em que a rede neural não é bem treinada e perde dinheiro após um período fixo de 300 dias.

Resultados de negociação de rede neural

A razão de Sharpe é -0,94. O valor final do portfólio após 300 dias é de $ 99.868,36.

Aqui está um exemplo interessante - o algoritmo acima é ganancioso e apenas prevê o preço para o dia seguinte, agindo com base apenas nessa previsão. É possível encadear várias previsões e prever o preço nas próximas etapas no futuro. Por exemplo, com uma primeira entrada de [X_ground_truth_{t0}, X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}] e a primeira saída sendo [X_predicted_{t5}] , podemos alimentar o rede neural com essa previsão para que a próxima entrada seja [X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}] e a saída seja [X_predicted_{t6}] . A próxima entrada de lá é [X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}, X_predicted_{t6}] que resulta em [X_predicted_{t7}] e assim por diante. O problema aqui é que estamos introduzindo um erro de previsão que aumenta a cada nova etapa e, finalmente, acabamos com um resultado de longo prazo muito ruim, como mostra a imagem abaixo. A previsão no início segue a tendência decrescente da verdade do terreno e depois estagna e se torna cada vez pior ao longo do tempo.

gráfico mostrando a previsão cumulativa contrastando com a verdade dos valores das ações

Uma análise de aprendizado profundo muito simples foi feita nos preços das ações do Google, mas ela pode incorporar praticamente qualquer conjunto de dados financeiros, desde que a quantidade de dados seja grande o suficiente e de boa qualidade. Os dados devem ser discriminativos e devem descrever e representar bem o problema.

Empacotando

Se funcionasse e generalizasse bem em testes extensivos, esse sistema poderia permitir que os gerentes de fundos de hedge especulassem sobre os preços futuros das ações de uma empresa usando aprendizado profundo e confiando em estratégias de negociação algorítmica.

Os gerentes de fundos de hedge poderiam dar ao sistema uma quantia de dinheiro para negociar automaticamente todos os dias. No entanto, seria muito ruim permitir que algoritmos de negociação automatizados negociem sem qualquer supervisão. O gerente de fundos de hedge deve ter algumas habilidades de aprendizado profundo ou empregar alguém com as habilidades necessárias para supervisionar o sistema e determinar quando o sistema perdeu a capacidade de generalizar e negociar bem.

If the system lost the ability to generalize, then it would be necessary to retrain it from the beginning and test it again (maybe by introducing more discriminative features or new knowledge—using new data from the past that didn't exist when the model was first trained).

Sometimes, the data is simply not good enough for the deep learning system to be trained and generalize well and, in that case, an experienced deep learning engineer should be able to detect and rectify such a situation. To build a deep learning trading system, you need hedge funds data scientists, machine learning/deep learning experts (both scientists and engineers), R&D engineers familiar with machine learning/deep learning, etc. No matter which part of an application of machine learning they are familiar with, whether it's computer vision or speech recognition, seasoned professionals will be able to put their experience to good use in the financial sector. At its root, deep learning has the same basics regardless of application or industry, and it should be easy for someone experienced to switch from theme to theme.

The system we presented is very basic and, to be applied in the real world, more R&D should be done in order to increase the returns. Possible improvements of the system could be in developing better trading strategies. Collecting more data for training, which is usually very expensive, will help. A smaller time interval between the points is better. Improvements can also surface in using more features (eg, news sentiments or important happenings corresponding to each point in the dataset, despite being hard to code for a neural network) and extensive grid search for hyperparameters and RNN architecture discovery.

Also, more computing power (powerful GPUs are a must) is needed to make a lot of extensive experiments in parallel and to process a large amount of data, provided that a large amount of data is collected.

Referências:

  • https://www.datacamp.com/community/tutorials/finance-python-trading
  • http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  • https://en.wikipedia.org
  • https://www.investopedia.com/
  • https://finance.yahoo.com/
  • http://pytorch.org/

Author's Note: I would like to thank Ivan Capalija and Matej Paradzik for the constructive conversations and advice about deep learning in finance, which helped me in writing this blog.