Tuesday, 24 April 2018

Forex bot python


Negociação com Python.


Sábado, 20 de maio de 2017.


Yahoo está morto, viva o Yahoo!


Nota: os dados fornecidos parecem ser ajustados para divisões, mas não para dividendos.


Sábado, 20 de fevereiro de 2016.


Uma borda estatística simples no SPY.


Ocorreu-me que na maioria das vezes que há muita conversa na mídia sobre a queda do mercado (depois de grandes perdas ao longo de vários dias de intervalo), uma recuperação bastante significativa às vezes acontece.


No passado cometi alguns erros ao fechar minhas posições para reduzir as perdas, apenas para perder uma recuperação nos dias seguintes.


Após um período de perdas consecutivas, muitos comerciantes liquidarão suas posições com medo de perdas ainda maiores. Muito desse comportamento é governado pelo medo, e não pelo risco calculado. Comerciantes mais espertos entram então para as barganhas.


Depois de 3 ou mais perdas consectivas, vá muito. Saia no próximo feche.


Isso não parece nada mau! Observando as taxas de sharpe, a estratégia obtém uma descida de 2,2 versus 0,44 para os B & amp; Na verdade, isso é muito bom! (não fique muito empolgado, pois não contei com custos de comissão, escorregões, etc.).


Embora a estratégia acima não seja algo que eu gostaria de negociar simplesmente por causa do longo período de tempo, a própria teoria provoca pensamentos adicionais que poderiam produzir algo útil. Se o mesmo princípio se aplica aos dados intradiários, uma forma de estratégia de escalpelamento poderia ser construída. No exemplo acima, simplifiquei um pouco o mundo contando apenas o * número * de dias de inatividade, sem prestar atenção à profundidade do rebaixamento. Além disso, a saída de posição é apenas um 'próximo dia de fechamento' básico. Há muito a melhorar, mas a essência na minha opinião é esta:


Segunda-feira, 17 de novembro de 2014.


Negociando o VXX com a previsão de vizinhos mais próximos.


Minha definição desses dois é:


prêmio de volatilidade = VIX-realizadoVol delta (inclinação da estrutura de prazo) = VIX-VXV.


Combinar tanto o prêmio quanto o delta em um modelo foi um desafio para mim, mas eu sempre quis fazer uma aproximação estatística. Em essência, para uma combinação de (delta, premium), gostaria de encontrar todos os valores históricos que estão mais próximos dos valores atuais e fazer uma estimativa dos retornos futuros com base neles. Algumas vezes comecei a escrever meus próprios algoritmos de interpolação de vizinhos mais próximos, mas toda vez tive que desistir. até me deparar com a regressão dos vizinhos mais próximos. Isso me permitiu construir rapidamente um preditor baseado em duas entradas e os resultados são tão bons que estou um pouco preocupado por ter cometido um erro em algum lugar.


criar um conjunto de dados de [delta, premium] - & gt; [Retorno do próximo dia VXX] (na amostra) cria um preditor do vizinho mais próximo com base no conjunto de dados acima da estratégia de negociação (fora da amostra) com as regras: go long if predicted return & gt; 0 vai curto se o retorno previsto & lt; 0.


Nos dois últimos gráficos, a estratégia parece realizar o mesmo dentro e fora da amostra. Relação de Sharpe é em torno de 2,3.


Estou muito satisfeito com os resultados e tenho a sensação de que só estive a arranhar a superfície do que é possível com esta técnica.


Quarta-feira, 16 de julho de 2014.


Módulo de backtesting simples.


Minha busca por uma ferramenta de backtesting ideal (minha definição de 'ideal' é descrita nos posts anteriores de 'dilemas de backtesting') não resultou em algo que eu pudesse usar imediatamente. No entanto, rever as opções disponíveis me ajudou a entender melhor o que eu realmente quero. Das opções que eu olhei, o pybacktest foi o que eu mais gostei por causa de sua simplicidade e velocidade. Depois de passar pelo código-fonte, tenho algumas ideias para simplificar e tornar um pouco mais elegante. A partir daí, foi apenas um pequeno passo para escrever meu próprio backtester, que agora está disponível na biblioteca TradingWithPython.


encontrar entrada e saídas - & gt; calcular pnl e fazer gráficos com backtester - & gt; dados de estratégia pós-processo.


Sábado, 7 de junho de 2014.


Aumentando o desempenho com o Cython.


5k amostras como dados de teste. Aí vem a versão original da minha função drawdown (como agora está implementada na biblioteca TradingWithPython)


Hmm 1,2 segundos não é muito rápido para uma função tão simples. Há algumas coisas aqui que podem ser uma ótima alternativa para o desempenho, como uma lista * highwatermark * que está sendo anexada em cada iteração de loop. Acessar Series por seu índice também deve envolver algum processamento que não seja estritamente necessário. Vamos dar uma olhada no que acontece quando esta função é reescrita para trabalhar com dados numpy.


Bem, isso é muito mais rápido que a função original, aproximadamente 40x de aumento de velocidade. Ainda há muito espaço para melhoria, movendo-se para código compilado com cython Agora eu reescrever a função dd de cima, mas usando dicas de otimização que eu encontrei no tutorial cython. Observe que esta é minha primeira tentativa de otimização de funções com o Cython.


Uau, esta versão corre em 122 micro segundos, tornando-a dez mil vezes mais rápida que a minha versão original! Devo dizer que estou muito impressionado com o que as equipes Cython e IPython conseguiram! A velocidade em comparação com a facilidade de uso é simplesmente incrível!


P. S. Eu costumava fazer otimizações de código no Matlab usando encapsulamento C e. mex puro, era tudo apenas uma dor na bunda em comparação com isso.


Terça-feira, 27 de maio de 2014.


Dilemas de backtesting: revisão de pyalgotrade.


Primeira impressão: ativamente desenvolvida, documentação muito boa, mais do que feautures suficiente (indicadores de TA, otimizadores etc). Parece bom, então eu continuei com a instalação que também correu bem.


O tutorial parece estar um pouco desatualizado, já que o primeiro comando yahoofinance. get_daily_csv () lança um erro sobre a função desconhecida. Não se preocupe, a documentação está atualizada e acho que a função ausente agora é renomeada para yahoofinance. download_daily_bars (símbolo, ano, csvFile). O problema é que essa função só faz o download de dados por um ano, em vez de tudo, desde aquele ano até a data atual. Tão bem inútil.


Depois que eu mesmo baixei os dados e os salvei no csv, eu precisei ajustar os nomes das colunas, porque aparentemente o pyalgotrade espera que Date, Adj Close, Close, High, Low, Open e Volume estejam no cabeçalho. Isso é tudo um pequeno problema.


Seguindo para o teste de desempenho em uma estratégia de SMA que é fornecida no tutorial. Meu conjunto de dados consiste em 5370 dias de SPY:


Isso é realmente muito bom para um framework baseado em eventos.


Mas tentei pesquisar a documentação para obter a funcionalidade necessária para fazer o backtest de spreads e vários portfólios de ativos e simplesmente não consegui encontrar nenhum. Então eu tentei encontrar uma maneira de alimentar pandas DataFrame como uma entrada para uma estratégia e acontece de não ser possível, o que é novamente uma grande decepção. Eu não o afirmei como um requisito no post anterior, mas agora chego à conclusão de que o suporte a pandas é obrigatório para qualquer framework que trabalhe com dados de séries temporais. Pandas foi uma razão para eu mudar de Matlab para Python e eu nunca mais quero voltar.


Conclusão A pyalgotrade não cumpre minha exigência de flexibilidade. Parece que foi projetado com o TA clássico em mente e negociação de instrumento único. Eu não vejo isso como uma boa ferramenta para estratégias de backtesting que envolvem vários ativos, hedge etc.


Segunda-feira, 26 de maio de 2014.


Dilemas de backtesting.


Seja boa aproximação do mundo real. Este é obviamente o requisito mais importante. Permitir flexibilidade ilimitada: o ferramental não deve ficar no caminho de testar ideias prontas para uso. Tudo o que pode ser quantificado deve ser utilizável. Seja fácil de implementar & amp; manter. É tudo sobre produtividade e poder testar muitas ideias para encontrar uma que funcione. Permitir varreduras de parâmetros, testes de avanço e otimizações. Isso é necessário para investigar o desempenho e a estabilidade da estratégia, dependendo dos parâmetros da estratégia. O problema em satisfazer todos os requisitos acima é que os números 2 e 3 são conflitantes. Não há ferramenta que possa fazer tudo sem o custo de alta complexidade (= baixa manutenção). Normalmente, uma ferramenta point-and-click de terceiros limitará severamente a liberdade de teste com sinais personalizados e portfólios ímpares, enquanto no outro extremo do espectro uma solução diy personalizada precisará de dezenas ou mais horas para ser implementada, com grandes chances de terminando com código desordenado e ilegível. Então, na tentativa de combinar o melhor dos dois mundos, vamos começar de alguma forma no meio: use uma estrutura de backtesting existente e adapte-a ao nosso gosto.


Nos posts a seguir, eu vou ver três candidatos possíveis que encontrei:


Zipline é amplamente conhecida e é o motor por trás do PyPlotTub Quantopian parece ser ativamente desenvolvido e o pybacktest bem documentado é um framework baseado em vetores leve, que pode ser interessante por causa de sua simplicidade e desempenho. Eu vou estar olhando para a adequação dessas ferramentas comparando-as com uma estratégia de negociação hipotética. Se nenhuma dessas opções se encaixa nos meus requisitos, terei que decidir se quero investir na criação do meu próprio framework (pelo menos, olhando as opções disponíveis, eu sei o que não funciona) ou manter o código personalizado para cada uma delas. estratégia.


O primeiro para a avaliação é Zipline.


Minha primeira impressão de Zipline e Quantopian é positiva. O Zipline é apoiado por uma equipe de desenvolvedores e é testado em produção, então a qualidade (bugs) deve ser ótima. Existe uma boa documentação no site e um exemplo de caderno no github.


Para pegar um jeito, baixei o caderno do exame e comecei a brincar com ele. Para minha decepção, rapidamente me deparei com o primeiro exemplo do Algoritmo de Zipline Mais Simples: Compre a Apple. O conjunto de dados tem apenas 3028 dias, mas a execução deste exemplo demorou uma eternidade. Aqui está o que eu medi:


Eu não esperava um desempenho estelar, já que o zipline é um backtester baseado em eventos, mas quase um minuto para 3000 samples é muito ruim. Esse tipo de desempenho seria proibitivo para qualquer tipo de varredura ou otimização. Outro problema surgiria quando se trabalha com conjuntos de dados maiores, como dados intradiários ou vários títulos, que podem conter facilmente centenas de milhares de amostras.


Infelizmente, eu terei que eliminar o Zipline da lista de backtesters utilizáveis, já que ele não atende ao meu requisito # 4 por uma margem de gordura.


No post seguinte, eu vou estar olhando para PyAlgotrade.


Nota: Meu sistema atual é um par de anos, rodando um AMD Athlon II X2 @ 2800MHZ com 3GB de RAM. Com backtesting baseado em vetor, eu estou acostumado a calcular tempos de menos de um segundo para um único backtest e um ou dois minutos para uma varredura de parâmetro. Um teste básico de caminhada com 10 passos e uma varredura de parâmetros para 20x20 resultaria em uma convulsiva 66 horas com tirolesa. Eu não sou tão paciente assim.


Forex Trading Diary # 1 - Negociação Forex Automatizada com a API OANDA.


Forex Trading Diary # 1 - Negociação Forex Automatizada com a API OANDA.


Eu mencionei anteriormente no artigo QuantStart: 2014 In Review que eu estaria gastando parte de 2015 escrevendo sobre negociação forex automatizada.


Como eu geralmente faço pesquisas em bolsas e mercados futuros, achei que seria divertido (e educativo!) Escrever sobre minhas experiências de entrar no mercado forex no estilo de um diário. Cada "entrada de diário" tentará construir sobre todos aqueles antes, mas também deve ser relativamente independente.


Nesta primeira entrada do diário estarei descrevendo como configurar uma nova conta de corretagem prática com a OANDA, além de como criar um mecanismo básico de negociação orientado a eventos multithreaded que pode executar negociações automaticamente em uma configuração prática e ao vivo.


No ano passado, passamos muito tempo examinando o backtester orientado a eventos, principalmente para ações e ETFs. O que eu apresento abaixo é voltado para o forex e pode ser usado para negociação de papel ou negociação ao vivo.


Eu escrevi todas as instruções a seguir para o Ubuntu 14.04, mas elas devem ser facilmente traduzidas para o Windows ou Mac OS X, usando uma distribuição Python como o Anaconda. A única biblioteca adicional usada para o mecanismo de negociação Python é a biblioteca de solicitações, necessária para a comunicação HTTP com a API OANDA.


Uma vez que este é o primeiro post diretamente sobre a troca de moeda estrangeira, e o código apresentado abaixo pode ser diretamente adaptado para um ambiente de negociação ao vivo, eu gostaria de apresentar as seguintes declarações de exoneração de responsabilidade:


Isenção de responsabilidade: Negociar divisas na margem implica um elevado nível de risco e pode não ser adequado para todos os investidores. O desempenho passado não é indicativo de resultados futuros. O alto grau de alavancagem pode funcionar contra você e também para você. Antes de decidir investir em moeda estrangeira, você deve considerar cuidadosamente seus objetivos de investimento, nível de experiência e apetite de risco. Existe a possibilidade de você sustentar uma perda de parte ou de todo o seu investimento inicial e, portanto, não deve investir dinheiro que não pode perder. Você deve estar ciente de todos os riscos associados à negociação em moeda estrangeira e procurar orientação de um consultor financeiro independente, caso tenha alguma dúvida.


Este software é fornecido "como está" e quaisquer garantias expressas ou implícitas, incluindo, mas não se limitando a, garantias implícitas de comercialização e adequação a uma finalidade específica são renunciadas. Em nenhum caso os regentes ou contribuintes serão responsáveis ​​por quaisquer danos diretos, indiretos, incidentais, especiais, exemplares ou consequentes (incluindo, mas não se limitando a, aquisição de bens ou serviços substitutos, perda de uso, dados ou lucros; ou interrupção de negócios), no entanto causada e em qualquer teoria de responsabilidade, seja em contrato, responsabilidade estrita, ou delito (incluindo negligência ou de outra forma) decorrentes de qualquer uso do software, mesmo se avisado da possibilidade de tal dano.


Configurando uma conta com o OANDA.


A primeira pergunta que vem à mente é "Por que escolher o OANDA?". Simplificando, depois de pesquisar um pouco sobre forex brokers que tinham APIs, vi que a OANDA havia lançado recentemente uma API REST adequada que poderia ser facilmente comunicada de praticamente qualquer idioma de uma maneira extremamente simples. Depois de ler a documentação da API do desenvolvedor, decidi tentar, pelo menos com uma conta prática.


Para ser claro - não tenho nenhum relacionamento anterior ou existente com a OANDA e estou apenas fornecendo esta recomendação com base na minha experiência limitada de brincar com sua API prática e algum uso breve (para download de dados de mercado) enquanto empregado em um fundo anteriormente. Se alguém se deparar com quaisquer outros corretores de forex que também tenham uma API similarmente moderna, então eu ficaria feliz em dar-lhes uma aparência também.


Antes de utilizar a API, é necessário se inscrever para uma conta prática. Para fazer isso, vá para o link de inscrição. Você verá a seguinte tela:


Você poderá então entrar com suas credenciais de login. Certifique-se de selecionar a guia "fxTradePractice" na tela de login:


Quando chegar, você precisará anotar seu ID da conta. Ele está listado abaixo do cabeçalho "Meus Fundos", ao lado de "Primário". O meu é um número de 7 dígitos. Além disso, você também precisará gerar um token de API pessoal. Para fazer isso, clique em "Gerenciar acesso à API" abaixo da guia "Outras ações" na parte inferior esquerda:


Nesse estágio, você poderá gerar um token de API. Você precisará da chave para usá-la mais tarde, portanto, certifique-se de anotá-la também.


Agora você vai querer lançar o aplicativo FXTrade Practice, que nos permitirá ver as ordens executadas e nosso (papel!) Lucro & amp; perda.


Se você estiver executando um sistema Ubuntu, precisará instalar uma versão ligeiramente diferente do Java. Em particular, a versão Oracle do Java 8. Se você não fizer isso, o simulador de prática não será carregado a partir do navegador. Eu corri estes comandos no meu sistema:


Agora você poderá iniciar o ambiente comercial de prática. Volte para o painel OANDA e clique no link verde destacado "Ativar FXTrade Practice". Ele abrirá uma caixa de diálogo Java perguntando se você deseja executá-lo. Clique em "Executar" e a ferramenta fxTrade Practice será carregada. O meu padrão foi um gráfico de velas de 15 min de EUR / USD com o painel de cotações à esquerda:


Tela OANDA fxTrade Practice.


Neste ponto, estamos prontos para começar a projetar e codificar nosso sistema automatizado de negociação forex contra a API OANDA.


Visão geral da arquitetura de negociação.


Se você tem acompanhado a série de backtester orientada a eventos para ações e ETFs que eu criei no ano passado, você estará ciente de como um sistema de negociação orientado a eventos funciona. Para aqueles de vocês que são novos no software orientado a eventos, sugiro fortemente ler o artigo para obter algumas dicas sobre como eles funcionam.


Em essência, todo o programa é executado em um infinte, enquanto o loop só termina quando o sistema de negociação é desligado. O mecanismo central de comunicação do programa é dado por meio de uma fila que contém eventos.


A fila é constantemente consultada para verificar novos eventos. Uma vez que um evento tenha sido retirado do topo da fila, ele deve ser tratado por um componente apropriado do programa. Portanto, um feed de dados de mercado pode criar TickEvents que são colocados na fila quando chega um novo preço de mercado. Um objeto de estratégia de geração de sinal pode criar OrderEvents que devem ser enviados para uma corretora.


A utilidade de tal sistema é dada pelo fato de que não importa qual ordem ou tipos de eventos são colocados na fila, pois eles sempre serão tratados corretamente pelo componente certo dentro do programa.


Além disso, diferentes partes do programa podem ser executadas em encadeamentos separados, o que significa que nunca há qualquer espera por qualquer componente em particular antes do processamento de qualquer outro. Isso é extremamente útil em situações de negociação algorítmica em que os manipuladores de feed de dados de mercado e os geradores de sinal de estratégia têm características de desempenho muito diferentes.


O loop de negociação principal é dado pelo seguinte pseudocódigo do Python:


Como afirmamos acima, o código é executado em um loop infinito. Em primeiro lugar, a fila é pesquisada para recuperar um novo evento. Se a fila estiver vazia, o loop simplesmente reinicia após um curto período de suspensão conhecido como "heartbeat". Se um evento for encontrado, seu tipo é avaliado e, em seguida, o módulo relevante (a estratégia ou o manipulador de execução) é chamado para manipular o evento e, possivelmente, gerar novos que retornam à fila.


Os componentes básicos que criaremos para nosso sistema de negociação incluem o seguinte:


Manipulador de Preço de Transmissão - Isso manterá uma conexão de longa duração aberta aos servidores da OANDA e enviará dados de tick (ou seja, lance / pedido) através da conexão para quaisquer instrumentos que nos interessem. Gerador de Sinal de Estratégia - Isso levará uma sequência de marcações eventos e usá-los para gerar ordens de negociação que serão executadas pelo manipulador de execução. Manipulador de Execução - Executa um conjunto de eventos de pedido e executa-os cegamente com OANDA. Eventos - Esses objetos constituem as "mensagens" transmitidas na fila de eventos. Nós só precisamos de dois para esta implementação, ou seja, o TickEvent e o OrderEvent. Ponto de entrada principal - O ponto de entrada principal também inclui o loop de "troca" que pesquisa continuamente a fila de mensagens e envia mensagens para o componente correto. Isso geralmente é conhecido como "event loop" ou "event handler".


Vamos agora discutir a implementação do código em detalhe. Na parte inferior do artigo está a lista completa de todos os arquivos de código-fonte. Se você colocá-los no mesmo diretório e executar python trading. py, você começará a gerar pedidos, desde que tenha preenchido seu ID de conta e token de autenticação da OANDA.


Implementação Python.


É uma prática ruim armazenar senhas ou chaves de autenticação dentro de uma base de código, pois você nunca pode prever quem terá acesso permitido a um projeto. Em um sistema de produção, armazenamos essas credenciais como variáveis ​​de ambiente com o sistema e, em seguida, consultamos esses "envvars" sempre que o código é reimplantado. Isso garante que senhas e tokens de autenticação nunca sejam armazenados em um sistema de controle de versão.


No entanto, como estamos apenas interessados ​​em criar um sistema de negociação de "brinquedos" e não nos preocupamos com detalhes de produção neste artigo, vamos separar esses tokens de autenticação em um arquivo de configurações.


No seguinte arquivo de configuração settings. py, temos um dicionário chamado ENVIRONMENTS, que armazena os endpoints da API para a API de streaming de preço OANDA e para a API de negociação. Cada sub dicionário contém três endpoints de API separados: real, prática e sandbox.


A sandbox API é puramente para testar código e verificar se não há erros ou bugs. Ele não tem garantias de tempo de atividade das APIs reais ou práticas. A prática API, em essência, fornece a capacidade de comércio de papel. Ou seja, ele fornece todos os recursos da API real em uma conta de prática simulada. A API real é apenas isso - é negociação ao vivo! Se você usar esse endpoint em seu código, ele será negociado com o saldo da sua conta ativa. SEJA EXTREMAMENTE CUIDADO!


IMPORTANTE: Ao negociar com a API da prática, lembre-se de que um custo de transação importante, o impacto no mercado, não é considerado. Como nenhum negócio está realmente sendo colocado no ambiente, esse custo deve ser contabilizado de outra maneira em outro lugar, usando um modelo de impacto de mercado, se você quiser avaliar realisticamente o desempenho.


A seguir, estamos usando a conta de prática conforme fornecida pela configuração DOMAIN. Precisamos de dois dicionários separados para os domínios, um para os componentes da API de streaming e de negociação. Finalmente, temos o ACCESS_TOKEN e o ACCOUNT_ID. Eu preenchi os dois abaixo com IDs fictícios, então você precisará utilizar os seus próprios, que podem ser acessados ​​na página da conta OANDA:


A próxima etapa é definir os eventos que a fila usará para ajudar todos os componentes individuais a se comunicarem. Precisamos de dois: TickEvent e OrderEvent. A primeira armazena informações sobre os dados do mercado de instrumentos, como o (melhor) lance / pedido e o tempo de negociação. O segundo é usado para transmitir ordens ao manipulador de execução e, portanto, contém o instrumento, o número de unidades a negociar, o tipo de ordem ("mercado" ou "limite") e o "lado" (ou seja, "comprar" e "vender"). ).


Para tornar nosso código de eventos à prova do futuro, criaremos uma classe base chamada Event e teremos todos os eventos herdados disso. O código é fornecido abaixo em events. py:


A próxima aula que vamos criar lidará com a estratégia de negociação. Nesta demonstração, vamos criar uma estratégia sem sentido que simplesmente recebe todos os ticks do mercado e, a cada 5 ticks, compra ou vende aleatoriamente 10.000 unidades de EUR / USD.


Claramente esta é uma "estratégia" ridícula! No entanto, é fantástico para fins de teste, porque é simples de codificar e entender. Em futuras entradas no diário, estaremos substituindo isso por algo significativamente mais excitante que (esperançosamente) gerará lucro!


O arquivo strategy. py pode ser encontrado abaixo. Vamos trabalhar nisso e ver o que está acontecendo. Em primeiro lugar, importamos a biblioteca aleatória e o objeto OrderEvent de events. py. Precisamos da biblioteca aleatória para selecionar uma ordem aleatória de compra ou venda. Precisamos de OrderEvent, pois é assim que o objeto de estratégia enviará pedidos para a fila de eventos, que será posteriormente executada pelo manipulador de execução.


A classe TestRandomStrategy simplesmente pega o instrumento (nesse caso, EUR / USD), o número de unidades e a fila de eventos como um conjunto de parâmetros. Em seguida, ele cria um contador de ticks que é usado para informar quantas ocorrências de TickEvent ele viu.


A maior parte do trabalho ocorre no método calculate_signals, que simplesmente recebe um evento, determina se é um TickEvent (caso contrário, ignora) e incrementa o contador de ticks. Em seguida, ele verifica se a contagem é divisível por 5 e, em seguida, compra ou vende aleatoriamente, com uma ordem de mercado, o número especificado de unidades. Certamente não é a maior estratégia de negociação do mundo, mas será mais do que adequada para nossos testes com a API de corretagem da OANDA!


O próximo componente é o manipulador de execução. Esta classe é encarregada de atuar em instâncias de OrderEvent e fazer solicitações ao broker (neste caso, OANDA) de uma maneira "burra". Ou seja, não há gerenciamento de riscos ou sobreposição de construção de portfólio. O manipulador de execução simplesmente executará qualquer pedido que tenha sido dado.


Devemos transmitir todas as informações de autenticação para a classe Execution, incluindo o "domínio" (prática, real ou sandbox), o token de acesso e o ID da conta. Em seguida, criamos uma conexão segura com o httplib, um dos Pythons construídos em bibliotecas.


A maior parte do trabalho ocorre em execute_order. O método requer um evento como um parâmetro. Em seguida, ele constrói dois dicionários - os cabeçalhos e os parâmetros. Esses dicionários serão então codificados corretamente (parcialmente por urllib, outra biblioteca Python) para serem enviados como uma solicitação HTTP POST para a API OANDAs.


Nós passamos os parâmetros do cabeçalho Content-Type e Authorization, que incluem nossas informações de autenticação. Além disso, codificamos os parâmetros, que incluem o instrumento (EUR / USD), unidades, tipo de ordem e lado (compra / venda). Finalmente, fazemos o pedido e salvamos a resposta:


O componente mais complexo do sistema de negociação é o objeto StreamingForexPrices, que lida com as atualizações de preço de mercado do OANDA. Existem dois métodos: connect_to_stream e stream_to_queue.


O primeiro método usa a biblioteca de pedidos do Python para se conectar a um soquete de fluxo com os cabeçalhos e parâmetros apropriados. Os parâmetros incluem o ID da conta e a lista de instrumentos necessários que devem ser ouvidos para atualizações (neste caso, são apenas EUR / USD). Observe a seguinte linha:


Isso informa a conexão a ser transmitida e, portanto, mantida aberta de uma maneira longa.


O segundo método, stream_to_queue, realmente tenta se conectar ao fluxo. Se a resposta não for bem sucedida (ou seja, o código de resposta não é HTTP 200), então simplesmente retornamos e saímos. Se for bem-sucedido, tentamos carregar o pacote JSON retornado em um dicionário Python. Finalmente, convertemos o dicionário do Python com o instrumento, bid / ask e timestamp em um TickEvent que é enviado para a fila de eventos:


Agora temos todos os componentes principais no lugar. O passo final é finalizar tudo o que escrevemos até agora em um programa "principal". O objetivo deste arquivo, conhecido como trading. py, é criar dois encadeamentos separados, um dos quais executa o manipulador de precificação e o outro que executa o manipulador de negociação.


Por que precisamos de dois segmentos separados? Simplificando, estamos executando dois códigos de código "separados", ambos em execução contínua. Se fôssemos criar um programa sem encadeamento, o soquete de fluxo contínuo usado para as atualizações de preços nunca "liberaria" de volta para o caminho do código principal e, portanto, nunca executaríamos nenhuma negociação. Da mesma forma, se executássemos o loop de negociação (veja abaixo), nós nunca retornaríamos o caminho do fluxo para o soquete de streaming de preço. Por isso, precisamos de vários segmentos, um para cada componente, para que possam ser realizados de forma independente. Ambos se comunicarão através da fila de eventos.


Vamos examinar isso um pouco mais. Criamos dois segmentos separados com as seguintes linhas:


Passamos o nome da função ou método para o argumento da palavra-chave target e passamos uma iterável (como uma lista ou tupla) para o argumento da palavra-chave args, que então passa esses argumentos para o método / função real.


Finalmente nós começamos os dois tópicos com as seguintes linhas:


Assim, somos capazes de executar dois segmentos de código efetivamente looping infinitos, que se comunicam através da fila de eventos. Observe que a biblioteca de threads do Python não produz um verdadeiro ambiente multiencadeado de vários núcleos devido à implementação do CPython do Python e do Global Interpreter Lock (GIL). Se você gostaria de ler mais sobre multithreading em Python, por favor dê uma olhada neste artigo.


Vamos examinar o resto do código em detalhes. Primeiramente, importamos todas as bibliotecas necessárias, incluindo fila, encadeamento e hora. Em seguida, importamos todos os arquivos de código acima. Eu pessoalmente prefiro capitalizar qualquer configuração, que é um hábito que eu aprendi trabalhando com o Django!


Depois disso, definimos a função trade, que foi explicada em Python-pseudocode acima. Um loop while infinito é executado (enquanto True:), que continuamente pesquisa a partir da fila de eventos e apenas pula o loop se for encontrado vazio. Se um evento for encontrado, então é um TickEvent ou um OrderEvent e, em seguida, o componente apropriado é chamado para executá-lo. Nesse caso, é uma estratégia ou um manipulador de execução. O loop, em seguida, simplesmente dorme por "heartbeat" segundos (neste caso, 0,5 segundos) e continua.


Finalmente, definimos o ponto de entrada principal do código na função __main__. É bem comentado abaixo, mas vou resumir aqui. Em essência, instanciamos a fila de eventos e definimos os instrumentos / unidades. Em seguida, criamos a classe de streaming de preço StreamingForexPrices e, em seguida, o manipulador de execução Execution. Ambos recebem os detalhes de autenticação necessários fornecidos pela OANDA ao criar uma conta.


Em seguida, criamos a instância de TestRandomStrategy. Finalmente nós definimos os dois tópicos e então os iniciamos:


Para executar o código, basta colocar todos os arquivos no mesmo diretório e chamar o seguinte no terminal:


Note que para parar o código neste estágio é necessário matar o processo Python, via "Ctrl-Z" ou equivalente! Eu não adicionei um segmento adicional para lidar com procurando o sys. exit () que seria necessário para parar o código com segurança. Uma maneira potencial de parar o código em uma máquina Ubuntu / Linux é digitar:


E, em seguida, passe a saída deste (um número de processo) para o seguinte:


Onde PROCESS_ID deve ser substituído pela saída do pgrep. Note que esta NÃO é uma boa prática!


Em artigos posteriores, estaremos criando um mecanismo de stop / start mais sofisticado que faz uso da supervisão de processos do Ubuntu para ter o sistema de negociação funcionando 24 horas por dia, 7 dias por semana.


A saída após 30 segundos ou mais, dependendo da hora do dia em relação às principais horas de negociação para EUR / USD, para o código acima, é dada abaixo:


As primeiras cinco linhas mostram os dados do tíquete JSON retornados da OANDA com preços de compra / venda. Posteriormente, você pode ver a ordem de execução! a saída, bem como a resposta JSON retornada da OANDA confirmando a abertura de uma transação de compra para 10.000 unidades de EUR / USD e o preço em que ela foi atingida.


Isso continuará funcionando indefinidamente até você matar o programa com um comando "Ctrl-Z" ou similar.


Qual é o próximo?


Em artigos posteriores, vamos realizar algumas melhorias muito necessárias, incluindo:


Estratégias reais - estratégias de forex adequadas que geram sinais lucrativos. Infraestrutura de produção - Implantação remota de servidores e sistema de negociação monitorado 24/7, com capacidade de parada / partida. Portfolio e gestão de risco - Portfolio e sobreposições de risco para todas as ordens sugeridas da estratégia. Múltiplas estratégias - Construindo um portfólio de estratégias que se integram na sobreposição de gerenciamento de riscos.


Tal como acontece com o backtester acionado por eventos de ações, também precisamos criar um módulo de backtest de forex. Isso nos permitirá realizar pesquisas rápidas e facilitar o desenvolvimento de estratégias.


+++ DESCONTO ESTRICTAMENTE LIMITADO - FOREX FLEX EA - 67% DE FORMA DE VENDA +++


O Python EA é baseado na natureza de reversão da média das flutuações de preço durante as horas noturnas (das 20:00 às 08:00 para EET). O backtest foi realizado a partir de 2005.


O EA do Python coloca dois pedidos de limite em um período de tempo específico. Este Expert Advisor não usa nenhuma técnica de martingale / grid ou gerenciamento de hedge.


O robô de negociação Forex usa:


EMA diário para determinação da tendência; Níveis de suporte e resistência do Canal de preços para posicionamento ideal de pedidos de limite; Filtro de Volatilidade; Time-stop e Stop-loss.


Prazo - M30. Moeda: GBP / USD. O EA pode ser backtested por barras ou por cada tick.


Python cryptocurrency trading bot.


Como um brinquedo divertido para explorar a negociação, eu construí um & ldquo; flipper & # 8221; cryptocurrency trading bot em python para a troca Bittrex. Ele tem uma estratégia de negociação de tentar alternar entre duas criptomoedas, como Ethereum e NEO, na esperança de obter um pequeno crescimento de posição cada vez que ele flips. Claro, isso é apenas uma estratégia muito básica & # 8221; e você certamente precisará modificá-lo para evitar ficar preso em uma aposta perdida.


Para dar ao meu flipper capacidades um pouco mais robustas, ele tenta reiniciar automaticamente se o programa falhar. Também tem um tempo para esperar antes de cancelar um & # 8220; flip & # 8221; e tentando novamente. Está longe de ser perfeito & # 8230; Atualmente, estou preso em um comércio nos últimos dois meses e não vejo chance de que ele seja completado. Felizmente, ambos os pares de moedas estão em alta em comparação com o dólar & # 8211; então eu ganho de qualquer maneira. Divirta-se, mas esteja seguro!


Você pode explorar o código mais recente no meu repositório aqui:


Como fazer um robô comercial em nenhum momento.


Para fazer um robô de negociação, você precisa de um sistema de comércio.


Negociar nos mercados financeiros envolve muitos riscos, incluindo o mais crítico - o risco de tomar uma decisão comercial errada. O sonho de todo comerciante é encontrar um robô comercial, que está sempre em boa forma e não sujeito a fraquezas humanas - medo, ganância e impaciência.


Cada recém-chegado quer obter ou criar um sistema de negociação claro e rigoroso que possa ser apresentado sob a forma de algoritmos e se livrar completamente das operações de rotina. É possível?


Um sistema de negociação é uma condição necessária para entrar no mercado e esse sistema deve ser lucrativo, é claro. Quando os recém-chegados chegam ao mercado, geralmente ficam sobrecarregados pela grande massa de informações difíceis de entender. Livros e fóruns de comerciantes podem fornecer alguma ajuda nesse caso.


Infelizmente, nem todos os autores são comerciantes bem-sucedidos e nem todos os traders bem-sucedidos escrevem livros. Muitos recursos web especiais são criados apenas para ganhar lucro para seus proprietários, pois é muito mais difícil negociar seu próprio dinheiro do que emitir previsões e ensinar sistemas de negociação.


Cada comerciante deve passar de forma independente todos os estágios de uma criação do sistema comercial. Há um ditado popular que não importa qual sistema você usa para negociação, o principal é que você deve realmente negociar de acordo com esse sistema. Caso contrário, a negociação no mercado se transforma em uma aposta com um resultado previsível.


Trading Robots e Forex.


Acredita-se que o mercado Forex tenha uma grande liquidez. Além disso, permite negociar 24 horas por dia, ao contrário de muitos outros mercados. Portanto, muitos comerciantes tentam fazer robôs de negociação especialmente para o mercado Forex, uma vez que oferece um grande número de instrumentos de negociação.


No entanto, os céticos afirmam que todos os pares de moedas estão fortemente correlacionados entre si, proporcionando uma volatilidade muito baixa no mercado. Mas seus oponentes respondem que cada par de moedas tem suas próprias características e que a baixa volatilidade é compensada por uma grande alavancagem.


Em qualquer caso, os instrumentos de Forex são atraentes para a criação de robôs de negociação e a maioria dos defensores do comércio automatizado aprimora suas habilidades em pares de moedas.


Os terminais de negociação MetaTrader 4 e MetaTrader 5 são especialmente projetados para desenvolver facilmente sistemas de negociação automatizados, mas ao mesmo tempo sua interface também é conveniente para negociação manual.


Como começar a fazer um robô comercial?


Existem muitas abordagens para construir um sistema de negociação automatizado. Descreveremos apenas algumas das principais.


A primeira abordagem baseia-se em matemática. Um desenvolvedor tenta criar uma espécie de equação que considere muitos fatores. Esta abordagem baseia-se na firme convicção de que os movimentos de preços são gerenciados por um modelo que pode ser encontrado usando os dados históricos disponíveis.


Na maioria dos casos, os seguidores de tal abordagem sabem muito de matemática, mas não sabem nada sobre / não estão interessados ​​no mercado. O mercado é uma abstração pura, um tipo de jogo intelectual para eles. Essa abordagem geralmente leva a muitos anos de estudo e desenvolvimento, enquanto um resultado definido na forma de um sistema de negociação automatizado em funcionamento não é tão importante.


A segunda abordagem é baseada no estudo das leis de mercado. Nenhuma tentativa é feita para entender por que o preço sobe ou desce quando vários números de análise técnica aparecem em um gráfico. A vantagem dessa abordagem é que ela não requer nenhum conhecimento especial de matemática e não faz suposições sobre a força motriz do mercado.


É mais claro e conveniente quando se estuda negociação. É mais popular entre os comerciantes que receberam reconhecimento universal. A desvantagem da abordagem é a necessidade de rastrear constantemente todos os símbolos necessários.


Mais cedo ou mais tarde, um trader começa a considerar a automação de processos de negociação e a questão mais considerável aparece nesse estágio - a complexidade de formalizar regras de negociação ao tentar expressá-las na forma de algoritmos. Em alguns casos, os operadores que tentam encomendar um robô comercial não podem descrever as regras de negociação e encontrar pontos em comum com os programadores.


A terceira abordagem baseia-se na tentativa de criar uma "caixa preta" baseada em redes neurais com o uso das ferramentas pré-fabricadas amplamente disponíveis em pacotes especiais de software e matemática. A criação de um sistema de negociação automatizado com os elementos da inteligência artificial é uma tarefa empolgante e desafiadora, mesmo para os recém-chegados, já que não requer conhecimento profundo em matemática nem experiência em programação - tudo é feito usando recursos visuais.


Um comerciante deve conhecer os conceitos básicos de indicadores técnicos, possuir uma capacidade para preparar dados de preços necessários e experiência em algum pacote definido para trabalhar com redes neurais. A principal desvantagem dessa abordagem é que um robô de negociação obtido usando essas ferramentas especializadas para trabalhar com redes neurais é, na verdade, uma "caixa preta". Os comerciantes não conhecem seus princípios de funcionamento e, geralmente, é impossível prever qual fase do mercado será a mais problemática para o robô.


Os programadores geralmente escolhem a quarta abordagem - eles começam a fazer um robô de negociação desde o começo sem gastar tempo para negociação manual. Por que negociar manualmente? Você pode fazer um robô passar alguns meses e colher os benefícios dos seus esforços, então.


Mas «sem dores, sem ganhos». Na maioria dos casos, os programadores começam a criar toda a infra-estrutura necessária usando uma linguagem de programação familiar em vez de apenas fazer um robô comercial - obter e processar dados de preços, representação visual de gráficos e indicadores, meios personalizados de testar estratégias em dados históricos e assim por diante.


Eles ganham muita experiência no processo. Mas na maioria dos casos, essa experiência não os aproxima do objetivo final - a criação de um sistema de negociação automatizado. E mesmo que um robô comercial seja criado, não há garantias de que ele será lucrativo. E se um programador quiser escrever outro sistema de negociação? Reestruturação profunda e novos erros de programação são inevitáveis.


Há também a quinta abordagem - comprar um sistema de negociação pronto na forma de um robô comercial. Neste caso, um comerciante atua como um operador ou um sintonizador. Essa abordagem economiza muito tempo (não é necessário aprender muitas coisas novas) e permite que os operadores entrem rapidamente no mundo da negociação automatizada.


A principal desvantagem desta abordagem decorre de suas vantagens: você não conhece os princípios de operação do seu robô comercial e sua estrutura. E mesmo que um vendedor forneça uma descrição detalhada do sistema de negociação implementado, você nunca terá certeza disso.


No entanto, nenhuma das abordagens mencionadas pode lhe dar garantia absoluta, exceto um depósito bancário. Mas essa não é uma solução muito adequada para pessoas interessadas em negociação no mercado e maneiras de aumentar seus ativos privados.


Qual é a melhor abordagem para o comércio automatizado para um comerciante?


Cada uma das cinco abordagens descritas tem suas vantagens e corresponde a algum tipo definido de comerciante. É improvável que você escolha a primeira abordagem (descrição analítica do mercado) sem um bom histórico matemático. É igualmente improvável que você comece a fazer robôs comerciais baseados em redes neurais. No entanto, essas duas abordagens são muito estimulantes e proporcionam um bom exercício intelectual.


Abaixo, discutiremos apenas a segunda abordagem, que já é considerada a clássica. Essa é a abordagem geralmente escolhida pelos novos seguidores da negociação automatizada, já que a análise técnica continua sendo a principal área de conhecimento ao aprender noções básicas de negociação.


Outra vantagem da segunda abordagem é que depois de gastar algum tempo para negociação manual e obter o senso de mercado, você já terá uma boa compreensão das ferramentas de análise técnica. Além disso, você poderá programar estratégias de negociação ou criar redes neurais em um nível superior.


Os primeiros passos para fazer um robô comercial.


Para criar um sistema de negociação automatizado, você precisa de habilidades de programação e conhecimento de todos os meandros do processamento de solicitações comerciais. Mas, em primeiro lugar, você pode começar com os Expert Advisors, fabricados em linha, negociando robôs da biblioteca gratuita do Code Base.


Faça o download de qualquer Expert Advisor (robô de negociação) e lance-o nos terminais de cliente do Strategy Tester do MetaTrader 4 ou MetaTrader 5. Selecione um intervalo de histórico mostrando uma tendência forte e um intervalo com um plano. Execute a otimização de um parâmetro de entrada do Expert Advisor e examine suas diferenças nesses dois intervalos.


Inicie um Expert Advisor com os parâmetros ideais para um plano em um intervalo de tendência e com os parâmetros ideais para uma tendência em um intervalo simples. Examine as diferenças nos resultados de negociação, distribuições de ofertas e outros parâmetros estatísticos. Como resultado, você saberá quanto o comportamento do seu sistema de negociação pode variar quando a situação do mercado mudar.


Seria melhor tentar várias estratégias de negociação padrão usando este método em diferentes partes da história e vários símbolos. Tal teste impede a instalação de um sistema de negociação para algum intervalo histórico definido e fornece uma melhor compreensão dos sistemas de tendência e de tendência contrária.


O próximo passo seria criar sistemas de negociação mais complexos com base na combinação de sinais simples já existentes do MQL5 Wizard set. Você pode testar e desenvolver sua intuição comercial, classificando sinais ruins de um sistema usando um filtro baseado em outro sistema sem meios de programação.


O principal aqui é não superar demais. Quanto mais os parâmetros de entrada que um sistema de negociação tem, mais fácil será montar. Houve muitas discussões sobre as diferenças entre otimização e adaptação. Não há soluções amplamente aceitas aqui. Mas a visualização dos resultados de teste / otimização e seu próprio bom senso podem ajudá-lo.


Aprenda a identificar os parâmetros de entrada mais críticos que afetam seu sistema de negociação de todo o conjunto de dados de entrada. Não preste muita atenção aos parâmetros secundários que levam tempo durante a otimização, mas não afetam a própria lógica do sistema. Lembre-se de que um bom sistema de negociação sempre demonstra um pequeno movimento livre de parâmetros secundários, mas não apresenta volatilidade dramática no caso de mudanças no mercado insignificantes.


Você pode gastar tanto tempo nesta fase, como desejar, até ter certeza de que pode entender qualquer estratégia de negociação examinando resultados de teste e otimização. O conhecimento dos pontos fortes e fracos dos sistemas padrão permitirá que você esteja mais bem preparado ao criar seu próprio robô comercial.


Programando um robô de negociação.


Suponha que você tenha aprendido / esteja aprendendo a linguagem de programação MQL4 ou MQL5 e agora você está pronto para escrever seu primeiro Expert Advisor para o terminal do cliente MetaTrader. Vários casos são possíveis aqui.


Primeiro, você pode examinar vários robôs comerciais prontos descritos nos artigos para entender melhor as complexidades de programação.


Segundo, você pode fazer perguntas sobre MQL4munity ou MQL5munity, se tiver algum problema não resolvido. Participantes experientes da comunidade geralmente ajudam os recém-chegados a mostrar sincero interesse pelo assunto.


Terceiro, você pode solicitar a melhoria ou o desenvolvimento de um Expert Advisor ou um indicador no serviço Jobs, caso não seja capaz de criar um programa necessário por conta própria. Mas mesmo que você faça um pedido por meio do serviço freelancer, você deve ter alguma idéia sobre o teste de estratégia para encontrar um idioma comum com um desenvolvedor.


Além disso, o conhecimento básico de uma linguagem de programação permite implementar pequenas correções e alterações no código depois que o trabalho já foi concluído. Afinal, não seria muito conveniente chamar um programador para corrigir todos os pequenos problemas que você encontrar. Seria muito mais fácil e rápido corrigi-lo sozinho.


Não há necessidade de reinventar a roda.


Como encontrar sua própria estratégia de negociação, ou pelo menos em que direção você deve focar sua busca? Todos os comerciantes protegem seus próprios sistemas de negociação, se tiverem um. Todos os recém-chegados querem criar um sistema lucrativo ou obter um sistema pronto. Ao mesmo tempo, qualquer solução obtida parece ser muito simples em comparação com as idéias dos recém-chegados sobre um sistema de comércio genuíno.


Os homens do exército em todo o mundo são propensos a níveis excessivos de sigilo. Há muitas piadas sobre isso, incluindo a seguinte: "O segredo militar não está no que você está estudando, - um oficial diz aos estudantes das escolas militares, - mas no fato de que exatamente você está estudando isso". A situação dos sistemas de negociação é semelhante: a maioria dos traders usa idéias de negociação simples e conhecidas com pequenas modificações, por exemplo, adicionando o Trailing Stop ou confirmações de indicadores de tendência.


Existem muitos fóruns de traders com acesso limitado, onde os participantes unem seus esforços para desenvolver ou melhorar alguns sistemas de negociação secretos. O mais interessante é que tais sistemas não contêm nada de especial. Geralmente, uma idéia bem conhecida (como "comércio com a tendência") é usada como base. Em seguida, ele é aperfeiçoado com alguns novos indicadores desconhecidos do público em geral.


Portanto, você pode facilmente obter códigos de código de robô comercial disponíveis e tentar usá-los corretamente com vários símbolos e prazos. Outro exemplo popular pode ser mencionado aqui: "Você não gosta de gatos? Você simplesmente não sabe como cozinhar!" É difícil acreditar, mas a probabilidade de você desenvolver algo realmente novo é muito pequena. O principal aqui é criar um sistema usando os ingredientes disponíveis. Não pense que alguns gênios tenham acesso a alguns sistemas secretos dos laboratórios da NASA. Esse é o segredo do Graal.


Apenas alguns poucos conseguirão passar.


Então, por que ninguém usa idéias de negociação, se elas estão literalmente ao alcance da mão? A resposta provavelmente está na psicologia humana. O pessoal de muitos bancos e grandes fundos de investimento inclui comerciantes realizando acordos de acordo com regras estritas e dentro de volumes limitados. Mas, por alguns motivos, apenas alguns traders institucionais deixam suas empresas e começam a negociar usando seu próprio dinheiro.


Acontece que você precisa não apenas de uma estratégia de negociação, mas também da disciplina de ferro para segui-la. Muitos comerciantes descobriram com pesar que eles também têm os mesmos problemas psicológicos descritos nos livros. Depois de perceber que o pior inimigo dos comerciantes são eles mesmos, um recém-chegado começa a pensar em fazer um robô comercial para eliminar um fardo psicológico.


Embora eu me desvie um pouco do assunto, devo mencionar os lendários comerciantes de tartarugas que negociaram com êxito em múltiplos mercados no final do século XX. Leia "Way of the Turtle" e você verá que a coisa mais importante para um trader é uma autodisciplina e não um sistema secreto. Infelizmente, a maioria dos recém-chegados não será capaz de seguir uma estratégia lucrativa, mesmo que seja gratuita.


O problema é que a maioria das estratégias de negociação perfeitamente ajustadas para o comércio manual dificilmente podem ser formalizadas e transcritas para uma linguagem de programação. As estratégias que podem ser facilmente formalizadas (por exemplo, aquelas que envolvem a intersecção de duas médias móveis) são muito simples e exigem muitos refinamentos e melhorias, para que possam ser usadas na prática. Assim, uma ideia simples é gradualmente complicada por uma abundância de parâmetros externos que impedem um robô de negociação de entradas falsas e erros claramente visíveis para um desenvolvedor. Um problema de otimização de robôs de negociação surge. Esse processo não deve se transformar em uma otimização excessiva e em um intervalo de histórico específico.


Para resolver este problema, o teste direto usando os parâmetros do sistema obtidos foi implementado no terminal MetaTrader 5. Se os resultados dos testes forward não diferirem significativamente daqueles obtidos na seção de otimização, há uma probabilidade de que um robô comercial fique estável o suficiente por algum tempo após seu lançamento em uma conta de negociação. Um intervalo de tempo para a otimização de parâmetros e um valor real de "algum tempo" dependem de um determinado sistema de negociação.


Assim, a otimização de um robô de negociação antes de lançá-lo em uma conta de negociação lembra o desenrolar de um sling - quanto mais cuidadosamente desenrolamos um projétil do sling, mais ele voará e mais precisa será sua trajetória. Um robô de negociação completamente desenvolvido manterá um resultado positivo em uma conta de negociação por mais tempo do que um robô de negociação obtido como resultado de um ajuste. Podemos dizer que o Grail é uma idéia de trabalho e ajuste correto dos parâmetros realizados de tempos em tempos nos momentos de mudanças nas condições do mercado.


Isto pode ser ilustrado pelos resultados do Campeonato de Negociação Automatizada, que já existe há muitos anos. Os Expert Advisors enviados por todos os participantes passam por testes automáticos no intervalo de tempo de janeiro até o final de julho. O principal requisito para passar o teste automático é um lucro obtido por oito meses de teste. Mas menos de metade dos robôs de negociação admitidos para o Campeonato continuam lucrativos depois de meses de trabalho autônomo.


Você também pode testar suas habilidades para fazer e ajustar seu robô de negociação para participar do Campeonato e obter os resultados dos testes avançados do seu Expert Advisor. Além disso, a participação é gratuita e os prêmios são impressionantes. Esperamos ver você lá!


Conclusão.


Comerciantes profissionais intraday passam muitas horas sentados em seus computadores e esperando o momento certo para fazer um acordo. Claro, eles não podem estar em boa forma o tempo todo.


A maioria dos comerciantes chega à conclusão de que suas ações violam suas próprias regras de negociação. Nem todos os sistemas de negociação podem ser completamente formalizados, mas mesmo esses sistemas podem, na maioria dos casos, adotar ferramentas adicionais, como indicadores, sistemas analíticos e filtros de sinais falsos.


Nós não fazemos nenhuma recomendação especial aqui sobre o aprendizado de linguagens MQL4 ou MQL5, pois há muitos outros artigos úteis sobre esse assunto. O objetivo deste artigo foi fornecer uma idéia inicial sobre como começar a fazer seu robô comercial para os terminais MetaTrader 4 e MetaTrader 5.


Esperamos que este artigo economize tempo para os recém-chegados e mostre a direção certa na difícil tarefa de desenvolver um sistema de negociação automatizado.


Traduzido do russo por MetaQuotes Software Corp.


BigData. Iniciantes. Negociação


BigData. Iniciantes. Negociação


Colocando seu primeiro comércio Forex com o Python.


Atualização: atualizei o código para que funcione com a nova API da Oanda. Venha aqui.


Hora de falar sobre corretores, como colocar um comércio programaticamente e, mais importante, como não ser enganado.


Um corretor nada mais é do que uma empresa que permite negociar (comprar ou vender) ativos em um mercado por meio de sua plataforma. O que é muito importante para o algotrading é:


O corretor oferece uma API para que possamos fazer pedidos Você pode ter uma conta de demonstração para executar seu ambiente de preparação e experimentar O spread é o menor possível.


No nosso caso, nós realmente não nos importamos com spread, já que não estaremos fazendo High Frequency Trading em breve.


Mesmo que os corretores sejam regulamentados, houve incidentes nos últimos dois anos, quando os corretores foram dobrados devido a certas condições. Seja muito cauteloso se.


Não há comentários do corretor na internet (ou a maioria deles é ruim) Se o corretor oferece alguma alavancagem louca (como 1: 200) Se o corretor parece estar em um país muito estranho.


O que pode acontecer é que você comece a ganhar algum dinheiro e você não será capaz de retirá-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 um corretor (eu não sou afiliado com eles) e eles oferecem uma API decente, bibliotecas no github e uma conta demo gratuita.


Depois de fazer login na sua conta de demonstração, acesse Gerenciar acesso à API. Lá você pode encontrar sua chave de API que usaremos em nosso sistema para fazer negócios. CERTIFIQUE-SE DE NÃO COMPARTILHAR ESTA CHAVE.


O código para isso é e todos os outros posts estão no github e você pode instalá-lo e executá-lo facilmente.


Atualização: Oanda lançou um novo mecanismo de execução (kickass) chamado v20 e eles lançaram uma nova (melhorada) API. Esta postagem foi atualizada para usar a nova API, mas se (por algum motivo) você quiser verificar o código antigo, ela está aqui. Você tem sorte!


Conectar-se ao Oanda precisa de um arquivo conf - que você pode gerar usando um script que o Oanda fornece aqui ou você pode simplesmente criá-lo você mesmo. Porque você iria querer aquilo? Primeiro de tudo, 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 à vontade para usar um dos métodos.


Agora prepare-se para se surpreender. O código é direto. Nós inicializamos a API:


e agora vamos fazer um pedido (compre 5000 unidades de EURUSD)


Verifique o preço atual é tão fácil!


Super fácil. Não se preocupe com o que é o EURUSD ou quantas unidades estamos comprando ou o que é uma ordem de mercado. Por enquanto, nós colocamos nossa primeira negociação em nosso laptop e vamos construir nossa própria API para fazer negócios. Coisas emocionantes!


Você pode ler a documentação de Oanda aqui para ver o que mais você pode fazer com sua API e encontrar a biblioteca Python aqui. Aqui estão alguns exemplos de exemplos da página do github de Oanda.


A seguir, conectando-se a um sistema de algotrading real ao vivo, rodando a partir do meu RaspberryPI em casa.


Você poderá ver o programa (quase) final em execução e falaremos mais sobre Forex e estratégias.


Se você tiver mais comentários, envie-me um ping no jonromero ou inscreva-se no boletim informativo.


Outro Jurídico Este é um tutorial de engenharia sobre como construir uma plataforma de algotrading para experimentação e DIVERSÃO. Todas as sugestões aqui não são conselhos financeiros. Se você perder algum (ou todo) dinheiro porque seguiu qualquer aviso de negociação ou implantou este sistema em produção, você não pode culpar esse blog aleatório (e / ou eu). Aproveite por sua conta e risco.

No comments:

Post a Comment