Sunday 8 April 2018

Máquinas aprendizagem e curto posições em estoque negociação estratégias


Não estou muito certo, se esta questão se encaixa aqui. Recentemente, comecei a ler e aprender sobre a aprendizagem mecânica. Alguém pode jogar alguma luz sobre como ir sobre ele ou melhor, qualquer pessoa pode compartilhar sua experiência e alguns ponteiros básicos sobre como ir sobre ele ou atleast começar a aplicá-lo para ver alguns resultados de conjuntos de dados Como ambicioso faz este som Também, Algoritmos padrão que devem ser testados ou observados ao fazer isso. Parece ser uma falácia básica que alguém pode vir junto e aprender alguns algoritmos de aprendizado de máquina ou AI, configurá-los como uma caixa preta, ir go, e sentar-se enquanto se aposentam. Meu conselho para você: Aprenda as estatísticas e o aprendizado de máquinas primeiro, depois se preocupe sobre como aplicá-las a um determinado problema. Não há almoço grátis aqui. A análise de dados é um trabalho árduo. Leia Os Elementos da Aprendizagem Estatística (o pdf está disponível gratuitamente no site) e não comece a tentar construir um modelo até entender pelo menos os primeiros 8 capítulos. Depois de entender as estatísticas e aprendizagem de máquina, então você precisa aprender a backtest e construir um modelo de negociação, contabilidade para os custos de transação, etc, que é uma outra área. Depois de ter uma alça sobre a análise e as finanças, então será um pouco óbvio como aplicá-lo. O ponto inteiro desses algoritmos está tentando encontrar uma maneira de ajustar um modelo a dados e produzir baixo viés e variância na predição (isto é, que o treinamento e o erro de previsão de teste serão baixos e similares). Aqui está um exemplo de um sistema comercial usando uma máquina de vetores de suporte em R. mas apenas tenha em mente que você estará fazendo a si mesmo um grande desserviço se você não gastar o tempo para entender o básico antes de tentar aplicar algo esotérico. Apenas para acrescentar uma atualização divertida: Recentemente me deparei com esta tese de mestrado: Uma nova estrutura de negociação algorítmica Aplicando a evolução e aprendizado de máquinas para otimização de portfólio (2017). É uma revisão extensiva de aproximações diferentes da aprendizagem da máquina comparadas de encontro à compra-e-espera. Depois de quase 200 páginas, eles chegam à conclusão básica: Nenhum sistema de negociação foi capaz de superar o benchmark ao usar os custos de transação. Escusado será dizer que isso não significa que ele não pode ser feito (eu havent gasto qualquer tempo revendo seus métodos para ver a validade da abordagem), mas certamente fornece alguma evidência mais a favor do teorema do almoço não-livre. Respondeu Feb 1 11 at 18:48 Jase Como um dos autores da tese de mestre mencionada posso citar o meu próprio trabalho e dizer: Se alguém realmente consegue resultados rentáveis ​​não há incentivo para compartilhá-los, como iria negar a sua vantagem. Embora nossos resultados possam dar suporte à hipótese de mercado, ele não impede a existência de sistemas que funcionam. Pode ser como a teoria da probabilidade: "É especulado que as descobertas no campo da teoria das probabilidades aconteceram várias vezes, mas nunca foram compartilhadas. Isso pode ser devido à sua aplicação prática no jogo. Então, novamente, talvez isso seja tudo alquimia moderna. Ndash Andr233 Christoffer Andersen 30 de abril às 10:01 Meu conselho para você: Existem vários ramos de Inteligência Artificial de Aprendizagem de Máquinas (MLAI) lá fora: www-formal. stanford. edujmcwhatisainode2.html Eu só tentei programação genética e algumas redes neurais, e Pessoalmente, penso que o ramo de aprendizagem da experiência parece ter o maior potencial. GPGA e redes neurais parecem ser as metodologias mais comumente exploradas com a finalidade de predições do mercado de ações, mas se você fizer alguma mineração de dados em Predict Wall Street. Você pode ser capaz de fazer algumas análises sentimento também. Gaste algum tempo aprendendo sobre as várias técnicas de MLAI, encontre alguns dados de mercado e tente implementar alguns desses algoritmos. Cada um terá seus pontos fortes e fracos, mas você pode ser capaz de combinar as previsões de cada algoritmo em uma previsão composta (semelhante ao que os vencedores do Prêmio NetFlix fez). O consenso geral entre os comerciantes é que a Inteligência Artificial é uma ciência voodoo, você não pode fazer um computador prever os preços das ações e você está certo de perder seu dinheiro se você tentar Fazendo. No entanto, as mesmas pessoas vão dizer-lhe que apenas sobre a única maneira de ganhar dinheiro no mercado de ações é construir e melhorar a sua própria estratégia de negociação e segui-lo de perto (que não é realmente uma má idéia). A idéia de algoritmos AI não é construir o chip e deixá-lo trocar para você, mas para automatizar o processo de criação de estratégias. É um processo muito tedioso e não é fácil :). Minimizando Overfitting: Como ouvimos antes, uma questão fundamental com algoritmos AI é overfitting (aka datamining bias): dado um conjunto de dados, o seu algoritmo AI pode encontrar um padrão que é particularmente relevante para o conjunto de treinamento. Mas pode não ser relevante no conjunto de teste. Existem várias maneiras de minimizar o overfitting: Use um conjunto de validação. Ele não dá feedback para o algoritmo, mas permite que você detecte quando seu algoritmo está potencialmente começando a overfit (ou seja, você pode parar de treinar se youre excesso demais). Use o aprendizado on-line da máquina. Ele elimina em grande parte a necessidade de back-testing e é muito aplicável para algoritmos que tentam fazer previsões de mercado. Aprendizagem Ensemble. Fornece-lhe uma maneira de ter vários algoritmos de aprendizagem da máquina e combinar suas previsões. A suposição é que vários algoritmos podem ter overfit os dados em alguma área, mas a combinação correta de suas previsões terá melhor poder preditivo. Dois aspectos da aprendizagem estatística são úteis para negociação 1. Primeiro os mencionados anteriormente: alguns métodos estatísticos focados em trabalhar em conjuntos de dados ao vivo. Isso significa que você sabe que está observando apenas uma amostra de dados e que deseja extrapolar. Você tem que lidar assim na amostra e fora das edições da amostra, overfitting e assim por diante. Desse ponto de vista, a mineração de dados está mais focada em conjuntos de dados mortos (isto é, você pode ver quase todos os dados, você tem um problema apenas na amostra) do que a aprendizagem estatística. Porque a aprendizagem estatística é sobre trabalhar em dados vivos, as matemáticas aplicadas que lidam com eles tiveram que se concentrar em um problema de duas escalas: left X ampamp Ftheta (Xn, xi) ampamp L (pi (Xn), n) end right. Onde X é o espaço de estado (multidimensional) a estudar (você tem em si suas variáveis ​​explicativas e as que prever), F contém a dinâmica de X que precisa de alguns parâmetros theta. A aleatoriedade de X vem da inovação xi, que é i. i.d. O objetivo da aprendizagem estatística é construir uma metodologia L ith como insumos uma observação parcial pi de X e ajustar progressivamente uma estimativa hattheta de theta, para que possamos saber tudo o que é necessário em X. Se você pensar em usar o aprendizado estatístico para encontrar Os parâmetros de uma regressão linear. Podemos modelar o espaço de estados como este: underbrace yx end right) left begin a amp b amp 1 1 amp 0 amp 0 end right cdot underbrace x 1 epsilon end right) o que permite observar (y, x) n em qualquer n Aqui theta (a, b). Então você precisa encontrar uma maneira de construir progressivamente um estimador de theta usando nossas observações. Por que não uma descida de gradiente na distância L2 entre y ea regressão: C (chapéu a, chapéu b) n soma (yk - (chapéu a, xk chapéu b)) 2 Aqui gamma é um esquema de ponderação. Normalmente, uma boa maneira de construir um estimador é escrever corretamente os critérios para minimizar e implementar uma descida gradiente que irá produzir o esquema de aprendizagem L. Voltando ao nosso problema genérico original. Precisamos de algumas matemáticas aplicadas para saber quando os sistemas dinâmicos de pares em (X, hattheta) convergem, e precisamos saber como construir esquemas de estimativa L que convergem para a teta original. Para dar-lhe indicações sobre tais resultados matemáticos: Agora podemos voltar para o segundo aspecto da aprendizagem estatística que é muito interessante para estrategistas comerciantes quant: 2. Os resultados usados ​​para provar a eficiência dos métodos de aprendizagem estatística pode ser usado para provar a eficiência de Algoritmos de negociação. Para ver que basta ler novamente o sistema dinâmico acoplado que permite escrever o aprendizado estatístico: left M ampamp Frho (Mn, xi) ampamp L (pi (Mn), n) end right. Agora M são variáveis ​​de mercado, rho é PnL subjacente, L é uma estratégia de negociação. Basta substituir minimizando um critério maximizando o PnL. Veja, por exemplo, a divisão óptima de ordens entre pools de liquidez: uma aproximação de algoritmo stochatic por: Gilles Pags, Sophie Laruelle, Charles-Albert Lehalle. Neste artigo, os autores mostram quem usar essa abordagem para dividir otimamente uma ordem entre diferentes piscinas escuras aprendendo simultaneamente a capacidade dos pools de fornecer liquidez e usar os resultados para negociar. As ferramentas de aprendizagem estatística podem ser usadas para construir estratégias de negociação iterativas (a maioria delas são iterativas) e provar sua eficiência. A resposta curta e brutal é: você não. Primeiro, porque ML e Estatísticas não é algo que você pode comandar bem em um ou dois anos. Meu horizonte de tempo recomendado para aprender nada não trivial é de 10 anos. ML não é uma receita para ganhar dinheiro, mas apenas outro meio para observar a realidade. Em segundo lugar, porque qualquer bom estatístico sabe que a compreensão dos dados e do domínio do problema é 80 do trabalho. É por isso que você tem estatísticos enfocando a análise de dados de Física, sobre genômica, sobre sabermetria etc. Para o registro, Jerome Friedman, co-autor de ESL citado acima, é um físico e ainda detém uma posição de cortesia em SLAC. Então, estude Estatísticas e Finanças por alguns anos. Seja paciente. Siga seu próprio caminho. A milhagem pode variar. Respondeu Feb 9 11 at 4:41 Eu concordo totalmente. Só porque você sabe a aprendizagem da máquina e as estatísticas, não implica que você sabe aplicá-lo ao financiamento. Ndash Dr. Mike Aug 10 11 at 20:25 Também uma coisa importante a lembrar é que won39t ser negociação contra as pessoas, você estará negociando contra outros algoritmos de inteligência artificial que estão assistindo a sua pilha de negócios, e estão furiosamente calculando as probabilidades de que o Coletivo yous seria assustado por um declínio fabricado e tendo essa pequena perda na criação de um spikedip e enganar todos os AI39s em parar, e depois rodar o mergulho de volta para ele e montar a onda, ganhando suas perdas. O mercado de ações é um jogo de soma zero, tratá-lo como entrar em um jogo de boxe profissional, se você aren39t um veterano de 20 anos, you39re vai perder ndash Eric Leschinski 13 de fevereiro em 1:56 Um aplicativo básico está prevendo sofrimento financeiro. Obter um monte de dados com algumas empresas que têm inadimplentes, e outros que havent, com uma variedade de informações financeiras e relações. Use um método de aprendizado de máquina como SVM para ver se você pode prever quais empresas serão padrão e quais não. Use esse SVM no futuro para curto empresas de probabilidade de alta probabilidade e longo probabilidade de baixa probabilidade empresas, com o produto das vendas a descoberto. Há um ditado quotPicking tostões na frente de rollersquot de vapor. Você está fazendo o equivalente a vender um out-of-the-money put. Neste caso, você vai fazer pequenos lucros durante anos e, em seguida, ficar totalmente limpo quando o mercado derrete a cada 10 anos ou assim. Há também uma estratégia equivalente que compra out-of-the-money coloca: eles perdem dinheiro por anos, em seguida, fazer uma matança quando o mercado derrete. Veja o Cisne Negro de Talab39s. Ndash Contango Jun 5 11 at 22:20 Lembre-se que as empresas internacionais gastaram centenas de bilhões de dólares e horas de trabalho nas melhores e mais brilhantes mentes de inteligência artificial nos últimos 40 anos. Falei com algumas das torres de mente responsáveis ​​pelos alfas sobre Citadel e Goldman Sachs, ea arrogância dos noviços de pensar que eles podem montar um algoritmo que irá toe to toe com eles, e ganhar, é quase tão idiota como Uma criança dizendo que ele vai pular para a lua. Garoto de boa sorte, e cuidado com o espaço marcianos. Para não dizer que os novos campeões não podem ser feitos, mas as probabilidades estão contra você. Ndash Eric Leschinski Feb 13 16 at 2:00 Uma possibilidade vale a pena explorar é usar a ferramenta de aprendizado de vetores de suporte na plataforma Metatrader 5. Em primeiro lugar, se você não está familiarizado com ele, Metatrader 5 é uma plataforma desenvolvida para usuários para implementar negociação algorítmica nos mercados de forex e CFD (Im não tenho certeza se a plataforma pode ser estendida para ações e outros mercados). É tipicamente usado para estratégias de análise técnica baseada (ou seja, usando indicadores baseados em dados históricos) e é usado por pessoas que procuram automatizar sua negociação. O Support Vector Machine Learning Tool foi desenvolvido por uma comunidade de usuários para permitir que máquinas vetoriais de suporte sejam aplicadas a indicadores técnicos e aconselhar sobre negócios. Uma versão demo gratuita da ferramenta pode ser baixada aqui se você quiser investigar mais. Conforme eu entendo, a ferramenta usa dados de preços históricos para avaliar se os negócios hipotéticos no passado teriam sido bem-sucedidos. Em seguida, leva esses dados juntamente com os valores históricos de uma série de indicadores personalizáveis ​​(MACD, osciladores, etc), e usa isso para treinar uma máquina de vetores de suporte. Em seguida, ele usa a máquina treinada do vetor do apoio ao sinal buysell futuros comércios. Uma descrição melhor pode ser encontrada no link. Eu joguei com ele um pouco com alguns resultados muito interessantes, mas como com todas as estratégias de negociação algorítmica eu recomendo teste backforward sólido antes de levá-lo para o mercado ao vivo. Respondeu Dec 10 12 at 11:59 Desculpe, mas apesar de ser usado como um exemplo popular na aprendizagem da máquina, ninguém nunca conseguiu uma previsão do mercado de ações. Não funciona por várias razões (verifique a caminhada aleatória por Fama e um monte de outros, falha racional de tomada de decisão, suposições erradas.), Mas o mais atraente é que, se funcionasse, alguém poderia tornar-se insanamente rico Dentro de meses, basicamente possuir todo o mundo. Como isso não está acontecendo (e você pode ter certeza que todo o banco tem tentado), temos boas provas, que simplesmente não funciona. Além disso: Como você acha que vai conseguir o que dezenas de milhares de profissionais não conseguiram, usando os mesmos métodos que eles têm, além de recursos limitados e apenas versões básicas de seus métodos respondidos Jun 4 15 às 7:47 Apenas um aparte sobre o seu Quotmost compellingquot razão: as estratégias têm limites de capacidade, ou seja, níveis além do qual seu impacto no mercado seria superior ao alfa disponível, mesmo assumindo que você tinha capital ilimitado. Não tenho certeza do que você quer dizer com uma previsão de mercado de quotas (índice de futuros ETF39s), mas certamente há uma abundância de pessoas fazendo previsões de curto prazo e beneficiando delas, todos os dias nos mercados. Ndash afekz Nov 23 15 at 13:19 Eu ecoo muito do que Shane escreveu. Além de ler ESL, gostaria de sugerir um estudo ainda mais fundamental de estatísticas em primeiro lugar. Além disso, os problemas que eu esbocei em outra questão sobre esta troca são altamente relevantes. Em particular, o problema do viés datamining é um obstáculo grave para qualquer máquina de aprendizagem baseado em estratégia. Aprendizagem de máquina com algoTraderJo Entrou dezembro 2017 Status: Member 383 Posts Olá companheiro comerciantes, Estou começando este segmento na esperança de compartilhar com você alguns dos meus desenvolvimentos No campo da aprendizagem mecânica. Embora eu não possa compartilhar com você sistemas exatos ou implementações de codificação (não espere obter nada para quotplug-and-playquot e ficar rico a partir deste segmento) vou compartilhar com você idéias, resultados da minha experiência e possivelmente outros aspectos do meu trabalho. Estou começando este tópico na esperança de que possamos compartilhar idéias e ajudar uns aos outros a melhorar nossas implementações. Vou começar com algumas estratégias de aprendizagem simples máquina e, em seguida, entrar em coisas mais complexas como o tempo passa. Espero que você aprecie o passeio Juntado dezembro 2017 Status: Member 383 Posts Quero começar por dizer algumas coisas básicas. Lamentamos se a estrutura dos meus posts deixa muito a desejar, eu não tenho nenhum fórum postagem experiência, mas espero obter alguns com o tempo. Na aprendizagem da máquina o que queremos fazer é simplesmente gerar uma previsão que é útil para o nosso comércio. Para fazer essa predição, geramos um modelo estatístico usando um conjunto de exemplos (saídas conhecidas e algumas entradas que as coisas têm poder preditivo para prever essas saídas), então fazemos uma previsão de uma saída desconhecida (nossos dados recentes) usando o modelo que criamos com Os exemplos. Para resumir é um processo quotsimplequot onde nós fazemos o seguinte: Selecione o que nós queremos predizer (este será nosso alvo) Selecionar algumas variáveis ​​de entrada que nós pensamos pode prever nossos alvos Construa um jogo dos exemplos usando dados passados Com nossas entradas e nossas metas Crie um modelo usando esses exemplos. Um modelo é simplesmente um mecanismo matemático que relaciona os inputstargets Faça uma previsão do alvo usando as últimas entradas conhecidas Comércio usando esta informação Eu quero dizer desde o início que é muito importante evitar fazer o que muitos trabalhos acadêmicos sobre a aprendizagem de máquina fazem, Que é tentar construir um modelo com matrizes muito grandes de exemplos e, em seguida, tentar fazer uma previsão de longo prazo em um conjunto quotout-of-samplequot. Construir um modelo com 10 anos de dados e testá-lo nos dois últimos é não-senso, sujeito a muitos tipos de preconceitos estatísticos que discutiremos mais adiante. Em geral, você verá que os modelos de aprendizagem de máquina que eu construo são treinados em cada barra (ou cada vez que eu preciso tomar uma decisão) usando uma janela de dados em movimento para a construção de exemplos (apenas exemplos recentes são considerados relevantes). Claro, esta abordagem não é estranha a alguns tipos de viés estatísticos, mas removemos o quotelefante na sala quando se usa a ampla abordagem de amostra da maioria dos trabalhos acadêmicos (o que, sem surpresa, muitas vezes leva a abordagens que não são Realmente útil para o comércio). Há principalmente três coisas a se preocupar com quando construir um modelo de aprendizagem de máquina: O que prever (o que o alvo) O que prever com (que insumos) Como relacionar o alvo e entradas (que modelo) A maioria do que vou estar mencionando Neste tópico irá focar em responder a estas perguntas, com exemplos reais. Se você quiser escrever quaisquer perguntas que você possa ter e eu vou tentar dar-lhe uma resposta ou simplesmente deixá-lo saber se vou responder isso mais tarde. Registrado em Dez 2017 Status: Member 383 Posts Vamos começar a trabalhar agora. Um verdadeiro exemplo prático usando a aprendizagem mecânica. Vamos supor que queremos construir um modelo muito simples usando um conjunto muito simples de inputstargets. Para esta experiência, estas são as respostas às perguntas: O que prever (o alvo) - gt A direção do próximo dia (otimista ou bearish) O que prever com (quais entradas) - gt A direção dos dois dias anteriores Como Para relacionar o alvo e as entradas (que modelo) - gt Um classificador linear de mapas Este modelo tentará prever a direcionalidade da próxima barra diária. Para construir nosso modelo, tomamos os últimos 200 exemplos (uma direção de dias como alvo e as direções anteriores de dois dias como entradas) e treinamos um classificador linear. Fazemos isso no início de cada bar diário. Se tivermos um exemplo em que dois dias de alta conduzem a um dia de baixa, os inputs seriam 1,1 eo alvo seria 0 (0bearish, 1bullish), usamos 200 destes exemplos para treinar o modelo em cada barra. Esperamos ser capazes de construir uma relação onde a direção de dois dias produz alguma probabilidade acima-aleatória para prever corretamente a direção dos dias. Usamos um stoploss igual a 50 do período médio de 20 dias True Range em cada comércio. Uma simulação desta técnica de 1988 a 2017 no EURUSD (dados anteriores a 1999 é DEMUSD) acima mostra que o modelo não tem geração de lucro estável. Na verdade, este modelo segue uma caminhada aleatória negativamente tendenciosa, o que faz com que ele perca dinheiro em função da propagação (3 pips no meu sim). Olhe para o desempenho aparentemente quotimpressive que temos em 1993-1995 e em 2003-2005, onde, aparentemente, poderíamos prever com sucesso a direcionalidade dos próximos dias usando um modelo linear simples e os resultados direcionais de dois dias anteriores. Este exemplo mostra várias coisas importantes. Por exemplo, que em curto prazo (que poderia ser um par de anos), você pode ser facilmente enganado por aleatoriedade --- você pode pensar que você tem algo que funciona que realmente não. Lembre-se de que o modelo é reconstruído em cada barra, usando os últimos 200 exemplos de inputtarget. Que outras coisas você acha que pode aprender com este exemplo Post seus pensamentos Bem. Assim que você predisse que os compradores ou os vendedores pisariam dentro. Hmm, mas o que exatamente tem que fazer com preço que vai acima ou para baixo 100 pips O preço pode reagir em várias maneiras - pôde apenas tanque por algum tempo (quando todas as ordens do limite forem enchidas) E depois continuar avançando. Pode também retrace 5, 10, 50 ou mesmo 99 pips. Em todos esses casos você estava meio certo sobre compradores ou vendedores entrando, mas você deve entender que esta análise não tem muito a ver com o seu comércio indo de 90pip para 100pip. Sim, você está certo Esta é uma grande parte da razão pela qual estamos recebendo maus resultados ao usar o algoritmo de mapeamento linear. Porque a nossa rentabilidade está mal relacionada com a nossa previsão. Prever que os dias são bullishbearish é de uso limitado se você não sabe quanto preço se moverá. Talvez suas previsões estejam corretas apenas nos dias que lhe dão 10 pips e você recebe todos os dias que têm 100 direcional pip totalmente errado. O que você consideraria um alvo melhor para um método de aprendizagem de máquina Sim, você está certo Esta é uma grande parte da razão pela qual estamos obtendo pobres resultados ao usar o algoritmo de mapeamento linear. Porque a nossa rentabilidade está mal relacionada com a nossa previsão. Prever que os dias são bullishbearish é de uso limitado se você não sabe quanto preço se moverá. Talvez suas previsões estejam corretas apenas nos dias que lhe dão 10 pips e você recebe todos os dias que têm 100 direcional pip totalmente errado. O que você consideraria um alvo melhor para um método de aprendizagem de máquina Vamos dizer se você tem 100 pip TP e SL, eu gostaria de prever o que vem primeiro: TP ou SL Exemplo: TP veio primeiro 1 SL veio primeiro 0 (ou -1, No entanto você mapeá-lo) Este post irá detalhar o que eu fiz para fazer aprox. 500k de negociação de alta freqüência de 2009 a 2018. Desde que eu estava negociando completamente independente e não estou mais executando o meu programa Irsquom feliz em dizer tudo. Minha negociação foi principalmente em contratos de futuros Russel 2000 e DAX. A chave para o meu sucesso, creio eu, não estava em uma equação financeira sofisticada, mas sim no design de algoritmos globais que uniram muitos componentes simples e usaram o aprendizado de máquinas para otimizar para obter a máxima rentabilidade. Você não precisa saber qualquer terminologia sofisticada aqui, porque quando eu configurar o meu programa era tudo baseado na intuição. (Andrew Ngrsquos curso de aprendizagem de máquina incrível ainda não estava disponível - btw se você clicar nesse link yoursquoll ser levado para o meu projeto atual: CourseTalk, um site de revisão para MOOCs) Primeiro, eu só quero demonstrar que o meu sucesso não foi simplesmente o resultado de sorte. Meu programa fazia 1000-4000 comércios por dia (metade de comprimento, meio curto) e nunca entrou em posições de mais de alguns contratos de cada vez. Isto significou a sorte aleatória de qualquer um comércio particular média fora bastante rápido. O resultado foi que eu nunca perdi mais do que 2000 em um dia e nunca tive um mês perdedor: (EDIT Estes números são depois de pagar comissões) E herersquos um gráfico para lhe dar uma noção da variação diária. Observe isso exclui os últimos 7 meses porque - como os números pararam de subir - eu perdi a minha motivação para entrar neles. Meu fundo de negociação Antes de configurar o meu programa de negociação automatizado Irsquod tinha 2 anos de experiência como um comerciante do dia ldquomanualrdquo. Isso foi em 2001 - foram os primeiros dias do comércio eletrônico e houve oportunidades para ldquoscalpersrdquo para fazer bom dinheiro. Eu só posso descrever o que eu estava fazendo como semelhante a jogar um jogo de vídeo de jogo com uma borda suposto. Ser bem sucedido significava ser rápido, ser disciplinado, e ter uma boa intuitiva reconhecimento de padrões de habilidades. Eu era capaz de fazer cerca de 250k, pagar meus empréstimos estudantis e ter dinheiro sobrando. Win Durante os próximos cinco anos eu iria lançar duas startups, pegando algumas habilidades de programação ao longo do caminho. Não seria até o final de 2008 que eu voltaria à negociação. Com o dinheiro correndo baixo da venda da minha primeira inicialização, o comércio ofereceu esperanças de algum dinheiro rápido, enquanto eu descobri o meu próximo movimento. Em 2008 eu estava ldquomanuallyrdquo dia negociação futuros usando software chamado T4. Irsquod estava querendo alguns hotkeys de entrada de pedidos personalizados, então depois de descobrir T4 tinha uma API, eu assumi o desafio de aprender C (a linguagem de programação necessária para usar a API) e fui em frente e construí algumas teclas de atalho. Depois de ficar com os pés molhados com o API eu logo tinha maiores aspirações: Eu queria ensinar o computador para o comércio para mim. A API forneceu um fluxo de dados de mercado e uma maneira fácil de enviar ordens para a troca - tudo que eu tinha a fazer era criar a lógica no meio. Abaixo está uma captura de tela de uma janela de negociação T4. O que foi legal é que quando eu tenho o meu programa de trabalho que eu era capaz de assistir o comércio de computadores nesta mesma interface. Assistindo ordens reais popping dentro e fora (por si com o meu dinheiro real) foi emocionante e assustador. O projeto do meu algoritmo Desde o início o meu objetivo era configurar um sistema tal que eu poderia ser razoavelmente confiante Irsquod ganhar dinheiro antes de fazer qualquer comércios ao vivo. Para conseguir isso eu precisava construir uma estrutura de simulação de negociação que - o mais exatamente possível - simular a negociação ao vivo. Enquanto a negociação no modo ao vivo requeria atualizações do mercado de processamento transmitidas através da API, o modo de simulação exigia a leitura de atualizações do mercado a partir de um arquivo de dados. Para coletar esses dados eu configurar a primeira versão do meu programa para simplesmente se conectar à API e registrar atualizações de mercado com timestamps. Acabei usando 4 semanas de dados de mercado recentes para treinar e testar meu sistema. Com um quadro básico no lugar, eu ainda tinha a tarefa de descobrir como fazer um sistema comercial rentável. Como se vê, meu algoritmo se dividiria em dois componentes distintos, que a Irsquoll exploraria por sua vez: Prever movimentos de preços e fazer negócios lucrativos Prever movimentos de preços Talvez um componente óbvio de qualquer sistema de negociação seja ser capaz de prever onde os preços se moverão. E a minha não foi exceção. Eu defini o preço atual como a média do lance interno e oferta interna e eu definir o objetivo de prever onde o preço seria nos próximos 10 segundos. Meu algoritmo precisaria vir acima com esta predição momento-a-momento durante todo o dia de negociação. Criando um amplificador de otimização de indicadores Eu criei um punhado de indicadores que provou ter uma capacidade significativa para prever os movimentos de preços de curto prazo. Cada indicador produziu um número que era positivo ou negativo. Um indicador foi útil se mais frequentemente do que um número positivo correspondeu com o mercado subindo e um número negativo correspondeu com o mercado vai para baixo. Meu sistema permitiu que eu rapidamente determinar o quanto a capacidade de previsão de qualquer indicador tinha assim que eu era capaz de experimentar com um monte de diferentes indicadores para ver o que funcionou. Muitos dos indicadores tinham variáveis ​​nas fórmulas que os produziram e pude encontrar os valores ótimos 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 que eu estava negociando, bem como os mercados de títulos correlacionados. Fazer previsões exatas de movimento de preços Tendo indicadores que simplesmente previam um movimento de preços para cima ou para baixo não era suficiente. Eu precisava saber exatamente quanto movimento de preço foi previsto por cada valor possível de cada indicador. Eu precisava de uma fórmula que converteria um valor indicador para uma previsão de preços. Para conseguir isso, eu segui os movimentos de preço previsto em 50 baldes que dependiam do intervalo em que o valor do indicador caíra. Isso produziu previsões únicas para cada balde que eu era capaz de representar no Excel. Como você pode ver a mudança esperada do preço aumenta enquanto o valor do indicador aumenta. Com base em um gráfico como este, eu era capaz de fazer uma fórmula para ajustar a curva. No começo eu fiz este ldquocurve fittingrdquo manualmente mas eu logo escrevi algum código para automatizar este processo. Note que nem todas as curvas indicadoras tinham a mesma forma. Observe também que os baldes foram logaritmicamente distribuídos de modo a espalhar os pontos de dados uniformemente. Por último, note que os valores dos indicadores negativos (e as respectivas previsões de preços descendentes correspondentes) foram invertidos e combinados com os valores positivos. (Meu algoritmo tratado acima e abaixo exatamente o mesmo.) Combinando indicadores para uma única previsão Uma coisa importante a considerar era que cada indicador não era inteiramente 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 isso significava que, se eu fosse ldquocurve fittingrdquo múltiplos indicadores, ao mesmo tempo eu tinha que ser cuidadoso alterando um efeito que as previsões de outro. A fim de ldquocurve fitrdquo todos os indicadores ao mesmo tempo eu configurar o otimizador para passo apenas 30 do caminho para as novas curvas de previsão com cada passagem. Com este salto de 30, descobri que as curvas de previsão se estabilizariam em poucas passagens. Com cada indicador agora dando itrsquos preço adicional previsão eu poderia simplesmente adicioná-los para produzir uma única previsão de onde o mercado seria em 10 segundos. Por que prever os preços não é suficiente Você pode pensar que com essa vantagem no mercado eu era dourado. Mas você precisa ter em mente que o mercado é composto de lances e ofertas - itrsquos não apenas um preço de mercado. O sucesso na negociação de alta freqüência vem para baixo para obter bons preços e itrsquos não é tão fácil. Os seguintes fatores tornam a criação de um sistema rentável difícil: com cada comércio eu tive que pagar comissões tanto para o meu corretor ea troca. A propagação (diferença entre a oferta mais alta ea oferta mais baixa) significava que se eu fosse simplesmente comprar e vender aleatoriamente Irsquod estar perdendo uma tonelada de dinheiro. A maioria do volume de mercado era outros bots que só executariam um comércio comigo se eles pensassem que tinham alguma vantagem estatística. Vendo uma oferta não garantia que eu poderia comprá-lo. Até o momento a minha ordem de compra chegou à troca era muito possível que essa oferta teria sido cancelada. Como um jogador de mercado pequeno não havia nenhuma maneira que eu poderia competir na velocidade sozinho. Construindo uma simulação de negociação completa Então eu tinha uma estrutura que me permitiu backtest e otimizar indicadores. Mas eu tinha que ir além disso - eu precisava de uma estrutura que me permitisse backtest e otimizar um sistema de comércio completo onde eu estava enviando ordens e ficando em posições. Neste caso, a Irsquod estará a optimizar para a PampL total e, em certa medida, para a PampL média por transacção. Isso seria mais complicado e de alguma forma impossível de modelar exatamente, mas eu fiz o melhor que pude. Aqui estão alguns dos problemas que eu tive que lidar com: Quando uma ordem foi enviada para o mercado em simulação eu tive que modelar o tempo de latência. O fato de meu sistema ter visto uma oferta não significava que poderia comprá-la imediatamente. O sistema enviaria a ordem, aguardar aproximadamente 20 milissegundos e então somente se a oferta ainda era lá foi considerado como um comércio executado. Isso era inexato porque o tempo de atraso real era inconsistente e não declarado. Quando eu coloquei lances ou ofertas que eu tive que olhar para o fluxo de execução de comércio (fornecido pela API) e usá-los para medir quando a minha ordem teria sido executado contra. Para fazer isso, eu tinha que rastrear a posição da minha encomenda na fila. (Itrsquos um sistema first-in first-out.) Novamente, eu couldnrsquot fazer isso perfeitamente, mas eu fiz uma melhor aproximação. Para refinar minha simulação de execução de ordem o que fiz foi pegar meus arquivos de log de negociação ao vivo pela API e compará-los com arquivos de log produzidos por negociação simulada do mesmo período de tempo. Eu era capaz de obter a minha simulação para o ponto que era bastante preciso e para as partes que eram impossíveis de modelar exatamente eu fiz certo para, pelo menos, produzir resultados que foram estatisticamente semelhantes (nas métricas que eu pensei que eram importantes). Fazendo negócios rentáveis ​​Com um modelo de simulação de ordem no lugar eu poderia agora enviar ordens no modo de simulação e ver um PampL simulado. Mas como o meu sistema saberia quando e onde comprar e vender? As previsões de 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ços sobre a oferta e oferta. Estes incluíam 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 em qualquer dado nível de preço estava acima de um determinado limite que significaria meu sistema deve ter um bidoffer ativo lá - abaixo do limiar, em seguida, quaisquer ordens ativas devem ser canceladas. Com base nisso, não era incomum que meu sistema pudesse mostrar um lance no mercado e imediatamente cancelá-lo. (Embora eu tentei minimizar isso como itrsquos irritante como heck para quem olha para a tela com olhos humanos - incluindo-me.) Os níveis de preços foram calculados com base nos seguintes fatores: A previsão de movimento de preços (que discutimos anteriormente). O nível de preços em questão. (Os níveis internos significavam que eram necessárias maiores previsões de movimento de preços.) O número de contratos na frente da minha ordem na fila. (Menos foi melhor.) O número de contratos por trás da minha ordem na fila. (Mais era melhor.) Essencialmente esses fatores serviram para identificar ldquosaferdquo lugares para bidoffer. A previsão de movimento de preço por si só não era adequada porque não contava o fato de que ao colocar uma oferta eu não estava automaticamente preenchido - só fiquei preenchido se alguém me vendesse lá. A realidade era que o mero fato de alguém vender a mim a um certo preço mudou as probabilidades estatísticas do comércio. As variáveis ​​utilizadas nesta etapa foram todas sujeitas a otimização. Isso foi feito da mesma maneira como eu otimizado variáveis ​​nos indicadores de movimento de preços, exceto neste caso eu estava otimizando para linha de fundo PampL. O que meu programa ignorou Ao negociar como seres humanos, muitas vezes temos emoções poderosas e preconceitos que podem levar a decisões menos do que ideal. Claramente eu não queria codificar esses preconceitos. Aqui estão alguns fatores que meu sistema ignorou: O preço que uma posição foi inserida - Em um escritório de comércio itrsquos bastante comum para ouvir conversa sobre o preço em que alguém é longo ou curto como se isso deve afetar sua tomada de decisão futura. Embora isso tenha alguma validade como parte de uma estratégia de redução de risco que realmente não tem qualquer influência sobre o curso futuro dos eventos no mercado. Portanto, meu programa ignorou completamente essas informações. Itrsquos o mesmo conceito como ignorando custos irrecuperáveis. Indo curto vs saindo de uma posição longa - tipicamente um comerciante teria diferentes critérios que determina onde vender uma posição longa versus onde ir curto. No entanto, da minha perspectiva de algoritmos, não havia razão para fazer uma distinção. Se o meu algoritmo esperava um movimento para baixo vender era uma boa idéia, independentemente de se ele era atualmente longo, curto ou plano. A ldquodoubling uprdquo estratégia - Esta é uma estratégia comum, onde os comerciantes vão comprar mais ações no caso em que há comércio original vai contra eles. Isso resulta em seu preço médio de compra sendo menor e significa quando (ou se) o estoque gira em torno de yoursquoll ser configurado para fazer o seu dinheiro de volta em nenhum momento. Na minha opinião, esta é realmente uma estratégia horrível a menos que você Warren Buffet. Yoursquore enganado em pensar que você está fazendo bem, porque a maioria de seus comércios serão 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ão apenas ficando com sorte. Ser capaz de monitorar e confirmar que o meu programa de fato tinha uma vantagem era um objetivo importante. Desde que meu algoritmo tomou decisões da mesma maneira, independentemente de onde ele entrou em um comércio ou se ele estava atualmente longo ou curto que ocasionalmente sentar em (e tomar) algumas grandes operações perdedoras (além de algumas grandes tradições vencedoras). Mas, você shouldnrsquot pensar lá wasnrsquot qualquer gestão de risco. Para gerenciar o risco eu reforcei um tamanho de posição máximo de 2 contratos de cada vez, ocasionalmente batido em dias de alto volume. Eu também tinha um limite máximo de perda diária para proteger contra quaisquer condições de mercado inesperadas ou um bug no meu software. Estes limites foram aplicados no meu código, mas também no back-end através do meu corretor. Como aconteceu eu nunca encontrei problemas significativos. Executando o algoritmo Desde o momento em que eu comecei a trabalhar no meu programa que me levou cerca de 6 meses antes que eu comecei ao ponto de rentabilidade e começou a executá-lo ao vivo. Embora para ser justo uma quantidade significativa de tempo foi aprender uma nova linguagem de programação. Como eu trabalhei para melhorar o programa eu vi aumento de lucros para cada um dos próximos quatro meses. Cada semana que eu reciclar meu sistema com base no valor de 4 semanas anteriores de dados. Eu encontrei este golpeou o contrapeso direito entre capturar tendências comportamentais recentes do mercado e segurar meu algoritmo teve bastante dados para estabelecer testes padrões significativos. Como o treinamento começou a tomar mais e mais tempo que eu dividi-lo para que ele poderia ser realizado por 8 máquinas virtuais usando amazon EC2. Os resultados foram então coalesced na minha máquina local. O ponto alto da minha negociação foi outubro de 2009, quando eu fiz quase 100k. After this I continued to spend the next four months trying to improve my program despite decreased profit each month. Unfortunately by this point I guess Irsquod implemented all my best ideas because nothing I tried seemed to help much. With the frustration of not being able to make improvements and not having a sense of growth I began thinking about a new direction. I emailed 6 different high frequency trading firms to see if theyrsquod be interested in purchasing my software and hiring me to work for them. Nobody replied. I had some new startup ideas I wanted to work on so I never followed up. UPDATE - I posted this on Hacker News and it has gotten a lot of attention. I just want to say that I do not advocate anyone trying to do something like this themselves now. You would need a team of really smart people with a range of experiences to have any hope of competing. Even when I was doing this I believe it was very rare for individuals to achieve success (though I had heard of others.) There is a comment at the top of the page that mentions manipulated statistics and refers to me as a ldquoretail investorrdquo that quants would ldquogleefully pick offrdquo. This is a rather unfortunate comment thatrsquos simply not based in reality. Setting that aside therersquos some interesting comments: news. ycombinatoritemid4748624 UPDATE 2 - Irsquove posted a follow-up FAQ that answers some common questions Irsquove received from traders about this post.

No comments:

Post a Comment