Jesse Spaulding.
Como ganhei $ 500k com aprendizado de máquina e HFT (negociação de alta frequência)
Este post irá detalhar o que eu fiz para fazer aprox. 500k de negociação de alta frequência de 2009 a 2010. Desde que eu estava negociando de forma totalmente independente e não estou mais executando o meu programa, estou feliz em dizer tudo. Minha negociação foi principalmente em contratos de futuros Russel 2000 e DAX.
A chave do meu sucesso, acredito, não estava em uma equação financeira sofisticada, mas sim no design geral do algoritmo, que unia muitos componentes simples e usava o aprendizado de máquina para otimizar a máxima lucratividade. Você não precisa conhecer nenhuma terminologia sofisticada aqui, porque quando eu configurei meu programa, tudo foi baseado na intuição. (O surpreendente curso de aprendizado de máquina de Andrew Ng ainda não estava disponível - se você clicar nesse link, você será levado ao meu projeto atual: CourseTalk, um site de revisão para MOOCs)
Primeiro, quero apenas demonstrar que meu sucesso não foi simplesmente o resultado da sorte. Meu programa fazia de 1000 a 4000 negociações por dia (meio longo, meio curto) e nunca ocupava posições de mais do que alguns contratos por vez. Isso significava que a sorte aleatória de qualquer negociação em particular era muito rápida. O resultado foi que eu nunca perdi mais de US $ 2000 em um dia e nunca tive um mês perdido:
(EDIT: Estes números são depois de pagar comissões)
E aqui está um gráfico para lhe dar uma noção da variação diária. Note que isso exclui os últimos 7 meses porque - à medida que os números pararam de subir - perdi minha motivação para entrar neles.
Antes de configurar o meu programa de negociação automatizado, eu tinha 2 anos de experiência como "manual" e "& rdquo; comerciante do dia. Isso foi em 2001 - eram os primeiros dias do comércio eletrônico e havia oportunidades para os "cambistas". fazer um bom dinheiro. Eu só posso descrever o que eu estava fazendo como se fosse jogar videogames / jogos de azar com uma suposta vantagem. Ser bem-sucedido significa ser rápido, ser disciplinado e ter uma boa capacidade intuitiva de reconhecimento de padrões. Consegui ganhar cerca de US $ 250 mil, pagar meus empréstimos estudantis e ter dinheiro sobrando. Ganhar!
Nos próximos cinco anos, eu lançaria duas startups, adquirindo algumas habilidades de programação ao longo do caminho. Não seria até o final de 2008 que eu voltaria a negociar. Com o dinheiro acabando com a venda da minha primeira startup, a negociação oferecia esperanças de algum dinheiro rápido enquanto eu descobria o meu próximo movimento.
Em 2008, eu era "manualmente" e "rdquo; dia negociando futuros usando software chamado T4. Eu estava querendo algumas teclas de atalho de entrada de pedidos personalizadas, então depois de descobrir que o T4 tinha uma API, aceitei o desafio de aprender C # (a linguagem de programação necessária para usar a API) e fui em frente e desenvolvi algumas teclas de atalho.
Depois de molhar os pés com a API, logo tive aspirações maiores: eu queria ensinar o computador a trocar por mim. A API forneceu um fluxo de dados de mercado e uma maneira fácil de enviar pedidos para a troca - tudo o que eu tinha que fazer era criar a lógica no meio.
Abaixo está uma imagem de uma janela de negociação T4. O que foi legal é que quando eu comecei meu programa trabalhando eu pude assistir o comércio de computador exatamente nesta mesma interface. Assistir ordens reais entrando e saindo (por conta própria com meu dinheiro real) era ao mesmo tempo emocionante e assustador.
O design do meu algoritmo.
Desde o início, meu objetivo era configurar um sistema de modo que eu pudesse estar razoavelmente confiante de que ganharia dinheiro antes de fazer qualquer negociação ao vivo. Para conseguir isso, eu precisava construir uma estrutura de simulação de negociação que simulasse a negociação ao vivo, com a maior precisão possível.
Enquanto a negociação no modo ao vivo exigia atualizações do mercado de processamento transmitidas pela API, o modo de simulação exigia a leitura das atualizações do mercado a partir de um arquivo de dados. Para coletar esses dados, configurei a primeira versão do meu programa para simplesmente conectar-me à API e registrar as atualizações do mercado com registros de data e hora. Acabei usando 4 semanas de dados de mercado recentes para treinar e testar meu sistema.
Com uma estrutura básica em vigor, ainda tinha a tarefa de descobrir como criar um sistema comercial lucrativo. Acontece que meu algoritmo se dividiria em dois componentes distintos, que eu explorarei por sua vez:
Previsão de movimentos de preços; e Fazendo negócios lucrativos.
Previsão de movimentos de preços.
Talvez um componente óbvio de qualquer sistema de negociação seja a capacidade de prever onde os preços irão se mover. E o meu não foi exceção. Eu defini o preço atual como a média do lance interno e da oferta interna e estabeleci a meta de prever onde o preço estaria nos próximos 10 segundos. Meu algoritmo precisaria apresentar essa previsão momento a momento ao longo do dia de negociação.
Criando & amp; otimização de indicadores.
Eu criei um punhado de indicadores que provaram ter uma capacidade significativa de prever movimentos de preços de curto prazo. Cada indicador produziu um número que foi positivo ou negativo. Um indicador era útil se, na maior parte dos casos, um número positivo correspondesse ao aumento do mercado e um número negativo correspondesse à queda do mercado.
Meu sistema me permitiu determinar rapidamente a capacidade preditiva de qualquer indicador, por isso pude experimentar muitos indicadores diferentes para ver o que funcionava. Muitos dos indicadores tinham variáveis nas fórmulas que os produziam e eu consegui encontrar os valores ideais para essas variáveis fazendo comparações lado a lado dos resultados obtidos com valores variáveis.
Os indicadores que foram mais úteis foram todos relativamente simples e foram baseados em eventos recentes no mercado em que eu estava negociando, bem como nos mercados de títulos correlacionados.
Fazendo previsões precisas de movimentação de preços.
Ter indicadores que simplesmente previam uma alta ou baixa no preço não era suficiente. Eu precisava saber exatamente quanto movimento de preço era previsto por cada valor possível de cada indicador. Eu precisava de uma fórmula que convertesse um valor de indicador em uma previsão de preço.
Para conseguir isso, acompanhei as movimentações de preço previstas em 50 buckets que dependiam do intervalo em que o valor do indicador caiu. Isso gerou previsões exclusivas para cada bucket que eu era capaz de representar graficamente no Excel. Como você pode ver, a mudança de preço esperada aumenta à medida que o valor do indicador aumenta.
Com base em um gráfico como esse, consegui fazer uma fórmula para ajustar a curva. No começo eu fiz isso "ajuste de curva". manualmente, mas logo escrevi algum código para automatizar esse processo.
Note que nem todas as curvas do indicador tinham a mesma forma. Observe também que os buckets foram distribuídos logaritmicamente para distribuir os dados de maneira uniforme. Por fim, observe que os valores dos indicadores negativos (e suas previsões de preços descendentes correspondentes) foram invertidos e combinados com os valores positivos. (Meu algoritmo tratado para cima e para baixo exatamente o mesmo.)
Combinando indicadores para uma única previsão.
Uma coisa importante a considerar era que cada indicador não era totalmente independente. Eu não poderia simplesmente somar todas as previsões que cada indicador fez individualmente. A chave era descobrir o valor preditivo adicional que cada indicador tinha além do que já estava previsto. Isso não era difícil de implementar, mas significava que se eu estivesse "ajustando a curva", vários indicadores ao mesmo tempo, tive que ser cuidadoso; a mudança de um efetuaria as previsões de outro.
Para ajustar a curva & rdquo; Todos os indicadores ao mesmo tempo eu configurei o otimizador para pisar apenas 30% do caminho para as novas curvas de previsão com cada passagem. Com esse salto de 30%, descobri que as curvas de previsão se estabilizariam em poucas passagens.
Com cada indicador nos dando agora a previsão adicional de preço, eu poderia simplesmente adicioná-los para produzir uma única previsão de onde o mercado estaria em 10 segundos.
Por que prever preços não é suficiente.
Você pode pensar que com essa vantagem no mercado eu era de ouro. Mas você precisa ter em mente que o mercado é composto de ofertas e ofertas - não é apenas um preço de mercado. Sucesso na negociação de alta freqüência se resume a obter bons preços e não é assim tão fácil.
Os fatores a seguir dificultam a criação de um sistema lucrativo:
Com cada negócio eu tive que pagar comissões ao meu corretor e à bolsa. O spread (diferença entre oferta mais alta e oferta mais baixa) significava que se eu simplesmente comprasse e vendesse aleatoriamente, estaria perdendo uma tonelada de dinheiro. A maior parte do volume do mercado era de outros bots que só fariam uma troca comigo se achassem que tinham alguma vantagem estatística. Vendo uma oferta não garante que eu poderia comprá-lo. No momento em que minha ordem de compra chegou à bolsa, era muito possível que essa oferta tivesse sido cancelada. Como um pequeno participante do mercado, não havia como competir sozinho com a velocidade.
Construindo uma simulação de negociação completa.
Então eu tive uma estrutura que me permitiu backtest e otimizar os indicadores. Mas eu tive que ir além disso - eu precisava de um framework que me permitisse fazer backtest e otimizar um sistema de negociação completo; aquele em que eu estava mandando pedidos e ficando em posições. Neste caso, eu estaria otimizando para P & amp; L total e, em certa medida, P & amp; L médio por negociação.
Isso seria mais complicado e, de certa forma, impossível modelar exatamente, mas eu fiz o melhor que pude. Aqui estão alguns dos problemas que eu tive que lidar:
Quando um pedido foi enviado ao mercado na simulação, tive que modelar o tempo de atraso. O fato de meu sistema ter visto uma oferta não significa que ela poderia comprá-la imediatamente. O sistema enviaria o pedido, aguardaria aproximadamente 20 milissegundos e somente se a oferta ainda estivesse lá era considerado como um negócio executado. Isso era inexato porque o tempo real de atraso era inconsistente e não relatado. Quando eu fiz lances ou ofertas, tive que olhar para o fluxo de execução de negociação (fornecido pela API) e usá-los para avaliar quando meu pedido seria executado. Para fazer isso direito eu tive que rastrear a posição do meu pedido na fila. (É um sistema first-in first-out). Novamente, eu não pude fazer isso perfeitamente, mas fiz uma melhor aproximação.
Para refinar minha simulação de execução de pedidos, o que fiz foi extrair meus arquivos de log da negociação ao vivo pela API e compará-los aos arquivos de log produzidos pela negociação simulada no mesmo período de tempo. Consegui obter minha simulação ao ponto de ser bastante precisa e, para as partes que eram impossíveis de modelar exatamente, certifiquei-me de, pelo menos, produzir resultados que fossem estatisticamente semelhantes (nas métricas que julguei importantes).
Fazendo negócios lucrativos.
Com um modelo de simulação de pedidos, agora eu poderia enviar pedidos no modo de simulação e ver um P & amp; Mas como meu sistema saberia quando e onde comprar e vender?
As previsões do movimento de preços foram um ponto de partida, mas não toda a história. O que eu fiz foi criar um sistema de pontuação para cada um dos 5 níveis de preço na oferta e oferta. Estes incluíram um nível acima da oferta interna (para uma ordem de compra) e um nível abaixo da oferta interna (para uma ordem de venda).
Se a pontuação de um determinado nível de preço estiver acima de um determinado limite, isso significa que o meu sistema deve ter um lance / oferta ativa - abaixo do limite, então qualquer pedido ativo deve ser cancelado. Com base nisso, não era incomum que meu sistema exibisse um lance no mercado e o cancelasse imediatamente. (Embora eu tentei minimizar isso, é irritante para quem olha para a tela com olhos humanos - inclusive eu.)
As pontuações do nível de preços foram calculadas com base nos seguintes fatores:
A previsão do movimento de preços (que discutimos anteriormente). O nível de preços em questão. (Níveis internos significavam que grandes previsões de movimentação de preço eram necessárias.) O número de contratos na frente do meu pedido na fila. (Menos foi melhor.) O número de contratos por trás do meu pedido na fila. (Mais foi melhor.)
Essencialmente, esses fatores serviram para identificar "seguro". lugares para licitar / oferecer. A previsão do movimento de preços, por si só, não era adequada porque não levava em conta o fato de que, ao fazer uma oferta, eu não era preenchido automaticamente - só fui preenchido se alguém me vendesse lá. A realidade era que o simples fato de alguém me vender a um certo preço mudava as probabilidades estatísticas do negócio.
As variáveis usadas nesta etapa foram todas sujeitas a otimização. Isso foi feito exatamente da mesma maneira que eu otimizei as variáveis nos indicadores de preço, exceto neste caso eu estava otimizando para a linha de fundo P & amp; L.
Quando negociamos como seres humanos, muitas vezes temos emoções e vieses poderosos que podem levar a decisões menos que ótimas. Obviamente, não queria codificar esses vieses. Aqui estão alguns fatores que meu sistema ignorou:
O preço que uma posição foi inserida - Em um escritório comercial, é muito comum ouvir conversas sobre o preço em que alguém é comprido ou baixo, como se isso pudesse afetar sua futura tomada de decisão. Embora isso tenha alguma validade como parte de uma estratégia de redução de riscos, ela realmente não tem relação com o curso futuro dos eventos no mercado. Portanto, meu programa ignorou completamente essa informação. É o mesmo conceito que ignorar os custos irrecuperáveis. Indo curto vs. saindo de uma posição longa - Tipicamente um trader teria critérios diferentes que determinam onde vender uma posição comprada versus onde ir short. No entanto, da minha perspectiva de algoritmos, não havia razão para fazer uma distinção. Se meu algoritmo esperava um movimento descendente, a venda era uma boa ideia, independentemente de ser atualmente longa, curta ou plana. A & ldquo; dobrando & rdquo; estratégia - Esta é uma estratégia comum, onde os comerciantes vão comprar mais ações no caso de que o comércio original vai contra eles. Isso faz com que o preço médio de compra seja menor e isso significa que quando (ou se) a ação girar, você estará pronto para recuperar seu dinheiro rapidamente. Na minha opinião, esta é realmente uma estratégia horrível, a menos que você esteja Warren Buffet. Você é levado a pensar que está indo bem porque a maioria de seus negócios será vencedores. O problema é quando você perde você perde grande. O outro efeito é que torna difícil julgar se você realmente tem uma vantagem no mercado ou está apenas tendo sorte. Ser capaz de monitorar e confirmar se meu programa realmente tinha uma vantagem era uma meta importante.
Como meu algoritmo tomava decisões da mesma forma, independentemente de onde ele entrasse em uma negociação ou se era atualmente longo ou curto, ocasionalmente ele fazia parte (e tomava) de algumas grandes negociações perdedoras (além de algumas grandes negociações vencedoras). Mas, você não deve pensar que não houve nenhum gerenciamento de risco.
Para gerenciar o risco, impus um tamanho máximo de posição de dois contratos por vez, ocasionalmente aumentado em dias de alto volume. Eu também tinha um limite máximo de perda diária para proteger contra condições inesperadas de mercado ou um bug no meu software. Esses limites foram aplicados no meu código, mas também no backend por meio do meu corretor. Aconteceu que nunca encontrei problemas significativos.
A partir do momento em que comecei a trabalhar no meu programa, demorei cerca de 6 meses até atingir o ponto de rentabilidade e comecei a executá-lo ao vivo. Embora, para ser justo, uma quantidade significativa de tempo foi aprender uma nova linguagem de programação. Enquanto trabalhei para melhorar o programa, vi um aumento nos lucros para cada um dos próximos quatro meses.
Toda semana eu reciclaria meu sistema com base nas 4 semanas anteriores de dados. Descobri que isso estabelecia o equilíbrio certo entre captar tendências comportamentais recentes do mercado e garantir que meu algoritmo tivesse dados suficientes para estabelecer padrões significativos. Como o treinamento começou a tomar mais e mais tempo, eu o dividi para que pudesse ser executado por 8 máquinas virtuais usando o amazon EC2. Os resultados foram então reunidos na minha máquina local.
O ponto alto da minha negociação foi em outubro de 2009, quando fiz quase 100k. Depois disso, continuei a passar os próximos quatro meses tentando melhorar meu programa, apesar do lucro reduzido a cada mês. Infelizmente, a essa altura, acho que implementei todas as minhas melhores ideias, porque nada do que tentei parecia ajudar muito.
Com a frustração de não poder fazer melhorias e não ter senso de crescimento, comecei a pensar em uma nova direção. Eu enviei um e-mail para 6 diferentes empresas de negociação de alta frequência para ver se eles estariam interessados em comprar meu software e me contratar para trabalhar para eles. Ninguém respondeu. Eu tive algumas novas idéias de inicialização que eu queria trabalhar, então eu nunca dei continuidade.
ATUALIZAÇÃO - Eu postei isso no Hacker News e tem recebido muita atenção. Eu só quero dizer que eu não defendo ninguém tentando fazer algo assim agora. Você precisaria de uma equipe de pessoas realmente inteligentes com uma variedade de experiências para ter qualquer esperança de competir. Mesmo quando eu estava fazendo isso, acredito que era muito raro para as pessoas alcançarem o sucesso (embora eu tivesse ouvido falar de outras pessoas).
Há um comentário no topo da página que menciona "estatísticas manipuladas" e se refere a mim como um investidor de varejo & rdquo; que quants iria "alegremente escolher". Este é um comentário bastante infeliz que simplesmente não se baseia na realidade. Deixando isso de lado, há alguns comentários interessantes: news. ycombinator / item? Id = 4748624.
ATUALIZAÇÃO # 2 - Fiz uma FAQ de acompanhamento que responde a algumas perguntas comuns que recebi de traders sobre essa postagem.
Melhores estratégias 4: Machine Learning.
Deep Blue foi o primeiro computador que ganhou um campeonato mundial de xadrez. Isso foi em 1996, e levou 20 anos até que outro programa, AlphaGo, pudesse derrotar o melhor jogador de Go humano. O Deep Blue era um sistema baseado em modelos com regras de xadrez hardwired. O AlphaGo é um sistema de mineração de dados, uma rede neural profunda treinada com milhares de jogos Go. Não melhorou hardware, mas um avanço no software foi essencial para a etapa de bater os melhores jogadores de xadrez para bater os melhores jogadores de Go.
Nesta quarta parte da minissérie, analisaremos a abordagem de mineração de dados para o desenvolvimento de estratégias de negociação. Este método não se preocupa com os mecanismos de mercado. Ele apenas verifica curvas de preços ou outras fontes de dados para padrões preditivos. Aprendizado de máquina ou & # 8220; Inteligência Artificial & # 8221; nem sempre está envolvido em estratégias de mineração de dados. Na verdade, o mais popular # 8211; e surpreendentemente rentável & # 8211; O método de mineração de dados funciona sem nenhuma rede neural sofisticada ou máquina de vetores de suporte.
Princípios de aprendizado de máquina.
Um algoritmo de aprendizagem é alimentado com amostras de dados, normalmente derivadas de algum modo dos preços históricos. Cada amostra consiste em n variáveis x 1 .. x n, comumente chamadas de preditores, recursos, sinais ou simplesmente input. Esses preditores podem ser os retornos de preço das últimas n barras, ou uma coleção de indicadores clássicos, ou quaisquer outras funções imagináveis da curva de preço (eu mesmo vi os pixels de uma imagem do gráfico de preços usados como preditores de um gráfico neural). rede!). Cada amostra também inclui normalmente uma variável-alvo y, como o retorno da transação seguinte após a amostra, ou o próximo movimento de preço. Na literatura você pode encontrar y também chamado rótulo ou objetivo. Em um processo de treinamento, o algoritmo aprende a predizer o alvo y a partir dos preditores x 1 .. x n. A memória erudita & # 8216; & # 8217; é armazenado em uma estrutura de dados denominada model que é específica para o algoritmo (não confundir com um modelo financeiro para estratégias baseadas em modelos!). Um modelo de aprendizado de máquina pode ser uma função com regras de predição no código C, geradas pelo processo de treinamento. Ou pode ser um conjunto de pesos de conexão de uma rede neural.
Os preditores, recursos ou o que quer que você os chame, devem conter informações suficientes para prever a meta com alguma precisão. Eles também geralmente cumprem dois requisitos formais. Primeiro, todos os valores de previsão devem estar no mesmo intervalo, como -1 .. +1 (para a maioria dos algoritmos R) ou -100 .. +100 (para algoritmos Zorro ou TSSB). Então você precisa normalizá-los de alguma forma antes de enviá-los para a máquina. Em segundo lugar, as amostras devem ser equilibradas, isto é, igualmente distribuídas por todos os valores da variável alvo. Portanto, deve haver tantos vencendo quanto perdendo amostras. Se você não observar esses dois requisitos, ficará imaginando por que está obtendo resultados ruins com o algoritmo de aprendizado de máquina.
Algoritmos de regressão predizem um valor numérico, como a magnitude e o sinal do próximo movimento de preço. Algoritmos de classificação preveem uma classe de amostra qualitativa, por exemplo, se ela está precedendo uma vitória ou uma perda. Alguns algoritmos, como redes neurais, árvores de decisão ou máquinas de vetores de suporte, podem ser executados nos dois modos.
Alguns algoritmos aprendem a dividir amostras em classes sem precisar de nenhum destino. Isso é aprendizagem não supervisionada, ao contrário da aprendizagem supervisionada usando um alvo. Em algum lugar entre os dois está o aprendizado por reforço, em que o sistema se treina executando simulações com os recursos dados e usando o resultado como alvo de treinamento. AlphaZero, o sucessor do AlphaGo, usou o aprendizado por reforço ao jogar milhões de jogos Go contra si próprio. Em finanças, há poucas aplicações para aprendizado não supervisionado ou de reforço. 99% das estratégias de aprendizado de máquina usam o aprendizado supervisionado.
Seja qual for o sinal que estamos usando para os preditores em finanças, eles provavelmente conterão muito ruído e pouca informação, e serão não-estacionários em cima dele. Portanto, a previsão financeira é uma das tarefas mais difíceis no aprendizado de máquina. Algoritmos mais complexos não atingem necessariamente melhores resultados. A seleção dos preditores é fundamental para o sucesso. Não é uma boa ideia usar muitos preditores, pois isso simplesmente causa overfitting e falha na operação de amostra. Portanto, as estratégias de mineração de dados geralmente aplicam um algoritmo de pré-seleção que determina um pequeno número de preditores de um conjunto de muitos. A pré-seleção pode se basear na correlação entre preditores, no significado, no conteúdo da informação ou simplesmente no sucesso da previsão com um conjunto de testes. Experimentos práticos com seleção de recursos podem ser encontrados em um artigo recente no blog Robot Wealth.
Aqui está uma lista dos métodos mais populares de mineração de dados usados em finanças.
1. Sopa indicadora.
A maioria dos sistemas de negociação que estamos programando para clientes não é baseada em um modelo financeiro. O cliente queria apenas sinais comerciais de determinados indicadores técnicos, filtrados com outros indicadores técnicos em combinação com indicadores mais técnicos. Quando perguntado como essa miscelânea de indicadores poderia ser uma estratégia lucrativa, ele normalmente respondia: "Confie em mim." Eu estou trocando-o manualmente, e isso funciona. & # 8221;
Isso de fato. Pelo menos às vezes. Embora a maioria desses sistemas não tenham passado no teste WFA (e alguns nem mesmo um simples backtest), um número surpreendentemente grande foi o que aconteceu. E esses também eram frequentemente lucrativos em negociações reais. O cliente tinha sistematicamente experimentado indicadores técnicos até encontrar uma combinação que funcionasse na negociação ao vivo com certos ativos. Essa forma de análise técnica de tentativa e erro é uma abordagem clássica de mineração de dados, executada apenas por um ser humano e não por uma máquina. Eu não posso realmente recomendar este método & # 8211; e muita sorte, para não falar de dinheiro, está provavelmente envolvida & # 8211; mas posso testemunhar que às vezes leva a sistemas lucrativos.
2. Padrões de vela.
Não deve ser confundido com aqueles Padrões Japoneses de Vela que tiveram seu melhor encontro antes, há muito tempo. O equivalente moderno é a negociação de ações de preço. Você ainda está olhando para as velas abertas, altas, baixas e fechadas. Você ainda está esperando encontrar um padrão que preveja uma direção de preço. Mas agora você está analisando as curvas de preços contemporâneas para coletar esses padrões. Existem pacotes de software para esse fim. Eles pesquisam padrões que são lucrativos por algum critério definido pelo usuário e os utilizam para criar uma função específica de detecção de padrões. Poderia se parecer com este (do analisador de padrões do Zorro):
Esta função C retorna 1 quando os sinais correspondem a um dos padrões, caso contrário, 0. Você pode ver no longo código que essa não é a maneira mais rápida de detectar padrões. Um método melhor, usado pelo Zorro quando a função de detecção não precisa ser exportada, está classificando os sinais pela sua magnitude e verificando a ordem de classificação. Um exemplo de tal sistema pode ser encontrado aqui.
O preço da negociação de ações realmente funciona? Assim como a sopa indicadora, ela não é baseada em nenhum modelo financeiro racional. Pode-se imaginar, na melhor das hipóteses, que sequências de movimentos de preços fazem com que os participantes do mercado reajam de uma determinada maneira, estabelecendo assim um padrão preditivo temporário. No entanto, o número de padrões é bastante limitado quando você olha apenas sequências de algumas velas adjacentes. O próximo passo é comparar velas que não são adjacentes, mas arbitrariamente selecionadas dentro de um período de tempo mais longo. Dessa forma, você está obtendo um número quase ilimitado de padrões & # 8211; mas ao custo de finalmente deixar o reino do racional. É difícil imaginar como um movimento de preço pode ser previsto por alguns padrões de velas de semanas atrás.
Ainda assim, muito esforço está sendo feito. Um colega blogueiro, Daniel Fernandez, administra um site de assinatura (Asirikuy) especializado em padrões de velas de mineração de dados. Ele refinou o padrão de negociação até os menores detalhes, e se alguém conseguisse algum lucro dessa maneira, seria ele. Mas para seus assinantes & # 8217; decepção, trocando seus padrões ao vivo (QuriQuant) produziu resultados muito diferentes dos seus maravilhosos backtests. Se realmente existem sistemas de ações lucrativas, aparentemente ninguém os encontrou ainda.
3. Regressão linear
A base simples de muitos algoritmos complexos de aprendizado de máquina: Preveja a variável de destino y por uma combinação linear dos preditores x 1 .. x n.
Os coeficientes a n são o modelo. Eles são calculados para minimizar a soma das diferenças quadráticas entre os valores verdadeiros de y das amostras de treinamento e seus y previstos da fórmula acima:
Para amostras distribuídas normais, a minimização é possível com alguma aritmética matricial, portanto não são necessárias iterações. No caso n = 1 & # 8211; com apenas uma variável preditora x & # 8211; a fórmula de regressão é reduzida para.
que é a regressão linear simples, em oposição à regressão linear multivariada em que n & gt; 1 Regressão linear simples está disponível na maioria das plataformas de negociação, f. i. com o indicador LinReg no TA-Lib. Com y = preço e x = tempo, ele é frequentemente usado como alternativa a uma média móvel. A regressão linear multivariada está disponível na plataforma R através da função lm (..) que acompanha a instalação padrão. Uma variante é a regressão polinomial. Como a regressão simples, ele usa apenas uma variável preditora x, mas também seu quadrado e graus mais altos, de modo que x n == x n:
Com n = 2 ou n = 3, a regressão polinomial é freqüentemente usada para prever o próximo preço médio dos preços suavizados das últimas barras. A função polyfit do MatLab, R, Zorro e muitas outras plataformas podem ser usadas para a regressão polinomial.
4. Perceptron.
Muitas vezes referida como uma rede neural com apenas um neurônio. De fato, um perceptron é uma função de regressão como acima, mas com um resultado binário, chamado de regressão logística. Não é a regressão, é um algoritmo de classificação. A função de aviso do Zorro (PERCEPTRON, & # 8230;) gera o código C que retorna 100 ou -100, dependendo se o resultado previsto está acima de um limite ou não:
Você pode ver que a matriz de caracteres é equivalente aos recursos x n na fórmula de regressão e os fatores numéricos são os coeficientes a n.
5. Redes nacionais.
A regressão linear ou logística só pode resolver problemas lineares. Muitos não se enquadram nesta categoria & # 8211; Um exemplo famoso é prever a saída de uma função XOR simples. E provavelmente também prevê preços ou retornos comerciais. Uma rede neural artificial (RNA) pode lidar com problemas não-lineares. É um monte de perceptrons que estão conectados em uma matriz de camadas. Qualquer perceptron é um neurônio da rede. Sua saída vai para as entradas de todos os neurônios da próxima camada, assim:
Como o perceptron, uma rede neural também aprende determinando os coeficientes que minimizam o erro entre a previsão da amostra e o alvo da amostra. Mas isso requer agora um processo de aproximação, normalmente com retropropagação do erro da saída para as entradas, otimizando os pesos em seu caminho. Este processo impõe duas restrições. Primeiro, as saídas dos neurônios devem agora ser funções continuamente diferenciáveis, em vez do simples limiar do perceptron. Em segundo lugar, a rede não deve ser muito profunda & # 8211; não deve ter muitas & # 8216; camadas ocultas & # 8217; de neurônios entre entradas e saídas. Essa segunda restrição limita a complexidade dos problemas que uma rede neural padrão pode resolver.
Ao usar uma rede neural para prever negociações, você tem muitos parâmetros com os quais você pode brincar e, se você não for cuidadoso, produzirá um grande viés de seleção:
Número de camadas ocultas Número de neurônios por camada oculta Número de ciclos de retropropagação, épocas nomeadas Taxa de aprendizado, a largura do passo de uma época Momentum, um fator de inércia para a adaptação de pesos Função de ativação.
A função de ativação emula o limiar do perceptron. Para a retropropagação você precisa de uma função continuamente diferenciável que gere um & # 8216; soft & # 8217; passo em um determinado valor x. Normalmente, uma função sigmoid, tanh ou softmax é usada. Às vezes, também é uma função linear que apenas retorna a soma ponderada de todas as entradas. Neste caso, a rede pode ser usada para regressão, para prever um valor numérico em vez de um resultado binário.
As redes neurais estão disponíveis na instalação padrão R (nnet, uma única rede de camada oculta) e em muitos pacotes, por exemplo, RSNNS e FCNN4R.
6. Aprendizagem profunda.
Os métodos de aprendizagem profunda usam redes neurais com muitas camadas ocultas e milhares de neurônios, que não poderiam ser efetivamente treinados pela retropropagação convencional. Vários métodos se tornaram populares nos últimos anos para o treinamento de redes tão grandes. Eles costumam pré-treinar as camadas de neurônios ocultos para alcançar um processo de aprendizado mais efetivo. Uma máquina restrita de Boltzmann (RBM) é um algoritmo de classificação não supervisionado com uma estrutura de rede especial que não tem conexões entre os neurônios ocultos. Um Autoencoder Escasso (SAE) usa uma estrutura de rede convencional, mas pré-treina as camadas ocultas de uma maneira inteligente, reproduzindo os sinais de entrada nas saídas da camada com o mínimo possível de conexões ativas. Esses métodos permitem redes muito complexas para lidar com tarefas de aprendizagem muito complexas. Tal como bater o melhor jogador humano do mundo.
Redes de aprendizagem profunda estão disponíveis nos pacotes R deep e darch. A Deepnet fornece um autoencoder, Darch uma máquina Boltzmann restrita. Eu ainda não experimentei o Darch, mas aqui está um exemplo do script R usando o autoencoder do Deepnet com 3 camadas ocultas para sinais de negociação através da função neural () do Zorro:
7. Máquinas de vetores de suporte.
Como uma rede neural, uma máquina de vetores de suporte (SVM) é outra extensão da regressão linear. Quando olhamos novamente para a fórmula de regressão,
podemos interpretar os recursos x n como coordenadas de um espaço de recurso n-dimensional. Definir a variável de destino y como um valor fixo determina um plano nesse espaço, chamado de hiperplano, pois possui mais de duas dimensões (na verdade, n-1). O hiperplano separa as amostras com y & gt; o das amostras com y & lt; 0 Os coeficientes an podem ser calculados de forma que as distâncias do plano às amostras mais próximas & # 8211; que são chamados os vetores de suporte & # 8216; & # 8217; do avião, daí o nome do algoritmo & # 8211; é o máximo. Desta forma, temos um classificador binário com separação ideal de amostras vencedoras e perdedoras.
O problema: normalmente essas amostras não são linearmente separáveis & # 8211; eles estão espalhados irregularmente no espaço de recursos. Nenhum plano plano pode ser espremido entre vencedores e perdedores. Se pudesse, nós tínhamos métodos mais simples para calcular esse plano, f. i. análise discriminante linear. Mas, para o caso comum, precisamos do truque do SVM: Adicionar mais dimensões ao espaço do recurso. Para isso, o algoritmo SVM produz mais recursos com uma função kernel que combina quaisquer dois preditores existentes para um novo recurso. Isso é análogo ao passo acima da regressão simples à regressão polinomial, onde também mais características são adicionadas, tomando o único preditor da enésima potência. Quanto mais dimensões você adicionar, mais fácil será separar as amostras com um hiperplano plano. Este plano é então transformado de volta ao espaço n-dimensional original, ficando enrugado e amassado no caminho. Ao selecionar inteligentemente a função kernel, o processo pode ser executado sem realmente computar a transformação.
Como as redes neurais, as SVMs podem ser usadas não apenas para classificação, mas também para regressão. Eles também oferecem alguns parâmetros para otimizar e possivelmente sobrecarregar o processo de previsão:
Função de kernel. Você normalmente usa um kernel RBF (função de base radial, um kernel simétrico), mas você também tem a escolha de outros kernels, como sigmoid, polynomial e linear. Gama, a largura do parâmetro de Custo do kernel RBF C, a penalidade & # 8216; & # 8217; para classificações erradas nas amostras de treinamento.
Um SVM frequentemente usado é a biblioteca libsvm. Também está disponível em R no pacote e1071. Na próxima e última parte desta série pretendo descrever uma estratégia de negociação usando este SVM.
8. K-vizinho mais próximo.
Comparado com as coisas pesadas de ANN e SVM, é um algoritmo simples e agradável com uma propriedade única: ele não precisa de treinamento. Então as amostras são o modelo. Você poderia usar este algoritmo para um sistema de negociação que aprende permanentemente simplesmente adicionando mais e mais amostras. O algoritmo do vizinho mais próximo calcula as distâncias no espaço de feições a partir dos valores atuais do recurso para as amostras k mais próximas. Uma distância no espaço n-dimensional entre dois conjuntos de recursos (x 1 .. x n) e (y 1 .. y n) é calculada exatamente como em 2 dimensões:
O algoritmo simplesmente prevê o alvo a partir da média das k variáveis-alvo das amostras mais próximas, ponderadas pelas suas distâncias inversas. Pode ser usado para classificação, bem como para regressão. Os truques de software emprestados da computação gráfica, como uma árvore binária adaptativa (ABT), podem tornar o vizinho mais próximo bastante rápido. Na minha vida passada como programador de jogos de computador, usamos esses métodos em jogos para tarefas como a inteligência inimiga de autoaprendizagem. Você pode chamar a função knn em R para a previsão do vizinho mais próximo & # 8211; ou escreva uma função simples em C para esse propósito.
Este é um algoritmo de aproximação para classificação não supervisionada. Tem alguma semelhança, não apenas seu nome, com o vizinho mais próximo. Para classificar as amostras, o algoritmo primeiro coloca k pontos aleatórios no espaço de recurso. Em seguida, ele atribui a qualquer um desses pontos todas as amostras com as menores distâncias a ele. O ponto é então movido para a média dessas amostras mais próximas. Isso gerará uma nova atribuição de amostras, pois algumas amostras estão agora mais próximas de outro ponto. O processo é repetido até que a atribuição não mude mais movendo os pontos, ou seja, cada ponto fica exatamente na média de suas amostras mais próximas. Agora temos k classes de amostras, cada uma na vizinhança de um dos k pontos.
Esse algoritmo simples pode produzir resultados surpreendentemente bons. Em R, a função kmeans faz o truque. Um exemplo do algoritmo k-means para classificar os padrões de vela pode ser encontrado aqui: Classificação não-supervisionada de castiçal para diversão e lucro.
10. Naive Bayes.
Este algoritmo usa Bayes & # 8217; Teorema para classificar amostras de recursos não numéricos (ou seja, eventos), como os padrões de velas mencionados acima. Suponha que um evento X (por exemplo, que o Open da barra anterior esteja abaixo do Open da barra atual) apareça em 80% de todas as amostras vencedoras. Qual é então a probabilidade de que uma amostra esteja ganhando quando ela contém o evento X? Não é 0,8, como você pode pensar. A probabilidade pode ser calculada com Bayes & # 8217; Teorema:
P (Y | X) é a probabilidade de que o evento Y (f. i. ganhar) ocorra em todas as amostras contendo o evento X (no nosso exemplo, Open (1) & lt; Open (0)). De acordo com a fórmula, é igual à probabilidade de X ocorrer em todas as amostras vencedoras (aqui, 0,8), multiplicada pela probabilidade de Y em todas as amostras (em torno de 0,5 quando você estava seguindo o meu conselho de amostras balanceadas) e dividido por a probabilidade de X em todas as amostras.
Se somos ingênuos e assumimos que todos os eventos X são independentes uns dos outros, podemos calcular a probabilidade geral de que uma amostra está ganhando, simplesmente multiplicando as probabilidades P (X | vencedor) por cada evento X. Desta forma, acabamos com esta fórmula:
com um fator de escala s. Para que a fórmula funcione, as características devem ser selecionadas de forma que sejam tão independentes quanto possível, o que impõe um obstáculo ao uso de Naive Bayes na negociação. Por exemplo, os dois eventos Close (1) & lt; Close (0) e Open (1) & lt; Open (0) provavelmente não é independente um do outro. Os preditores numéricos podem ser convertidos em eventos dividindo o número em intervalos separados.
O algoritmo Naive Bayes está disponível no pacote onipresente R e1071.
11. Árvores de decisão e regressão.
Essas árvores predizem um resultado ou um valor numérico com base em uma série de decisões sim / não, em uma estrutura como os ramos de uma árvore. Qualquer decisão é a presença de um evento ou não (no caso de recursos não numéricos) ou uma comparação de um valor de recurso com um limite fixo. Uma típica função de árvore, gerada pelo construtor de árvores do Zorro, se parece com isso:
Como essa árvore é produzida a partir de um conjunto de amostras? Existem vários métodos; O Zorro usa a entropia de informação de Shannon, que já apareceu neste blog no artigo Scalping. No início, ele verifica um dos recursos, digamos x 1. Ele coloca um hiperplano com a fórmula de plano x 1 = t no espaço de recurso. Este hiperplano separa as amostras com x 1 & gt; t das amostras com x 1 & lt; t. O limiar de divisão t é selecionado para que as informações ganhem & # 8211; a diferença de entropia de informação de todo o espaço, para a soma das entropias de informação dos dois sub-espaços divididos & # 8211; é o máximo. Esse é o caso quando as amostras nos subespaços são mais semelhantes entre si do que as amostras em todo o espaço.
Este processo é então repetido com o próximo recurso x 2 e dois hiperplanos dividindo os dois subespaços. Cada divisão é equivalente a uma comparação de um recurso com um limite. Por meio da divisão repetida, logo obtemos uma árvore enorme com milhares de comparações de limites. Em seguida, o processo é executado ao contrário, podando a árvore e removendo todas as decisões que não levam a um ganho substancial de informações. Finalmente acabamos com uma árvore relativamente pequena como no código acima.
As árvores de decisão possuem uma ampla variedade de aplicativos. Eles podem produzir previsões excelentes superiores às de redes neurais ou máquinas de vetores de suporte. Mas elas não são uma solução única, já que seus planos de divisão são sempre paralelos aos eixos do espaço de recursos. Isso limita um pouco suas previsões. Eles podem ser usados não apenas para classificação, mas também para regressão, por exemplo, retornando a porcentagem de amostras que contribuem para um determinado ramo da árvore. A árvore do Zorro é uma árvore de regressão. O algoritmo de árvore de classificação mais conhecido é o C5.0, disponível no pacote C50 para R.
Para melhorar ainda mais a previsão ou superar a limitação do eixo paralelo, um conjunto de árvores pode ser usado, chamado de floresta aleatória. A previsão é então gerada pela média ou votação das previsões das árvores individuais. Florestas aleatórias estão disponíveis nos pacotes R randomForest, ranger e Rborist.
Conclusão.
Existem muitos métodos diferentes de mineração de dados e aprendizado de máquina à sua disposição. A questão crítica: o que é melhor, uma estratégia baseada em modelos ou em aprendizado de máquina? Não há dúvidas de que o aprendizado de máquina tem muitas vantagens. Você não precisa se preocupar com a microestrutura do mercado, a economia, a psicologia do trader ou o material leve similar. Você pode se concentrar em matemática pura. O aprendizado de máquina é uma maneira muito mais elegante e atraente de gerar sistemas de comércio. Tem todas as vantagens do seu lado, mas um. Apesar de todos os tópicos entusiasmados em fóruns de trader, ele tende a falhar misteriosamente em negociações ao vivo.
A cada segunda semana, um novo artigo sobre negociação com métodos de aprendizado de máquina é publicado (alguns podem ser encontrados abaixo). Por favor, leve todas aquelas publicações com um grão de sal. De acordo com alguns documentos, taxas de ganho fantásticas na faixa de 70%, 80% ou mesmo 85% foram alcançadas. Embora a taxa de ganho não seja o único critério relevante & # 8211; você pode perder mesmo com uma alta taxa de vitória & # 8211; A precisão de 85% na previsão de negócios é normalmente equivalente a um fator de lucro acima de 5. Com tal sistema, os cientistas envolvidos devem ser bilionários enquanto isso. Infelizmente, nunca consegui reproduzir as taxas de ganho com o método descrito e nem sequer cheguei perto. Então, talvez muitos preconceitos de seleção tenham entrado nos resultados. Ou talvez eu seja muito burro.
Em comparação com estratégias baseadas em modelos, não vi muitos sistemas de aprendizado de máquina bem-sucedidos até agora. E a partir do que se ouve sobre os métodos algorítmicos de fundos de hedge bem-sucedidos, o aprendizado de máquina parece ainda ser raramente usado. Mas talvez isso mude no futuro com a disponibilidade de mais poder de processamento e o surgimento de novos algoritmos para aprendizado profundo.
Classificação usando redes neurais profundas: Dixon. et. al.2016 Previsão da direção do preço usando ANN & amp; SVM: Kara. et. al.2011 Comparação empírica de algoritmos de aprendizagem: Caruana. et. al.2006 Tendência do mercado acionário de mineração usando GA & amp; SVM: Yu. Wang. Lai.2005.
A próxima parte desta série tratará do desenvolvimento prático de uma estratégia de aprendizado de máquina.
Melhores estratégias 5: um sistema de aprendizado de máquina de curto prazo.
É hora da quinta e última parte da série Build Better Strategies. Na parte 3, discutimos o processo de desenvolvimento de um sistema baseado em modelo e, consequentemente, concluiremos a série com o desenvolvimento de um sistema de mineração de dados. Os princípios de mineração de dados e aprendizado de máquina têm sido o tópico da parte 4. Para nosso exemplo de negociação de curto prazo, usaremos um algoritmo de aprendizado profundo, um autoencoder empilhado, mas funcionará da mesma maneira com muitas outras máquinas. algoritmos de aprendizagem. Com as ferramentas de software de hoje, apenas cerca de 20 linhas de código são necessárias para uma estratégia de aprendizado de máquina. Eu tentarei explicar todas as etapas em detalhes.
Nosso exemplo será um projeto de pesquisa & # 8211; uma experiência de aprendizado de máquina para responder a duas perguntas. Faz um algoritmo mais complexo & # 8211; como, por exemplo, mais neurônios e aprendizado mais profundo & # 8211; produzir uma previsão melhor? E os movimentos de preço de curto prazo são previsíveis pelo histórico de preços de curto prazo? A última questão surgiu devido ao meu ceticismo sobre a negociação de ações de preço na parte anterior desta série. Eu recebi vários e-mails perguntando sobre os geradores de sistema de negociação & # 8220; & # 8221; ou ferramentas de ação de preço semelhantes que são elogiadas em alguns sites. Não há provas concretas de que tais ferramentas tenham produzido algum lucro (exceto para seus fornecedores) & # 8211; mas isso significa que todos eles são lixo? Nós veremos.
Nosso experimento é simples: coletamos informações das últimas velas de uma curva de preços, as alimentamos em uma rede neural de aprendizagem profunda e as usamos para prever as próximas velas. Minha hipótese é que algumas velas não contêm nenhuma informação preditiva útil. É claro que um resultado não previsto do experimento não significa que estou certo, já que eu poderia ter usado parâmetros errados ou preparado mal os dados. Mas um resultado preditivo seria uma indicação de que eu estou errado e a negociação de ações de preço pode, de fato, ser lucrativa.
Desenvolvimento de estratégia de aprendizado de máquina.
Etapa 1: a variável de destino.
Para recapitular a parte anterior: um algoritmo de aprendizado supervisionado é treinado com um conjunto de recursos para prever uma variável de destino. Então, a primeira coisa a determinar é qual deve ser essa variável alvo. Um alvo popular, usado na maioria dos jornais, é o sinal do retorno de preço na próxima barra. Mais adequado para previsão, já que menos suscetível à aleatoriedade, é a diferença de preço para um horizonte de previsão mais distante, como 3 barras a partir de agora, ou mesmo dia na próxima semana. Como quase qualquer coisa nos sistemas de negociação, o horizonte de previsão é um compromisso entre os efeitos da aleatoriedade (menos barras são piores) e previsibilidade (menos barras são melhores).
Às vezes você não está interessado em prever diretamente o preço, mas em prever algum outro parâmetro & # 8211; como a perna atual de um indicador Zigzag & # 8211; que de outra forma só poderia ser determinado em retrospectiva. Ou você quer saber se uma certa ineficiência do mercado estará presente na próxima vez, especialmente quando você estiver usando aprendizado de máquina não diretamente para negociação, mas para filtrar negociações em um sistema baseado em modelo. Ou você quer prever algo totalmente diferente, por exemplo, a probabilidade de um crash no mercado amanhã. Tudo isso é geralmente mais fácil de prever do que o retorno popular de amanhã.
Em nosso experimento de ação de preço, usaremos o retorno de uma negociação de ação de preço de curto prazo como variável de destino. Uma vez que o alvo é determinado, o próximo passo é selecionar os recursos.
Etapa 2: os recursos.
Uma curva de preço é o pior caso para qualquer algoritmo de aprendizado de máquina. Não só transporta pouco sinal e principalmente ruído, como também é não-estacionário e a relação sinal / ruído muda o tempo todo. A relação exata de sinal e ruído depende do significado de "sinal", mas normalmente é muito baixo para qualquer algoritmo de aprendizado de máquina conhecido produzir algo útil. Portanto, devemos derivar recursos da curva de preço que contêm mais sinal e menos ruído. O sinal, nesse contexto, é qualquer informação que possa ser usada para prever o alvo, seja ele qual for. Todo o resto é barulho.
Assim, selecionar os recursos é fundamental para o sucesso & # 8211; muito mais crítico do que decidir qual algoritmo de aprendizado de máquina você vai usar. Existem duas abordagens para selecionar recursos. O primeiro e mais comum é extrair tanta informação da curva de preços quanto possível. Como você não sabe onde as informações estão ocultas, você apenas gera uma coleção selvagem de indicadores com uma ampla gama de parâmetros e espera que pelo menos alguns deles contenham as informações de que o algoritmo precisa. Esta é a abordagem que você normalmente encontra na literatura. O problema deste método: Qualquer algoritmo de aprendizado de máquina é facilmente confundido por preditores não previsíveis. Então, ele não vai jogar apenas 150 indicadores nele. Você precisa de algum algoritmo de pré-seleção que determine quais delas contêm informações úteis e quais podem ser omitidas. Sem reduzir os recursos dessa maneira para talvez oito ou dez, até mesmo o algoritmo de aprendizado mais profundo não produziu nada de útil.
A outra abordagem, normalmente para experimentos e pesquisas, está usando apenas informações limitadas da curva de preços. Esse é o caso aqui: Como queremos examinar a negociação de ações de preço, usamos apenas os últimos preços como entradas e descartamos todo o restante da curva. Isso tem a vantagem de não precisarmos de nenhum algoritmo de pré-seleção, já que o número de recursos é limitado de qualquer maneira. Aqui estão as duas funções preditoras simples que usamos em nosso experimento (em C):
As duas funções devem conter as informações necessárias para a ação do preço: movimento por barra e volatilidade. A função de modificação é a diferença do preço atual para o preço de n barras antes, dividido pelo preço atual. A função range é a distância total alta-baixa das últimas n velas, também dividida pelo preço atual. E a função de escala centraliza e comprime os valores para o intervalo de +/- 100, então nós os dividimos por 100 para deixá-los normalizados para +/- 1. Lembramos que a normalização é necessária para algoritmos de aprendizado de máquina.
Etapa 3: preditores de pré-seleção / pré-processamento.
Quando você selecionou um grande número de indicadores ou outros sinais como recursos para o seu algoritmo, você deve determinar qual deles é útil e quais não. Existem muitos métodos para reduzir o número de recursos, por exemplo:
Determine as correlações entre os sinais. Remova aqueles com uma correlação forte a outros sinais, desde que não contribuam à informação. Compare o conteúdo de informação de sinais diretamente, com algoritmos como entropia de informação ou árvores de decisão. Determine o conteúdo da informação indiretamente, comparando os sinais com sinais aleatórios; Existem algumas bibliotecas de software para isso, como o pacote R Boruta. Use um algoritmo como Análise de Componentes Principais (PCA) para gerar um novo conjunto de sinais com dimensionalidade reduzida. Use a otimização genética para determinar os sinais mais importantes apenas pelos resultados mais lucrativos do processo de previsão. Ótimo para ajuste de curva se você deseja publicar resultados impressionantes em um trabalho de pesquisa.
Para nossa experiência, não precisamos pré-selecionar ou pré-processar os recursos, mas você pode encontrar informações úteis sobre isso nos artigos (1), (2) e (3) listados no final da página.
Etapa 4: selecione o algoritmo de aprendizado de máquina.
R oferece muitos pacotes ML diferentes, e qualquer um deles oferece muitos algoritmos diferentes com muitos parâmetros diferentes. Mesmo se você já decidiu sobre o método & # 8211; aqui, aprendizagem profunda & # 8211; você ainda tem a escolha entre diferentes abordagens e diferentes pacotes R. A maioria é bem nova e você não encontra muitas informações empíricas que ajudem na sua decisão. Você tem que experimentá-los todos e ganhar experiência com métodos diferentes. Para nossa experiência, escolhemos o pacote Deepnet, que é provavelmente o mais simples e fácil de usar biblioteca de aprendizagem profunda. Isso mantém nosso código curto. Estamos usando o algoritmo do Autoencoder Stacked (SAE) para pré-treinamento da rede. A Deepnet também oferece uma Máquina Boltzmann Restrita (RBM) para pré-treinamento, mas eu não consegui obter bons resultados com ela. Existem outros pacotes de aprendizado mais complexos para o R, então você pode gastar muito tempo conferindo todos eles.
Como funciona o pré-treinamento é facilmente explicado, mas por que funciona é uma questão diferente. Até onde sei, ninguém ainda apresentou uma prova matemática sólida de que funcione. Enfim, imagine uma grande rede neural com muitas camadas ocultas:
Treinar a rede significa configurar os pesos de conexão entre os neurônios. O método usual é a retropropagação de erro. Mas acontece que quanto mais camadas ocultas você tem, pior funciona. Os termos de erro backpropagated ficam menores e menores de camada para camada, fazendo com que as primeiras camadas da rede não aprendam quase nada. O que significa que o resultado previsto se torna cada vez mais dependente do estado inicial aleatório dos pesos. Isso limitou severamente a complexidade das redes neurais baseadas em camadas e, portanto, as tarefas que eles podem resolver. Pelo menos até 10 anos atrás.
Em 2006, cientistas em Toronto publicaram pela primeira vez a idéia de pré-treinar os pesos com um algoritmo de aprendizado não supervisionado, uma máquina restrita de Boltzmann. Isso resultou em um conceito revolucionário. Isso impulsionou o desenvolvimento da inteligência artificial e permitiu que todos os tipos de novas aplicações, desde máquinas de brincar, até carros autônomos. No caso de um autoencoder empilhado, funciona assim:
Selecione a camada oculta para treinar; comece com a primeira camada oculta. Conecte suas saídas a uma camada de saída temporária que tenha a mesma estrutura que a camada de entrada da rede. Alimente a rede com as amostras de treinamento, mas sem as metas. Treine-o para que a primeira camada oculta reproduza o sinal de entrada & # 8211; os recursos & # 8211; em suas saídas, o mais exatamente possível. O resto da rede é ignorado. Durante o treinamento, aplique um termo de penalidade de peso & # 8216; & # 8217; de modo que o menor número possível de pesos de conexão seja usado para reproduzir o sinal. Agora, alimente as saídas da camada oculta treinada para as entradas da próxima camada oculta não treinada e repita o processo de treinamento para que o sinal de entrada seja agora reproduzido nas saídas da próxima camada. Repita este processo até que todas as camadas ocultas sejam treinadas. Temos agora uma rede esparsa & # 8217; com muito poucas conexões de camada que podem reproduzir os sinais de entrada. Agora treine a rede com retropropagação para aprender a variável de destino, usando os pesos pré-treinados das camadas ocultas como ponto de partida.
A esperança é que o processo de pré-treinamento não supervisionado produza uma abstração interna de ruído reduzido dos sinais de entrada que possam ser usados para facilitar o aprendizado do alvo. E isso realmente parece funcionar. Ninguém sabe realmente porque, mas várias teorias & # 8211; veja o papel (4) abaixo & # 8211; tente explicar esse fenômeno.
Etapa 5: gerar um conjunto de dados de teste.
Primeiro, precisamos produzir um conjunto de dados com recursos e metas, para que possamos testar nosso processo de previsão e testar os parâmetros. As características devem basear-se nos mesmos dados de preço que na negociação ao vivo e, para o alvo, devemos simular uma negociação de curto prazo. Portanto, faz sentido gerar os dados não com R, mas com nossa plataforma de negociação, que é de qualquer maneira muito mais rápida. Aqui está um pequeno script do Zorro para isso, DeepSignals. c:
Estamos a gerar 2 anos de dados com funcionalidades calculadas pelas nossas funções de alteração e alcance definidas acima. Nosso objetivo é o resultado de um trade com 3 barras de tempo de vida. Os custos de negociação são definidos como zero, portanto, neste caso, o resultado é equivalente ao sinal da diferença de preço em 3 barras no futuro. A função adviseLong é descrita no manual do Zorro; é uma função poderosa que lida automaticamente com treinamento e previsão e permite usar qualquer algoritmo de aprendizado de máquina baseado em R como se fosse um indicador simples.
Em nosso código, a função usa o próximo retorno de troca como destino e as variações de preço e os intervalos das últimas 4 barras como recursos. O sinalizador SIGNALS diz para não treinar os dados, mas para exportá-los para um arquivo. csv. A bandeira BALANCED garante que obtemos tantos retornos positivos quanto negativos; isso é importante para a maioria dos algoritmos de aprendizado de máquina. Execute o script no modo [Train] com nosso ativo de teste usual EUR / USD selecionado. Ele gera um arquivo de planilha chamado DeepSignalsEURUSD_L. csv que contém os recursos nas oito primeiras colunas e o retorno de troca na última coluna.
Etapa 6: Calibre o algoritmo.
Algoritmos complexos de aprendizado de máquina têm muitos parâmetros para ajustar. Alguns deles oferecem grandes oportunidades para ajustar o algoritmo para publicações. Ainda assim, devemos calibrar os parâmetros, pois o algoritmo raramente funciona bem com as configurações padrão. Para isso, aqui está um script R que lê o conjunto de dados criado anteriormente e o processa com o algoritmo de aprendizado profundo (DeepSignal. r):
Nós definimos três funções neural. train, neural. predict e neural. init para treinar, prever e inicializar a rede neural. Os nomes das funções não são arbitrários, mas seguem a convenção usada pela função de recomendação do Zorro (NEURAL.). Isso não importa agora, mas será importante mais tarde, quando usarmos o mesmo script R para treinar e negociar a estratégia de aprendizagem profunda. Uma quarta função, TestOOS, é usada para testar fora da amostra nossa configuração.
A função neural. init sementes o gerador aleatório R com um valor fixo (365 é o meu número de sorte pessoal). Caso contrário, obteríamos um resultado ligeiramente diferente a qualquer momento, já que a rede neural é inicializada com pesos aleatórios. Ele também cria uma lista R global chamada "Modelos". A maioria dos tipos de variáveis R não precisa ser criada antecipadamente, alguns fazem (não me pergunte por quê). O & # 8216; & lt; & lt; - & # 8216; operador é para acessar uma variável global de dentro de uma função.
A função neural. train toma como entrada um número de modelo e o conjunto de dados a ser treinado. O número do modelo identifica o modelo treinado na & # 8220; Modelos & # 8221; Lista. Uma lista não é realmente necessária para este teste, mas precisaremos dela para estratégias mais complexas que treinam mais de um modelo. A matriz que contém os recursos e o destino é passada para a função como segundo parâmetro. Se os dados XY não são uma matriz apropriada, o que freqüentemente acontece em R dependendo de como você os gerou, eles são convertidos em um. Em seguida, ele é dividido em recursos (X) e destino (Y) e, finalmente, o destino é convertido em 1 para um resultado comercial positivo e 0 para um resultado negativo.
Os parâmetros de rede são então configurados. Alguns são óbvios, outros são livres para brincar com:
A estrutura da rede é dada pelo vetor oculto: c (50.100,50) define 3 camadas ocultas, a primeira com 50, a segunda com 100 e a terceira com 50 neurônios. Esse é o parâmetro que mais tarde modificaremos para determinar se o nível mais profundo é melhor. A função de ativação converte a soma dos valores de entrada do neurônio na saída do neurônio; mais frequentemente utilizados são sigmóides que saturam a 0 ou 1, ou tanh que satura a -1 ou +1.
Nós usamos tanh aqui já que nossos sinais também estão na faixa +/- 1. A saída da rede é uma função sigmóide, pois queremos uma previsão na faixa 0..1. Mas a saída SAE deve ser & # 8220; linear & # 8221; para que o Autoencoder Empilhado possa reproduzir os sinais de entrada analógicos nas saídas.
A taxa de aprendizado controla o tamanho do passo para a descida de gradiente no treinamento; uma taxa mais baixa significa passos mais precisos e previsão possivelmente mais precisa, mas um tempo de treinamento mais longo. Momentum adiciona uma fração do passo anterior ao atual. Isso evita que a descida de gradiente fique presa em um minúsculo ponto local ou no ponto de sela. A escala de taxa de aprendizado é um fator de multiplicação para alterar a taxa de aprendizado após cada iteração (não tenho certeza do que isso é bom, mas pode haver tarefas em que uma baixa taxa de aprendizado em épocas mais altas melhora o treinamento). Uma época é uma iteração de treinamento sobre todo o conjunto de dados. O treinamento parará quando o número de épocas for atingido. Mais épocas significam melhor previsão, mas maior tempo de treinamento. O tamanho do lote é um número de amostras aleatórias & # 8211; um mini lote & # 8211; retirado do conjunto de dados para uma única execução de treinamento. A divisão dos dados em mini lotes acelera o treinamento, pois o gradiente de peso é calculado a partir de menos amostras. Quanto maior o tamanho do lote, melhor será o treinamento, mas mais tempo ele levará. O dropout é um número de neurônios selecionados aleatoriamente que são desativados durante um mini lote. Desta forma, a rede aprende apenas com uma parte de seus neurônios. Isso parece uma ideia estranha, mas pode efetivamente reduzir o overfitting.
Todos esses parâmetros são comuns para redes neurais. Brinque com eles e verifique o efeito deles no resultado e no tempo de treinamento. A calibração adequada de uma rede neural não é trivial e pode ser o tópico de outro artigo. Os parâmetros são armazenados no modelo juntamente com a matriz de pesos de conexão treinados. Então eles não precisam ser dados novamente na função de previsão, neural. predict. Ele pega o modelo e um vetor X de feições, executa-o pelas camadas e retorna a saída da rede, o alvo previsto Y. Comparado com o treinamento, a previsão é bastante rápida, pois precisa de apenas algumas milhares de multiplicações. Se X for um vetor de linha, ele será transposto e, dessa forma, convertido em um vetor de coluna, caso contrário, a função nn. predict não o aceitará.
Use o RStudio ou algum ambiente semelhante para trabalhar convenientemente com R. Edite o caminho para os dados. csv no arquivo acima, fonte-lo, instale os pacotes R necessários (deepnet, e1071 e caret), em seguida, chamar a função TestOOS do comando linha. Se tudo funcionar, deve imprimir algo assim:
O TestOOS lê primeiro o nosso conjunto de dados da pasta Data do Zorro. Divide os dados em 80% para treinamento (XY. tr) e 20% para testes fora da amostra (XY. ts). O conjunto de treinamento é treinado e o resultado é armazenado na lista Modelos no índice 1. O conjunto de testes é dividido em recursos (X) e destinos (Y). Y é convertido em binário 0 ou 1 e armazenado em Y. ob, nosso vetor de alvos observados. Em seguida, prevemos os destinos do conjunto de testes, convertemo-los novamente em 0 ou 1 binários e armazená-los em Y. pr. Para comparar a observação com a previsão, usamos a função confusionMatrix do pacote caret.
Uma matriz de confusão de um classificador binário é simplesmente uma matriz 2 que informa quantos 0 e quantos foram calculados incorreta e corretamente. Muitas métricas são derivadas da matriz e impressas nas linhas acima. O mais importante no momento é a precisão de previsão de 62%. Isso pode indicar que eu acabei com a negociação de ações de preço um pouco prematuramente. Mas é claro que os 62% podem ter sido apenas sorte. Nós veremos isso mais tarde, quando fizermos um teste WFO.
Um conselho final: Pacotes R são ocasionalmente atualizados, com a possível conseqüência de que o código R anterior funcione de forma diferente ou não funcione de maneira diferente. Isso realmente acontece, então teste cuidadosamente após qualquer atualização.
Etapa 7: a estratégia
Agora que testamos nosso algoritmo e obtivemos uma precisão de previsão acima de 50% com um conjunto de dados de teste, podemos finalmente codificar nossa estratégia de aprendizado de máquina. Na verdade, nós já codificamos a maior parte dele, apenas precisamos adicionar algumas linhas ao script Zorro acima que exportou o conjunto de dados. Este é o script final para treinamento, teste e (teoricamente) negociação do sistema (DeepLearn. c):
Estamos usando um ciclo de WFO de um ano, dividido em 90% de treinamento e 10% de período de teste fora da amostra. Você pode perguntar por que eu usei anteriormente dados de dois anos e uma divisão diferente, 80/20, para calibrar a rede na etapa 5. Isso é para usar dados compostos de forma diferente para calibrar e para testes de caminhada direta. Se usássemos exatamente os mesmos dados, a calibração poderia superá-lo e comprometer o teste.
Os parâmetros WFO selecionados significam que o sistema é treinado com dados de cerca de 225 dias, seguido por um período de teste ou comércio de 25 dias. Assim, na negociação ao vivo, o sistema reciclará a cada 25 dias, utilizando os preços dos 225 dias anteriores. Na literatura, você às vezes encontra a recomendação de reciclar um sistema de aprendizado de máquina após qualquer negociação, ou pelo menos em qualquer dia. Mas isso não faz muito sentido para mim. Quando você usou quase 1 ano de dados para treinar um sistema, obviamente ele não pode se deteriorar após um único dia. Ou, se o fizesse, e apenas produzisse resultados de testes positivos com reciclagem diária, eu suspeitaria fortemente que os resultados fossem artefatos por algum erro de codificação.
Treinar uma rede profunda leva muito tempo, no nosso caso cerca de 10 minutos para uma rede com 3 camadas ocultas e 200 neurônios. Na negociação ao vivo, isso seria feito por um segundo processo Zorro que é iniciado automaticamente pelo Zorro comercial. No backtest, o sistema treina em qualquer ciclo da WFO. Portanto, é recomendável usar vários núcleos para treinar vários ciclos em paralelo. A variável NumCores em -1 ativa todos os núcleos do processador, exceto um. Múltiplos núcleos estão disponíveis apenas no Zorro S, portanto, um teste completo de caminhada com todos os ciclos da WFO pode levar várias horas com a versão gratuita.
No script, agora treinamos tanto negócios longos quanto curtos. Para isso, temos que permitir o hedge no modo Treinamento, já que posições longas e curtas são abertas ao mesmo tempo. Inserir uma posição agora depende do valor de retorno da função advise, que, por sua vez, chama a função neural. train ou neural. predict do script R. Então, estamos aqui entrando em posições quando a rede neural prevê um resultado acima de 0,5.
O script R agora é controlado pelo script Zorro (para isso, ele deve ter o mesmo nome, DeepLearn. r, somente com extensão diferente). É idêntico ao nosso script R acima, pois estamos usando os mesmos parâmetros de rede. Apenas uma função adicional é necessária para suportar um teste WFO:
A função neural. save armazena a lista Modelos & # 8211; agora contém 2 modelos para negociações longas e curtas & # 8211; após cada treinamento executado na pasta Data do Zorro. Como os modelos são armazenados para uso posterior, não precisamos treiná-los novamente para testes repetidos.
Esta é a curva patrimonial da WFO gerada com o script acima (EUR / USD, sem custos de negociação):
Curva de capital EUR / USD com estrutura de rede 50-100-50.
Embora nem todos os ciclos da WFO obtenham um resultado positivo, parece que existe algum efeito preditivo. A curva é equivalente a um retorno anual de 89%, obtido com uma estrutura de camada oculta de 50-100-50. Verificaremos na próxima etapa como diferentes estruturas de rede afetam o resultado.
Como as funções neural. init, neural. train, neural. predict e neural. save são chamadas automaticamente pelas funções adviseLong / adviseShort do Zorro, não há funções R diretamente chamadas no script do Zorro. Assim, o script pode permanecer inalterado ao usar um método de aprendizado de máquina diferente. Apenas o script DeepLearn. r deve ser modificado e a rede neural, por exemplo, substituída por uma máquina de vetores de suporte. Para negociar esse sistema de aprendizado de máquina ao vivo em um VPS, certifique-se de que R também esteja instalado no VPS, que os pacotes R necessários estejam instalados e que o caminho para o terminal R esteja configurado no arquivo ini do Zorro. Caso contrário, você receberá uma mensagem de erro ao iniciar a estratégia.
Etapa 8: o experimento.
If our goal had been developing a strategy, the next steps would be the reality check, risk and money management, and preparing for live trading just as described under model-based strategy development. But for our experiment we’ll now run a series of tests, with the number of neurons per layer increased from 10 to 100 in 3 steps, and 1, 2, or 3 hidden layers (deepnet does not support more than 3). So we’re looking into the following 9 network structures: c(10), c(10,10), c(10,10,10), c(30), c(30,30), c(30,30,30), c(100), c(100,100), c(100,100,100). For this experiment you need an afternoon even with a fast PC and in multiple core mode. Here are the results (SR = Sharpe ratio, R2 = slope linearity):
In previous articles, we’ve defined some of the terms being thrown around lately like “machine learning” e & # 8220; inteligência artificial & # 8220 ;. Essas tecnologias disruptivas logo mudarão o mundo como o conhecemos. Enquanto alguns especialistas previram que estávamos a anos de distância de um computador que poderia bater um especialista humano em "Go", essa conquista foi anunciada recentemente. Se uma aprendizagem profunda & # 8220; & # 8221; O programa agora pode vencer um jogo que tem mais movimentos possíveis do que átomos no universo conhecido, então o que nos impede de liberá-lo no mercado de ações e fazer milhões?
A ideia de usar computadores para negociar ações não é novidade. O comércio algorítmico (também conhecido como negociação de algo ou negociação de caixa preta, que é um subconjunto do comércio de algoritmos) existe há mais de uma década e está ganhando popularidade rapidamente. Aqui está uma olhada na negociação algorítmica como uma porcentagem do volume de mercado:
Fonte: Morton Glantz, Robert Kissell. Modelagem de Riscos Multi-Ativos: Técnicas para uma Economia Global em uma Era de Negociação Eletrônica e Algorítmica.
Se essa tendência continuar, então isso significa que hoje mais de 90% das negociações estão sendo conduzidas por programas de computador. One thing to notice about algorithmic trading is that it has been moving in the direction of shorter and shorter holding times. A negociação de alta frequência (HFT) é um subconjunto de negociação algorítmica em que as ações são compradas e depois vendidas em frações de segundo. Essa estratégia é uma forma de arbitragem na qual o algoritmo HFT detecta uma discrepância de preço e depois o capitaliza rapidamente. Como seria de esperar, os lucros de negociação da HFT estão a tornar-se cada vez menores, mas o volume de negócios continua a dominar o mercado global:
Agora que sabemos sobre negociação algorítmica e HFT, como o aprendizado de máquina ou o aprendizado profundo entram em ação? Para responder a essa pergunta, a variável importante a ser levada em consideração é a duração. Embora a negociação de algoritmos e de HFT realize negociações de curta duração, torna-se muito mais difícil capturar & alpha & # 8221; when you start increasing the time frame. A realidade é que alguns dos maiores fundos de hedge do mundo já estão espalhados por todo este espaço e têm capturado o alpha em muitas durações há muito tempo usando o aprendizado de máquina.
No início do ano passado, a Bridgewater Associates, que tem US $ 150 bilhões em ativos sob gestão (AUM), iniciou uma nova unidade de inteligência artificial liderada por David Ferrucci, que liderou o desenvolvimento do Watson da IBM. Depois de trabalhar na IBM por 17 anos, ele foi caçado pela Bridgewater em 2012.
Outra empresa chamada Renaissance Technologies tem US $ 65 bilhões em AUM e é dito ter "o melhor departamento de física e matemática do mundo". The Medallion Fund at Renaissance, run mostly for employees of the company, has one of the best records in investing history having returned +35% annualized over 20 years. Os dois co-CEOs da Renaissance foram contratados pela IBM Research em 1993, onde estavam trabalhando em programas de reconhecimento de idioma.
Com US $ 32 bilhões sob gestão, a Two Sigma Investments é conhecida por usar a inteligência artificial e aprendizado de máquina como parte fundamental de sua estratégia. One co-founder did his PHD in artificial intelligence at MIT and the other was an International Mathematical Olympiad Silver Medalist. Ser um profissional de finanças não é um requisito para trabalhar nesta empresa.
Embora os fundos de hedge como esses 3 sejam pioneiros no uso de aprendizado de máquina para estratégias de negociação de ações, existem algumas startups jogando nesse espaço também. A Binatix é uma empresa de trading de aprendizagem profunda que saiu do modo stealth em 2014 e afirma ser bem lucrativa, tendo usado sua estratégia por mais de três anos. A Aidyia é um fundo de hedge baseado em Hong Kong, lançado em 2015, que negocia ações americanas e faz todas as ações com inteligência artificial, sem necessidade de intervenção humana. A Senciente, outra empresa de aprendizagem profunda que discutimos anteriormente, desenvolveu um operador de inteligência artificial que foi bem-sucedido o suficiente para considerar a possibilidade de transformá-lo em uma empresa de comercialização de ativos ou uma empresa de gestão de ativos.
Se houver uma startup que se mostre promissora nesse espaço, você pode apostar que os 3 fundos de hedge bem estabelecidos que discutimos sabem disso. Se você tivesse um algoritmo de aprendizado de máquina que gerasse alfa, você diria ao mundo sobre isso? Mais provável que não. But then how would you raise the capital needed to make some serious money off of your strategy? Empresas como a Bridgewater podem ser tão ágeis quanto qualquer startup e, ao mesmo tempo, ter US $ 150 bilhões em capital para jogar. É difícil competir se você for uma startup que está tentando obter financiamento. Se você está procurando investidores, precisa divulgar o que está fazendo. A palavra viaja rápido. Não é difícil ver fundos de hedge como Bridgewater roubando talentos de startups de IA que estão tentando jogar neste espaço e rapidamente descobrir o que estão fazendo.
Para os investidores de varejo aproveitarem o aprendizado de máquina para negociação de ações, você tem algumas orientações a seguir. Para investidores de varejo de patrimônio líquido ultra alto, você pode investir seu dinheiro em um dos fundos de hedge usando AI como Bridgewater ou Renaissance. Para aqueles de nós que não têm uma quantidade tão grande de capital, podemos esperar que empresas de aprendizado profundo, como a Sentient, tornem-se públicas ou sejam adquiridas e depois invistam nesses veículos. Nós vamos ficar de olho neste espaço, porque, francamente, é simplesmente fascinante.
Se você pagar mais de US $ 4,95 por transação, estará pagando demais. A Ally Invest é uma das corretoras de taxas mais baixas, por isso você gasta menos dinheiro em taxas de transação e mais em ações. Com mais de 30 operações por trimestre, a queda é ainda menor, para US $ 3,95 por operação. Abra uma conta e comece a negociar hoje.
Aprendizado de Máquina para Negociação.
Oferecido na Georgia Tech como CS 7646.
Programa de Nanodegree.
Carros voadores & amp; Vôo Autônomo.
Domine habilidades de engenharia de software de voo autônomo prontas para o trabalho à medida que você enfrenta desafios avançados, escreve código real para aeronaves reais e desenvolve uma compreensão sistêmica da pilha completa do Flying Car.
Acelere sua carreira com a credencial que leva você rapidamente ao sucesso no trabalho.
Sobre este curso.
Este curso apresenta aos alunos os desafios do mundo real de implementar estratégias de negociação baseadas em aprendizado de máquina, incluindo as etapas algorítmicas desde a coleta de informações até as ordens do mercado. O foco está em como aplicar abordagens de aprendizado de máquina probabilísticas às decisões de negociação. Consideramos abordagens estatísticas como regressão linear, KNN e árvores de regressão e como aplicá-las às situações reais de negociação de ações.
Custo do Curso
Aprox. 4 meses.
Nível de habilidade.
Incluído no curso.
Conteúdo rico de aprendizado.
Ministrado por profissionais da indústria.
Comunidade de Suporte ao Aluno.
Junte-se ao caminho para a grandeza.
Este curso gratuito é o primeiro passo para uma nova carreira no Flying Cars & amp; Programa de Nanodegio de Voo Autônomo.
Curso Livre.
Aprendizado de Máquina para Negociação.
Melhore seu conjunto de habilidades e impulsione sua contratação por meio de aprendizado inovador e independente.
Programa de Nanodegree.
Carros voadores & amp; Vôo Autônomo.
Acelere sua carreira com a credencial que leva você rapidamente ao sucesso no trabalho.
Leads do curso.
Tucker Balch.
Arpan Chakraborty.
O que você aprenderá
Este curso é composto por três mini-cursos:
Mini-curso 1: Manipulando Dados Financeiros em Python Mini-curso 2: Investimento Computacional Mini-curso 3: Algoritmos de Aprendizado de Máquina para Negociação.
Cada mini-curso consiste em cerca de 7 a 10 lições curtas. Atribuições e projetos são intercalados.
Queda 2015 Estudantes da OMS: Haverá dois testes - um de meio de aula após o minicurso 2 e um exame final.
Pré-requisitos e requisitos.
Os estudantes devem ter fortes habilidades de codificação e alguma familiaridade com os mercados de ações. Nenhuma experiência financeira ou de aprendizado de máquina é assumida.
Observe que este curso atende alunos com foco em ciência da computação, bem como alunos de outras áreas, como engenharia de sistemas industriais, gerenciamento ou matemática, que têm experiências diferentes. Todos os tipos de estudantes são bem vindos!
Os tópicos do ML podem ser & quot; revisão & quot; para alunos do CS, enquanto partes de finanças serão revisadas para estudantes de finanças. No entanto, mesmo que você tenha experiência nesses tópicos, descobrirá que os consideramos de uma maneira diferente da que você poderia ter visto antes, em particular com um olho voltado para a implementação da negociação.
A programação será principalmente em Python. Vamos fazer uso pesado de bibliotecas de computação numérica como o NumPy e o Pandas.
Комментариев нет:
Отправить комментарий