Forex Python Api


Atualização: atualizei o código para que ele funcione com a nova API da Oandas. Obtenha aqui o momento de falar sobre corretores, como colocar um negócio de forma programática e, sobretudo, como não se enganar. Um corretor não é nada mais do que uma empresa que lhe permite comercializar (comprar ou vender) ativos em um mercado através de sua plataforma. O que é muito importante para algotrading é: O corretor oferece uma API para que possamos fazer pedidos Você pode ter uma conta de demonstração para executar o seu ambiente de teste e experimentar. O spread é tão pequeno quanto possível No nosso caso, nós realmente não nos importamos com o spread Como não estaremos fazendo negociação de alta freqüência em breve. Embora os corretores estejam regulamentados, ocorreram incidentes nos últimos dois anos, os corretores dobraram devido a certas condições. Seja muito cauteloso se não houver comentários sobre o corretor na internet (ou a maioria deles é ruim) Se o corretor lhe oferecer uma alavanca louca (como 1: 200) Se o corretor parece estar em um país muito estranho O que poderia acontecer É que você começa a ganhar algum dinheiro e você não pode expulsá-los. A sério. Situação super estressante. Mas vamos mudar para uma nota mais feliz que está abrindo uma conta e colocando nosso primeiro comércio programático. Whooha eu estou usando o Oanda como corretor (não estou afiliado com eles) e eles oferecem uma API bastante decente, bibliotecas no github e uma conta demo gratuita. Depois de iniciar sessão na sua conta de demonstração, vá para Gerenciar acesso à API. Lá, você pode encontrar sua chave de API que vamos usar em nosso sistema para fazer negócios. CERTIFIQUE-SE DE NÃO COMPARTILHAR ESTA CHAVE. O código para isso é e todas as outras postagens estão no github e você pode instalá-lo e executá-lo com bastante facilidade. Atualização: Oanda lançou um novo mecanismo de execução (kickass) chamado v20 e eles lançaram uma nova API (melhorada). Esta publicação foi atualizada para usar a nova API, mas se (por qualquer motivo) você quiser verificar o código antigo, está aqui. Você é sortudo por você. Conectando-se a Oanda precisa de um arquivo conf - o que você pode gerar usando um script que Oanda fornece aqui ou você pode simplesmente criá-lo você mesmo. Por que você quer que, em primeiro lugar, quando se trata de credenciais (e meu dinheiro), eu prefiro saber tudo o que está acontecendo. E eu não gosto de ter que instalar o PyYAML apenas para ler um arquivo conf. Sinta-se livre para usar qualquer um dos métodos. Agora, prepare-se para se surpreender. O código é direto. Inicializamos a API: e agora vamos fazer um pedido (comprar 5000 unidades de EURUSD) Verifique se o preço atual é tão fácil. Não se preocupe com o que é EURUSD ou com quantas unidades estamos comprando ou qual é a ordem do mercado. Por enquanto, colocamos o nosso primeiro comércio a partir do nosso laptop e vamos construir a nossa própria API para fazer negócios. Material emocionante Você pode ler a documentação da Oandas aqui para ver o que mais você pode fazer com sua API e encontrar a biblioteca do Python aqui. Tons de exemplos estão disponíveis na página do Oandas github aqui. Próxima, conectando-se a um verdadeiro sistema algotrading AO VIVO, que corre do meu RaspberryPI em casa. Você poderá ver o programa (quase) final em execução e falar melhor sobre Forex e estratégias. Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. Isto é mais uma forma de construir sua própria estratégia algotrading - a edição Ethereum e não uma publicação de blog rápido e rápido. Também é um exemplo real com retornos reais (e erros reais de produção que me custam dinheiro), onde você pode ver como identificar oportunidades, por que algotrading é incrível e porque o gerenciamento de riscos pode salvar sua bunda. Eu recebo esta pergunta quase em uma base diária. Como posso encontrar uma boa estratégia? Como posso construir meu próprio? Preciso ter um doutorado em matemática. Estatística Newsflash: se eu posso escrever uma estratégia, qualquer pessoa pode escrever uma estratégia. Confie em mim sobre isso. O único truque é procurar um simples. Atualização: Esta publicação foi reescrita pelo menos cinco vezes (como o drama DAO escalou) e é o exemplo perfeito de uma estratégia fazendo um círculo completo. Comecei a me envolver com o Ethereum desde o início, já que eu realmente gostei de executar seus algoritmos na coisa blockchain. Quando TheDAO saiu, eu li tudo sobre isso e amei a idéia. Você não precisa entender o que Ethereum, theDAO, blockchain é neste ponto (eu prometo que eu vou caminhar em uma outra postagem). As mesmas ideias se aplicam ao Forex, estoque até bolas de Pokémon. Meu sistema de quatro passos - capitão óbvio - eu pessoalmente, tenho uma maneira específica de trabalhar. Passo um . Identifique uma ideia. Minha idéia, neste caso, é que existem algumas trocas oferecendo tokens Ethereum e DAO. E se houvesse uma arbitragem entre a segunda etapa. Teste manualmente a ideia. Se algo funciona, eu estou em algo. Tudo o que eu tinha que fazer era executar todas as etapas manualmente e anotar quaisquer taxas, condições ou qualquer coisa que devesse ser documentada. Passo três . Automatizar Este algoritmo não é um algoritmo de negociação de alta freqüência. Há uma quantidade considerável de risco de tempo (que você pode eliminar, assim como ver mais tarde), mas o que eu fiz poderia ser feito manualmente. O problema é que eu teria que gastar todo o tempo na frente do meu computador, verificando se há uma condição de arbitragem e, se houvesse, eu tinha que agir rápido e sem estragar. Ah e eu tivemos que recrutar cinco dos meus amigos para ampliar isso. Longa história curta, passei o Dia dos Presidentes escrevendo um programa simples que reproduzirá todas as minhas etapas manuais. O programa falhava e não eram mais que 100 linhas de código. Esta é a fase de coleta de dados em que vejo se existe uma vantagem que os algoritmos podem me dar. As vantagens podem ser: algo que seja automatizado e executado 1000 vezes por segundo ou 1000 vezes em paralelo Algo que pensa mais rápido do que eu posso Algo que não tem sentimentos para estragar meu sistema Se houver pelo menos uma ou mais condições encontradas, eu vou Comece a criar e reescrever o algo. Passo quatro. Tudo no que eu estou brincando e você verá um pouco porque o gerenciamento de riscos é super importante neste negócio. Vamos discutir um pouco sobre o que foi essa arbitragem. A idéia é: eu me pergunto se Kraken e Shapeshift têm preços diferentes para os mesmos recursos. Este é um caso de arbitragem clássico (Kraken e Shapeshift são trocas). Eu poderia trocar DAO por ETH em Kraken, transferir ETH para Shapeshift, trocar ETH por DAO e enviá-los de volta para Kraken e devido a incovencias de preços, eu acabaria com mais DAO do que inicialmente comecei dinheiro sem risco, o melhor tipo de dinheiro . Você pode ganhar dinheiro enquanto ETHDAO da Kraken DAOETH da ShapeShift gt 1 (taxa de gás). Fórmula muito simples, certo Todo ciclo, foi um retorno de 2 a 10 da minha capital. Depois de um tempo, comecei a atingir os limites do Shapeshift e tive que fazer isso funcionar em paralelo. A questão é o que você faria se você tivesse um algoritmo que lhe faça 10 de seu dinheiro a cada 20 minutos. A coisa mais estúpida que você poderia fazer é colocar toneladas de dinheiro nele. Se você não está familiarizado com a palavra grega hybris. Considere-se afortunado. Hybris é quando você pensa que é invencível, melhor do que deus. E este é o maior NO NÃO, você pode fazer na negociação. Após algumas semanas, a ADO foi pirateada. 160 milhões de dólares foram roubados (ou devo dizer congelado) e ninguém sabia o que aconteceria. Para mim, isso aconteceu, 10 minutos antes de embarcar em um avião para voar para Nova York. Hybris. Ou como pessoas nos EUA dizem: Fuck. Eu era inteligente (com sorte) o suficiente para ter bons hábitos de gerenciamento de risco (obrigado Forex). Nunca mais arriscaria mais 2 da minha capital, mesmo que pareça o melhor tipo de negócio. Por sorte, o dinheiro foi restaurado e eu poderia retirar o meu DAO para Ethereum (mas sim, eu comprei Wi-Fi no voo para manter o que está acontecendo). Toda essa experiência é um lembrete de que sempre há coisas que você não pode prever. Coisas que você não pode controlar. Este era um risco sistemático e não havia nenhuma maneira em que eu poderia ter visto isso. Empurrar botões e construir algoritmos não é suficiente. O gerenciamento adequado de riscos e saber quando você precisa tomar uma pílula é o que pode mantê-lo no jogo. Na próxima publicação, vou publicar todo o algoritmo e ir linha a linha. Eu também planejo discutir um pouco mais sobre a ADO e Ethereum. Se você não quer perder nada disso e obter mais informações adicionais, sinta-se à vontade para se inscrever no boletim informativo onde falo sobre fintech, algoritmos e mercados. Por sinal, se você quiser fazer sua própria criptografia e aprender mais sobre Ethereum, tenho uma ótima publicação com o código publicado aqui. Próxima: mergulhar no programa algotrading ETHDAO Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. A aprendizagem e o comércio de máquinas são um assunto muito interessante. É também um assunto onde você pode gastar toneladas de tempo escrevendo código e lendo documentos e, em seguida, uma criança pode vencê-lo enquanto joga Mario Kart. Nas postagens nexts, vamos falar sobre: ​​otimizar entradas e saídas. Isto e só isso pode fazer uma tonelada de diferença no seu rolo de banco. Calcule o tamanho da posição (no caso de você não gostar do critério de Kelly) Encontre a possível correlação entre diferentes pares (negociação em pares). Eu amo a correlação EURUSD vs GBPJPY Calcule as linhas de resistência do amplificador de suporte. Mas o que são os algoritmos de aprendizado da Machine Learning Machine são algoritmos em que uma máquina pode identificar padrões em seus dados. Yeap, é assim tão simples. Por exemplo, encontre todos os animais nesta foto e desenhe uma caixa em torno deles. Além disso, nomeie esse animal. Louco, eu sei. Para negociar como você pode imaginar, é bastante semelhante: para que uma máquina aprenda, você precisa ensinar o que é certo ou errado (aprendizado supervisionado) ou dar-lhe um grande conjunto de dados e deixá-lo ficar selvagem (sem supervisão). Para identificar objetos, isso é direto, e, o que acontece com o comércio, eu olhei em volta para ver se existe algum programa de aprendizado de máquina que possa identificar linhas SR, mas sem proveito. Então eu decidi escrever o primeiro programa de aprendizagem de máquinas em python que identifica linhas de suporte e resistência em Python. Outro primeiro Hooray Mas como um algoritmo pode identificar essas áreas, Senhoras e senhores (e robôs), deixe-me apresentar-lhe o MeanShift. Um algoritmo não supervisionado que é usado principalmente para reconhecimento de imagem e é bastante trivial para configurar e executar (mas também muito lento). A ideia é que este algoritmo me permita dividir meus dados (tiques forex) em áreas e então eu posso usar as bordas como suporte e linhas de resistência. Ideia legal, mas funciona. Analisamos cerca de 12 milhões de pontos de dados do EURUSD em 2014 e alguns meses de 2015. As linhas de resistência são colocadas automaticamente por um algoritmo de aprendizado de máquina. O que é realmente legal (e assustador) é que o algoritmo praticamente o engana. NAILS é difícil. Isso fica realmente assustador quando vamos usar o algoritmo para identificar microestruturas e começar a curar. O sistema é capaz de processar qualquer tipo de dados temporários (ações, forex, ouro, seja o que for) e renderá um gráfico interativo html (como o gráfico acima) com seus dados e o SL gerado pela máquina. O código está aqui, então fique louco. Agora, passe o código. Depois de ter seu conjunto de dados, você precisa lê-los e limpá-los. Prepare-se para alguns pandas de magia. Nós deixamos cair os valores vazios (fins de semana) e depois reescrevemos os dados para castiçais 24 horas (ohcl). Isso torna muito mais fácil traçar. Os dados agrupados são os dados que inseriremos no algoritmo ml. Em seguida, preparamos os dados que vamos usar no algo. Na próxima publicação, bem, discuta como fazer isso funcionar ainda melhor, discuta alguns resultados muito interessantes (o algoritmo pode realmente prever sobre o futuro) e começar a usá-lo em nossa própria negociação. Se você quiser verificar o próximo artigo e ler mais sobre negociação e investimento usando algoritmos, inscreva-se no boletim informativo. Próxima próxima: Aprendizagem de Máquina Gone Wild - Usando o código Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. Atualização: o artigo de Aprendizagem de Máquina vai ser épico, mas demora tanto tempo para tornar o código apresentável. Comigo, coisas legais estão chegando (como você leu no boletim informativo) Disclaimer: ESTE NÃO É CONSULTA FISCAL. O que é realmente surpreendente é que a maioria dos pedidos no boletim são: Use ferramentas para auxiliar a Trading Machine Learning para otimizar negócios Impostos Os dois primeiros, eu posso entender. Todo mundo quer ser um comerciante melhor. Entendi. Mas impostos TAXES Este é o seu dia de sorte. Os impostos Forex são super fáceis. A sério. Por padrão (isto é chamado de Seção 988), todas as suas perdas vão compensar seus impostos de renda sem o limite de 3k por ano. Isso é muito melhor do que a negociação de ações onde as perdas compensam seus ganhos de capital. Mas o que acontece com os ganhos PORQUÊ USTED CUIDADO POR QUE A maioria dos comerciantes de Forex perdem dinheiro (eu chamo isso de pagar a taxa de matrícula) no primeiro ano (s), então você é melhor mantê-lo simples até que você tenha uma estratégia comprovada e consistente. Dito isto, se você realmente lucra, você é tributado no ganho de capital de curto prazo (às vezes até 40). As soluções para quando você começa a ganhar dinheiro são: Optar pela Seção 988 e obter tributado de acordo com a Seção 1256, onde 60 dos lucros são tributados como ganhos de capital de longo prazo e 40 como curto prazo (mas agora as perdas não podem compensar sua renda). Isso é muito bom quando você ganha dinheiro, muito ruim quando não. Comece uma LLC Para pessoas que apenas começaram a experimentar com Forex e algotrading, eu sempre sugiro que permaneçam com a Seção 988 (o padrão) e quando eles começam a ganhar algum dinheiro (consistentemente) ou querem ir em tempo integral, fale comigo :) Sério, há tantas coisas que você começará a fazer de forma diferente quando você passar do estágio do hobby para a segunda renda para o trabalho a tempo inteiro que não há motivos para otimizar demais isso. Próxima: Aprendizagem de Máquina Gone Wild Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. A última vez que conversamos sobre The for-looper backtester (como eu gosto de chamá-los). Agora é hora de ver algum código. Dizemos que temos algo assim: python para cada elemento de readhistoricaldata (): applystrategy () howourstrategydid () Sweet, vamos carregar nossa estratégia, carregar alguns dados históricos, executar nosso algoritmo e imprimir alguns resultados Eu prefiro ter minhas estratégias em um formato JSON que contenha o nome da estratégia e algumas especificações (como quantos pips para o stoploss ou takeprofit etc). Dessa forma, quando bem começar a usar um backtester baseado em eventos, podemos passar a estratégia através de um algoritmo de aprendizado de máquina e tentar otimizá-lo. A próxima linha está carregando nossos dados. Eu sei que as pessoas não gostam de pickle e existem outras maneiras de carregar dados (e vamos conversar sobre BColz em algum momento), mas por enquanto, apenas comigo. A próxima linha é auto-explicativa. Passamos os dados históricos para o nosso algo e recuperamos algumas estatísticas para imprimir. Vamos focar o algoritmo um pouco e podemos discutir planejar etc. em um ponto posterior. A magia do sistema de backtesting simples Prepare-se para se surpreender com a ridiculidade de fazer isso. Vazões curtas O que acontece com este tipo de teste é que 1. você provavelmente cometerá erros quando quiser usar exatamente o mesmo algoritmo 2. Você não poderá escrever uma estratégia muito complexa (pelo menos tão fácil) 3. Muito difícil de escalar (Em comparação com o evento) 4. Você precisa ter sua simulação e execução no mesmo idioma, MAS lembre-se de que esta é a maneira melhor e mais rápida de começar e descobrir como todas essas coisas funcionam. Próximamente, usando outros backtesters bem conhecidos em Python e adicionando gráficos para o nosso próprio. Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. O que é um bom sistema algotrading sem algumas estratégias básicas para implantar Abaixo há uma lista de estratégias que eu encontrei em linha (ou enviadas para mim por comerciantes que estão no boletim informativo). Planejo atualizar a lista enquanto continuo encontrando novas idéias. O conceito é que, à medida que continuamos a mergulhar cada vez mais no nosso sistema algotrading, vou mostrar-lhe como codificar e implantar essas estratégias. Eu sei com certeza que a maioria deles trabalha com mudanças mínimas. Pior cenário, você terá um sistema para testar seus pressupostos. Aqui está a lista (e envie-me qualquer outra estratégia que você acha que deve ser incluída): Começando a seguir, compartilhando e discutindo meu backtester mais simples (mas mais bem sucedido) Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no Boletim de Notícias. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. Construir um sistema de backtest é realmente muito fácil. Fácil de estragar, quero dizer. Embora existam toneladas de bibliotecas excelentes por aí (e passem por elas em algum momento), eu sempre gosto de fazer isso por conta própria para ajustá-la. De todos os sistemas de backtesting que eu vi, podemos assumir que existem duas categorias: The for-loopers The Event generators Hoje, bem, fale sobre for-loopers. O for-loopers é o meu tipo favorito de backtesters. Eles são triviais para escrever e super divertidos para se expandir, mas eles têm alguns fluxos vitais e, infelizmente, a maioria dos backtesters lá é for-loopers (ps: preciso encontrar um nome melhor para isso). Como funciona o looping Usando um loop for (como você pode ter adivinhado). É algo como isto: Direito muito simples É assim que funciona um sistema de backtesting, que executa uma estratégia de impulso: Então, qual é o problema Muito difícil de dimensionar (horizontalmente) Precisa de muito trabalho para manter sua estratégia de aplicação () trabalhando em backtesting e Produção Você precisa ter tudo na mesma linguagem de programação. Dive neles, um a um. Escalabilidade. Estava experimentando um par de semanas atrás com um algoritmo de escalada para otimizar uma das minhas estratégias. Ainda está em execução. Depois de duas semanas. E eu construo sistemas robustos para uma vida. Por que ainda está em execução Você pode usar o multiprocessamento. Discoteca. Consumidor produtor (usando ZeroMQ) ou apenas threads para acelerar isso, mas alguns problemas não são paralisantes embaraçosos (sim, esse é um termo real, e não uma das minhas palavras inventadas). A quantidade de trabalho para escalar um backtester como este (especialmente quando você quer fazer a mesma máquina aprendendo em cima dela) é enorme. Você pode fazê-lo, mas é o caminho errado. Produção e backtesting em sincronia Isto. As vezes que fui mordido por isso. Eu posso lembrar os negócios perdidos onde eu estava hm, por que eu entrei neste comércio ou meu antigo favorito de tempo POR QUE TRACKING STOP FOI APLICADO AGORA. Tempo da história: tive uma ideia para otimizar minha estratégia, para executar um backtester para ver o que aconteceria se eu pudesse colocar uma parada posterior depois que o comércio fosse rentável para garantir sempre lucros. Backtesting funcionou como um charme em um aumento de 13 de ganhos e a produção perdeu todo comércio. Eu descobri que depois do meu algo perdi 3400 em algumas horas (uma lição muito cara). Manter a estratégia de aplicação em sincronia é muito difícil e torna-se quase impossível quando você deseja fazê-lo de forma distribuída. E você não quer ter duas versões de sua estratégia que sejam quase idênticas. A menos que você tenha 3400 de sobra. Usando diferentes idiomas, adoro Python. E Erlang. E Clojure. E J. E C. E R. E Ruby (na verdade eu odeio Ruby). Eu quero poder aproveitar a força de outros idiomas no meu sistema. Quero experimentar estratégias em R onde existem bibliotecas muito bem testadas e há uma enorme comunidade por trás disso. Eu quero ter o Erlang para escalar meu código e C para crunch dados. Se você quer ser bem sucedido (não só na negociação), você precisa ser capaz de usar todos os recursos disponíveis sem preconceitos. Aprendi muitas coisas de sair com desenvolvedores R sobre como você pode delta hedge bonds e visualizá-los ou por que razão Sharpe pode ser uma mentira. Cada idioma tem uma multidão diferente e você quer que muitas pessoas despejam idéias em seu sistema. Se você tentar aplicar a estratégia de aplicação em linguagem diferente, então, boa sorte com (2). Você está convencido agora Bem, eu não estou tentando convencê-lo como for-loopers é uma ótima maneira de executar seus testes iniciais. É como eu comecei e, para muitas estratégias, não as envio para o pipeline. Uma maneira melhor (para que você possa dormir à noite) são os geradores de eventos. Próxima, compartilhando e discutindo meu backtester mais simples (mas mais bem sucedido) Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. Antes de executar qualquer sistema algotrading ao vivo, é uma boa prática fazer backtest (isto significa executar uma simulação) nossos algoritmos. Tenha em mente que isso não significa que, se o seu sistema está matando nos últimos 5 anos, isso fará um lucro, mas é um bom indicador de que você pode estar em alguma coisa. Há quatro coisas que precisamos levar em consideração quando fazemos o backtesting: a qualidade dos dados. Como carregá-los de forma eficiente. Como construir o nosso sistema de teste de resposta. Tente fazer o nosso teste e o nosso sistema ao vivo compartilhar o código que pudermos hoje. , Vamos nos concentrar em (1) e (2). Para dados de Forex, estou usando GainCapital. Os seus dados estão sob a forma de carraças. Para uma fonte gratuita é bom o suficiente. Eu usei o serviço de dados históricos da Oandas, mas parece que eles o moveram para um produto premium. Que pena. Certifique-se de usar os dados GainCapitals apenas para experimentação. Para qualquer outro tipo de dados históricos pagos (ETFs, ações, opções stc), estou usando eoddata (eles também têm alguns dados históricos da forex, mas eu não os usei). Permite baixar os dados por uma semana e experimentar um pouco. O link para os dados é ratedata. gaincapital20151120NovemberEURUSDWeek1.zip para a primeira semana de novembro de 2015. Primeiro, precisamos descompactar o arquivo. Python gtunzip EURUSDWeek1.zip e você receberá um arquivo de 25MB chamado EURUSDWeek1.csv. Estes são dados por uma semana por um par de moedas. Você pode imaginar a quantidade de dados que você precisa processar para todas as moedas nos últimos cinco anos (sugestão: muito). Mas não se preocupe, vamos otimizar isso. Por enquanto, vamos abrir o arquivo e inspecionar. As coisas que nos interessam são RateDateTime, RateBid e RateAsk. Como você pode entender cada linha tem um carimbo de data / hora e quanto custou o preço para comprar ou vender. Os formatos baixados por outros serviços são bastante semelhantes. Há muitas maneiras de carregar estes dados no Python, mas o mais preferido quando se trata de dados cortando e manipulando é o uso de Pandas. Nós sempre podemos usar a biblioteca csv para carregar dados (e pode ser mais rápido), mas precisamos fazer algumas otimizações e processar primeiro que, como você verá, é muito fácil com os pandas. Outra ótima ferramenta para carregar TONELADAS de GBs de forma bastante eficiente e muito rápida é usar o Bcolz. Coberto em uma publicação muito posterior (ou você pode ler uma pré-visualização se você se inscreveu no boletim informativo. Manipulando dados usando Pandas Os dados que baixamos estão em tiques. A menos que construamos um algoritmo UHFT (ultra-alta freqüência), é Muito mais eficiente (memória, armazenamento e processamento) para agrupar esses carrapatos em segundos (ou minutos ou horas, dependendo da sua estratégia). Isso reduzirá a nossa escala de download de 25MB para apenas 35KB, o que se traduz em HONER desempenho e benefícios de memória. Permite-se agrupar todos esses dados em 15 minutos. Como expirar o tempo de se apaixonar pelo resmplemento. O remodelado do conjunto de dados se parece com isso: Isto é chamado barra de OHLC (Open High Low Close) por cada 15 minutos. Você pode ver agora que os carrapatos são Agrupados em segmentos de 15 minutos e você tem o ponto mais alto e mais baixo que o preço alcançado durante esses 15 minutos e também o openclose para comprar e vender. Pure gold Não só você tem todas as informações que precisa, mas agora é extremamente rápido para carregá-lo . Você apenas Precisa salvar os dados: e então você pode reutilizar este arquivo de 35kb. Podemos escrever um algoritmo de momentum simples que verifique se houve um movimento enorme nos últimos 15 minutos e, se fosse esse o caso, vamos comprar. Vamos mergulhar nisso em uma postagem posterior. Você pode ver o código como sempre no github. Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. Antes de construir qualquer sistema algotrading, você precisa saber como negociar manualmente. O que realmente significa é que você precisa perder dinheiro por conta própria antes de culpar a máquina. Tão simples como isso. Então, vamos conversar sobre Foreign Exchange ou Forex, como os garotos gostosos chamam isso. Em primeiro lugar, por que nós escolhemos o Forex para algotrading Por que não nos tornamos comerciantes de milionários como todos os outros? Por que não apenas comprar Tesla, Amazon, Google, Facebook, Twitter e esperar o melhor (PS: leia o outro legal no final de Este post do blog antes de comprar quaisquer ações). Resposta fácil. Você não pode ganhar (ou perder) o dinheiro rapidamente o suficiente comprando ações. Forex tem um bom (ou terrível, dependendo de qual lado da moeda você é) coisa chamada alavancagem. A vantagem pode ser 1:10, 1:50, 1: 100, 1: 200, 1: 1000, dependendo de como você é suicídio ou de quão esboçado seu corretor (não se preocupe, fale sobre os corretores na próxima publicação). Vamos ver um exemplo. Queremos fazer um comércio de 1k. O lógico é que, para comprar algo que custa 1k, você precisa ter na sua conta 1k, certo Nope. Você sempre pode obter um empréstimo. Oooooooor: Insira alavancagem. Se tivermos uma alavanca de 1: 100, podemos colocar um comércio e controlar 1k com apenas 10. Para aqueles que falharam em matemática (não se envergonhem, eu sou um de vocês), 10 x 100 (alavancagem) 1.000. Isso significa que você pode trocar grande e ganhar grande. Na verdade, 100 vezes mais grande. A captura é que você pode realmente ir 100 vezes mais pequeno. Temos outro exemplo. Acabei de receber meu bônus (1k) e eu quero jogar no Forex. Sem alavancagem, posso comprar 1.000 unidades de Forex que custam 1 (por sinal, não existem unidades Forex, mas também falam sobre isso mais tarde). Quantas unidades posso comprar com alavanca de 1:50 Se você respondeu se 100.000, você fez algo errado. A resposta é 50,000 (1.000 x 50 de alavancagem). Lá está você. Uma das razões pelas quais estamos fazendo o Forex é porque você pode perder a vitória grande. Bem, volte a alavancar quando começamos a fazer negócios. Existem três razões mais excitantes, na verdade, que são ainda mais impressionantes (ousam dizer o que é demais). Forex (quase) nunca dorme. Os mercados estão abertos TODOS OS DIAS, seis dias por semana. Para ser mais exato, não há um mercado, mas quatro e eles se sobrepõem, fornecendo o efeito durante todo o dia. Forex é muito volátil e há toneladas de dinheiro movendo-se (mais de 5 trilhões por dia). Crazy right Nenhuma taxa em negociações. Você não paga 10 por comércio, como você está fazendo com ações. Aqui você paga o spread que é apenas uma fração de um centavo (novamente, fale sobre isso em outro post). Todos esses motivos (alavancagem, dia inteiro, volatilidade, taxas) tornam a Forex a plataforma mais emocionante para construir e implantar seus algoritmos. Próximamente, corretores de Forex. Como não ser enganado antes mesmo de escrever uma linha de código. Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo. Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque você seguiu os conselhos de negociação ou implantou este sistema na produção, você não pode culpar este blog aleatório (andor me). Aproveite a seu próprio risco. É isso aí. Toda semana, recebo pelo menos 10 DMs no Twitter perguntando sobre como experimentar algotrading, Forex e análise de portfólio e Ive decidiu que é hora de fazer algo sobre isso. Atualização: Encontre as postagens aqui. Então, estou planejando cobrir os conceitos básicos de como construir sua própria plataforma de negociação, escrever suas próprias estratégias e ir de férias enquanto os elétrons estão fazendo dinheiro. Ou reduzindo a sua conta. De qualquer forma, vai ser divertido. A maioria dos exemplos estarão em Python, embora possa haver partes em Erlang e tentarei mantê-lo tão fácil quanto possível. Vamos falar agora sobre o aspecto do produto final. Estamos construindo um sistema onde você será capaz de: Simular sua estratégia (isto é chamado backtesting) Execute sua estratégia sem supervisão Alerta você via smsemail para trocas e erros Seja escalável e trivial para implantar novas atualizações Ser capaz de funcionar mesmo em sua casa (De um raspberrypi por exemplo) Eu suponho que este será um total de 20 capítulos, dar ou receber. Esse é um sistema semelhante ao que estou executando no ano passado e inclui uma UI, alertas sms, pipeline backtesting, entrega contínua e todas as coisas legais que nós gostamos de gostar. Todo o código será no github e se tudo correr bem, vou terminar em um livro para todos desfrutarem. Eu tenho como três capítulos quase terminados, então, se você quer acesso antecipado, basta me fazer um ping-jonromero. Estas são todas as postagens que foram escritas até agora. Posso adicionar mensagens de remanescentes à medida que recebo mais comentários. I love Forex because: It has enormous amount of data (volume) These data are coming extremely fast (velocity) You need to consider multiple resources when you are building your strategy (variety) My definition of BigData is that you have volume-velocity-variety information and you need to react on it right now (realtime). It is one of the main reasons why I dont like Hadoop (ok, the other is because I dont like Java:). Forex is the best place if you want to start playing with BigData. You have (at least) one data channel, hitting you with data, you need to keep running algorithms on this stream (sometimes doing correlations up to a week) and you need be able to respond very fast. If a garbage collector kicks in or if you need to grab data from a database (even if this DB is in memory - long live Redis) then you will have issues. Thats the reason why most of the trading databases have all their data in the same memory space and have custom languages doing the analysis (like Kdb ). That was the inspiration for LDB. Millions of data sources (mobile phones), hitting your database and calculatingupdating for each one of the requests thousands of counters and running all sorts of algorithms. Per request. In realtime. But lets face it. The vast majority of userscompanies will never have millions (or even thousands) of requests hitting their servers. Thats why I started a new opensource database with codename: HybrisDB. HDB has the following characteristics: Simple to install (no moving parts) Simple to use (pre-defined dashboards) It will be perfect for the 99 of userscompanies but not for the 1 like Facebook or Google (sacrificing Enterprise features) The concept is to have a dashboard, to watch indicators going onoff and then (maybe) connect to a system to place an order. Sounds like an interesting cool hobby project and I still try to decide between using Erlang or Clojure for this. Ping me on twitter if you have any ideas One of my new years resolution was study one of your habits each month and I decided to focus on what activities I am spending my online time. So, I installed RescueTime which is a very cool app that sits on the background and creates reports about which apps and sites you are using the most. And no, it is not sending that info to NSA (you are not that important). Even though I spent most of my time working, writing and communicating, I also spent around 2 hours on average on Facebook (gasp). No biggie. What I hated was that for the majority of times I was scrollingrefreshing for new updates. Like opening your refrigirator every two minutes even though you know it is empty Damn you habits So, spending 2 hours every day (sometimes more) on Facebook, means 60 hours per month or 7 working days . 7 freaking working days each month. 7 days, each day with 8 full hours, to sleep, go out, exercise, write a book, learn something new. What I did was installing StayFocused. a free plugin for your browser that doesnt let you spent more than 10 minutes on specific sites everyday. E adivinha. The I am just using facebook to communicate is such a lame excuse as I had no problem communicating with my friends, even by using facebook for 10 minutes. Now, give it a shot and tell me what you built in your spare timeTechnical Analysis with R In this post well take a look at how a trader could use R to calculate some basic Technical Analysis indicators. R is a free open-source statistical analysis environment and programming language. It is available for Windows, Mac OS, and Linux operating systems. Installation is easy and quick. For download and installation instructions go to: cran. r-project. org . When developing a trading strategy its useful to be able to analyze and visualize data and to be able to test your trade-generation rules and their variations and models quickly and with minimum turn-around. While many trading platforms, such as Interactive Brokers, etc. provide access to historical data via API or straight file download 8211 analyzing that data and prototyping trading strategies often requires writing hundreds of lines of code in programming languages such as Java or C, or writing cumbersome difficult-to-test formulas in Excel. This requires a significant time investment, regardless of how experience programmer you are. By contrast, a higher-level programming language such as R or Matlab, coupled with their interactive programming environments, allow their users to slice, dice, and analyze data within a fraction of time it takes with C, C, or Java. The amount of code required to develop a trading strategy in R is typically an order of magnitude less as well. In this example well use a simple comma-separate file containing open, high, low, and close price columns (a. k.a. OHLC), along with volume and timestamp values for SPY ETF. In this post well demonstrate how to use a free R library to calculate Simple Moving Average (SMA), Exponential Moving Average (EMA), Bollinger Bands (BBands), RSI, and MACD technical analysis indicators. We will append calculated indicators as new columns to our input file so that it can be used for further analysis or trading strategy prototyping in Excel, R, or any other CSV-friendly software package of your choice. Installing Technical Analysis library for R 1. To calculate Technical Analysis with R we will be using a free open-source library called 8220TTR8221 (Technical Trading Rules). This step includes instructions for installing TTR library, assuming you already have installed R on your computer. This steps only needs to be performed once per R installation on a computer. To install the library on your computer: 1) Start R environment on your computer, then in the menu select: Packages 038 Data - Package Installer 2) In Package Installer type 8220TTR8221 in the Package Search field, and click 8220Get List8221 button. 3) Select package 8220TTR8221 and click 8220Install Selected8221. Loading Historical Data (Input) For demo purposes we will use daily historical prices for SPY ETF from September 2013 through May 2014. Click here to download the data file. This input file for this example was generated using IB Historical Data Downloader . 2. We are going to start off by opening R shell and loading TTR library, which is a free R extension that contains functions for calculating some of the most common indicators. 3. The next step is to import our data file with historical prices into R environment. We will load data from sample CSV file into R environment and store it a data frame, which an R variable type for storing data in table format in memory. To display first few rows of the data table: This by default shows first 6 rows of data along with column names (table header). To see how many rows you have in the data table: This shows we have 187 data records in our SPY data file, for 187 trading days between Sep 3, 2013 8211 May 31, 2014. We can also list table column names using colnames functions as follows: Moving Averages 4. Lets now calculate 20-day Simple Moving Average (SMA) of the CLOSE price column using TTR librarys R function SMA: Now, lets see first 50 values of the sma20 array: Here we used function SMA from TTR library we loaded above, telling it to calculate 20-day average (value of parameter n), of the CLOSE column from data frame data. The function returns an array of SMA values and stores it in a new variable called sma20. You can bring up the help with a detailed description of the function and its parameters using. followed by the function name, as below. It is always a good idea to read help pages for the functions you are using, since they will list all optional parameters that you can use to tweak the output. Also, many functions have variations or related functions, which could be helpful in various circumstances and will be listed on the help page. 5. Calculating Exponential Moving Average is similarly easy, just use a different function, this time EMA(). Notice that we calculate EMA for 14-period length Bollinger Bands 6. To calculate Bollinger Bands indicator we use the BBands function. There is a number of optional parameters that it takes, so well provide several examples. In the example below we call BBands passing it data frame data with a query that specifies that we want to use values from CLOSE column, just as weve been doing above to SMA and EMA calculations above. Second parameter sd takes the number of standard deviations for upper and lower bands. Since we dont pass value for n 8211 BBands uses 20-period moving average by default. The output contains several columns: dn for lower band, mavg for the moving average, up for the upper band, and pctB, which quantifies a security8217s price relative to the upper and lower Bollinger Band, a detailed description of it can be found here . B equals 1 when price is at the upper band B equals 0 when price is at the lower band B is above 1 when price is above the upper band B is below 0 when price is below the lower band B is above .50 when price is above the middle band (20-day SMA) B is below .50 when price is below the middle band (20-day SMA) bb20 BBands(data, sd2.0) 6.1 Now we8217d like to create a new data frame containing all input data from the 8216data8217 frame, plus Bollinger Bands data we just calculated. The data. frame() function takes any number of data frames and joins them row-wise into a new data frame, so that elements from corresponding rows are joined together in the result. 6.2 Bollinger Bands plot: plot(dataPlusBBDATETIME, allDataCLOSE) lines(dataPlusBBCLOSE, col 8216red8217) lines(dataPlusBBup, col 8216purple8217) lines(dataPlusBBdn, col 8216brown8217) lines(dataPlusBBmavg, col 8216blue8217) 6.3 Alternatively, we can specify explicitly what type of moving average should be used as the basis for Bollinger Bands using function parameter maType, which simply take a moving average function name. Refer to SMA help page to see different types of moving averages supported in TTR library. For example, if youd like to calculate an EMA Bollinger Bands, you can pass EMA to maType. Notice that in this example we are overriding default length parameter for moving average, using 14-period average this time. bbEMA BBands(data, sd2.0, n14, maTypeEMA) RSI 8211 Relative Strength Indicator 7. RSI. To calculate RSI we use the RSI() function. You can use RSI command in R shell to get details for the function parameters. Basically, its very similar to the functions we used above to generate moving averages. It has two required parameters: time series (such as CLOSE column from our data data frame, and n integer value for the length of the RSI indicator. rsi14 RSI(data, n14) Here the first parameter to RSI function is: data, which is a statement that says take column named CLOSE from the data table, and return it as a list of values, and the second parameter is n14, where the parameter name is n, and the value 14 indicates that we want to calculate 14-day RSI values on the close prices. 8. The MACD function takes several arguments: input data series (such as CLOSE price) number of periods for fast moving average number of periods for slow moving average number of periods for the signal line You can also optionally specify moving average function you want to use for MACD moving averages. See a screenshot of the help page below (you can also use MACD command in R shell to open the help page yourself): Lets calculate a standard (12,26,9) MACD indicator using this function. Well be using sta ndard simple moving averages, so, well specify SMA function in maType parameter: macd MACD(data, nFast12, nSlow26, nSig9, maTypeSMA) Join All Data Together 9. Now, we join all of the indicators calculated above with the original input data into a single data frame: The data. frame() function takes any number of data frames and joins them row-wise, so that elements from corresponding rows are glued together in the resulting data. frame allData. Write to text file And, finally, we write contents of allData data frame to a comma-separated values file. We use write. table() function, which contains a large number of optional parameters. A detailed help page is available using command write. table in R shell. write. table(allData, filespywithindicators. csv, na, sep,, row. names FALSE) When we call write. table() function we pass the following arguments: allData 8211 this is simply a reference to the data frame containing data to be written to the output file. file 8230 8211 this is the path and name of the file we are creating. na 8211 makes sure that cells in the data frame that contain R value NA will contain empty values in the output file. Some cells have NA for rows where there were not enough data to generate a corresponding indicator value (for example first 19 rows for 20-day SMA). sep , 8211 sets column separator to comma (hence comma-separated values file). To create a tab-separated file (really a preferred format for serious software systems) 8211 use: sep t. row. names FALSE 8211 it is important to set this value, otherwise first column in the output file will contain row numbers. The resulting file is available here. Right-click and select 8220Save Linked File As8221 Downloaded file can be opened in Excel or text editor. 10. There are more functions and features available in the TTR library. You can find out more by bringing up TTRs help page: CONCLUSION R provides a convenient and versatile environment for data analysis and calculations. In addition to thousands of free open-source statistical, mathematical libraries and algorithms, R contains a great number of functions and libraries for reading and writing data tofrom files, databases, URLs, Web Services, etc That, combined with the conciseness of the language, is a powerful combination that can help traders save precious time. Traders can significantly cut down the time required to prototype and backtest trading strategies using R. There are also methods to integrate R with mainstream programming languages such as Java and C. Don8217t hesitate to post a comment or send as a message via Contact Us form if you have any questions regarding this material. Finally, we8217d like to mention a couple of books that have been very helpful in our development efforts. The first book 8211 8220Quantitative Trading with R8221 is a great mix of financial data analysis insights and application of R to backtesting, data exploration, and analysis. It has a number of great code examples and goes over a number of useful R packages. This is a good intro-to-intermediate level book for people who would like to build and backtest their own trading strategies. The second book 8211 8220Mastering R for Quantitative Finance8221 8211 is a real gem. It contains more advanced information for traders with a good understanding of derivatives instruments and stronger mathematical background. We found that this book is a great follow up for the 8220Quantitative Trading with R8221. In addition to great R code samples and packages it contains overviews of a number of advanced (and practical) quantitative finance models and algorithms, and lets you get your feet wet with R code straight away. Trading Geeks provides consulting services in trading strategy and software development for independent traders, partnerships, and hedge funds. Please inquire for more information or a free quote for your project via Contact Us form on the right.

Comments