Forex Market Maker OANDA é um fabricante de mercado forex estabelecido, cuja tecnologia proprietária fornece instituições financeiras com acesso consistente à liquidez profunda que eles precisam para o comércio de forma eficaz e com confiança. Mudando Paisagem OANDA mudou a paisagem do mercado forex A empresa aproveita sua extensa rede de varejo Volume, acesso a liquidez profunda de bancos de topo e algoritmos de negociação eficazes para oferecer uma fonte verdadeiramente alternativa de liquidez forex. Os clientes institucionais incluem hedge funds, empresas de comércio qualificado, clientes corporativos, corretores, comerciantes proprietários, principais bancos mundiais e outras instituições financeiras Os seus sistemas e estratégias de missão crítica dependem da tecnologia proprietária da OANDA, que tipicamente processa centenas de milhares de transações de forex diariamente. Totalmente regulamentado Totalmente regulado com um sólido balanço financeiro A OANDA tem escritórios nos EUA, Reino Unido, Canadá, Suíça, Cingapura, E Japão Sua premiada plataforma fxTrade é bu Transparentes e justos e licenciados por dois dos dez principais bancos de câmbio. Os serviços de FX Institucionais da OAAO não se destinam nem estão disponíveis para clientes não institucionais e não se destinam a distribuição em qualquer jurisdição onde A OANDA, fxTrade e a família de marcas registradas OANDA sfx são de propriedade da OANDA Corporation. Todas as outras marcas registradas que aparecem neste site são de propriedade de seus respectivos proprietários. OANDA Cookie, cookie, cookie. ltiframe largura 1 altura 1 frameborder 0 estilo display nenhum mcestyle display nenhum gt lt iframe gt., 1 1 2016 OANDA v20, 4. CFTC, - 50 1 20 1 OANDA Ásia-Pacífico 50 1 OANDA Canadá IIROC.1996 2017 OANDA Corporation OANDA, fxTrade fx OANDA Corporation.- OANDA Europe Ltd,, 4 50 1.OANDA Europe Limited, 7110087, Torre 42, Piso 9a, 25 Old Broad St, Londres EC2N 1HQ 542574.OANDA J Apan Co Ltd Kanto-Local do departamento financeiro local, 2137, 1571.Forex Diário de Negociação 1 - Automated Forex Trading com o OANDA API. I anteriormente mencionado no artigo QuantStart 2014 In Review que eu estaria gastando alguns de 2015 escrito sobre forex automatizado Dado que eu próprio normalmente realizar pesquisas em mercados de ações e futuros, eu pensei que seria divertido e educacional para escrever sobre as minhas experiências de entrar no mercado cambial no estilo de um diário Cada entrada diário tentará construir sobre todos aqueles Antes, mas também deve ser relativamente self-contained. In esta primeira entrada do diário eu vou estar descrevendo como configurar uma nova conta corretora de prática com OANDA, bem como a forma de criar um motor de negociação multi-thread baseado em eventos básicos que pode automaticamente Executar negócios, tanto em uma prática e viver setting. Last ano passamos muito tempo olhando para o backerster evento-driven principalmente para ações e ETFs O que eu apresento abaixo é voltada para forex e pode b Eu usei para troca de papel ou negociação ao vivo. Eu escrevi todas as instruções a seguir para Ubuntu 14 04, mas eles devem facilmente traduzir para Windows ou Mac OS X, usando uma distribuição Python como Anaconda A única biblioteca adicional usada para o Python O mecanismo de negociação é a biblioteca de solicitações, que é necessária para a comunicação com a OANDA API. Visto que este é o primeiro post diretamente sobre troca de divisas, eo código apresentado abaixo pode ser diretamente adaptado a um ambiente de negociação ao vivo, gostaria de apresentar o Seguintes disclaimers. Disclaimer Negociação cambial sobre margem carrega um alto 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 trabalhar contra você, assim como 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 A possibilidade existe que você poderia sustentar Uma perda de alguns ou todos do seu investimento inicial e, portanto, você não deve investir dinheiro que você não pode perder Perda Você deve estar ciente de todos os riscos associados com negociação de câmbio, e procurar aconselhamento de um consultor financeiro independente, se você tiver quaisquer dúvidas . Este software é fornecido como tal e quaisquer garantias expressas ou implícitas, incluindo, mas não se limitando a, as garantias implícitas de comercialização e adequação a um propósito específico são excluídas. Em nenhum caso os regentes ou contribuintes serão responsáveis por quaisquer danos diretos, Incluindo, mas não se limitando a, aquisição de bens ou serviços de substituição perda de uso, dados, lucros ou interrupção de negócios, porém causados e em qualquer teoria de responsabilidade, seja em contrato, responsabilidade estrita ou Dano, incluindo negligência ou de outra forma decorrentes de qualquer fora do uso deste software, mesmo se avisado da possibilidade de tal damage. Setting Up uma conta com OA NDA. A primeira pergunta que vem à mente é Por que escolher OANDA Simplesmente colocar, depois de um pouco de Googling em torno de corretores forex que tinham APIs, vi que a OANDA tinha recentemente lançado um adequado REST API que poderia ser facilmente comunicada com a partir de praticamente qualquer idioma De uma forma extremamente simples Depois de ler a sua documentação API desenvolvedor eu decidi dar-lhes uma tentativa, pelo menos, com uma prática account. To ser claro - Eu não tenho nenhuma relação anterior ou existente com a OANDA e estou apenas fornecendo esta recomendação com base no meu limitado Experiência de brincar com a sua prática API e alguns breves utilização para download de dados de mercado, enquanto empregados em um fundo anteriormente Se alguém se deparou com qualquer outro corretores forex que também têm uma API similarmente moderna, então eu d ser feliz para dar-lhes um olhar também. Antes de utilizar a API é necessário se inscrever para uma conta de prática Para fazer isso, vá para o link de inscrição Você verá a tela de inscrição tela. OANDA a seguir. Você será então capaz Para iniciar sessão com as suas credenciais de início de sessão Certifique-se de seleccionar o separador fxTradePractice da tela de início de sessão. OANDA ecrã de início de sessão. Uma vez que você precisará de fazer uma anotação do seu ID de Conta É listado abaixo do meu cabeçalho Black Funds próximo Para a Mina Primária é um número de 7 dígitos Além disso, você também precisará gerar um token API pessoal Para fazer isso, clique em Gerenciar o Acesso à API embaixo da guia Outras Ações na parte inferior esquerda. Neste estágio, você será capaz de gerar um token da API Você precisará da chave para uso posterior, por isso, certifique-se de anotá-la também. Agora você quer lançar o aplicativo FXTrade Practice, que nos permitirá ver as ordens executadas e nossa perda de lucro em papel. Se você estiver executando um Ubuntu sistema você precisará instalar uma versão ligeiramente diferente do Java Em particular, a versão Oracle do Java 8 Se você não fizer isso, então o simulador de prática não vai carregar a partir do navegador eu executei esses comandos no meu system. You será agora Capaz de lançar a prática de comércio e Nvironment Retorne ao painel de OANDA e clique no verde destacado Lançamento FXTrade Prática link Trará uma caixa de diálogo Java perguntando se você deseja executá-lo Clique em Executar e a ferramenta fxTrade Practice irá carregar Mina predefinida para um gráfico de velas de 15 min de EUR USD Com o Painel de Cotações na tela de prática da esquerda. OANDA fxTrade. Neste ponto, estamos prontos para começar a projetar e codificação do nosso sistema de negociação forex automatizado contra o OANDA API. Overview de Trading Architecture. Se você tem seguido a série backtester evento-driven Para ações e ETFs que eu criei no ano passado, você vai estar ciente de como funciona um sistema de negociação orientada a eventos Para aqueles de vocês que são novos para o software orientado a eventos eu sugeriria fortemente a leitura através do artigo, a fim de ganhar alguma introspecção Em sua forma de trabalho. Em essência, todo o programa é executado em um loop infinte enquanto que só termina quando o sistema de comércio é desligado O mecanismo de comunicação central do programa é dado vi Aa fila que contém eventos. A fila é constantemente consultada para verificar novos eventos Uma vez que um evento foi retirado o topo da fila deve ser tratado por um componente apropriado do programa Portanto, um feed de dados do mercado pode criar TickEvent s que são Colocado na fila quando chega um novo preço de mercado Um objeto de estratégia de geração de sinal pode criar OrderEvent s que devem ser enviados para uma corretora. A utilidade de tal sistema é dada pelo fato de que não importa que ordem ou tipos de Os eventos são colocados na fila, como eles sempre serão tratados corretamente pelo componente direito dentro do programa. Além disso, diferentes partes do programa pode ser executado em segmentos separados, o que significa que nunca há qualquer espera por qualquer componente particular antes de processar qualquer outro Isso é extremamente útil em situações de negociação algorítmica onde manipuladores de alimentação de dados de mercado e geradores de sinal de estratégia têm características de desempenho muito diferentes. O ciclo de negociação principal é dado Pelo seguinte pseudo-código de Python. Como dissemos acima, o código é executado em um loop infinito Em primeiro lugar, a fila é consultada para recuperar um novo evento Se a fila estiver vazia, então o loop simplesmente reinicia após um período de sono curto conhecido como heartbeat Se um evento é encontrado o seu tipo é avaliado e, em seguida, o módulo relevante ou a estratégia ou o manipulador de execução é chamado para lidar com o evento e possivelmente gerar novos que voltam para a fila. Os componentes básicos que vamos criar para a nossa negociação O sistema inclui o seguinte. Controlador do preço de tratamento - Isto manterá uma conexão de funcionamento longa aberta aos servidores de OANDAs e enviará dados do carter isto é o lance perguntar através da conexão para todos os instrumentos que nós estamos interessados. Gerador de Sinal de Estratgia - Isto fará exame de uma seqüência de Marcar eventos e usá-los para gerar ordens de negociação que serão executadas pelo manipulador de execução. Execution Handler - Toma um conjunto de eventos de ordem e, em seguida, os executa cegamente com OANDA. Events - Esses objetos c Nós exigimos apenas dois para esta implementação, ou seja, o TickEvent eo OrderEvent. Main Ponto de Entrada - O ponto de entrada principal também inclui o loop de comércio que pesquisa continuamente a fila de mensagens e envia as mensagens para o Componente correto Isso é muitas vezes conhecido como o evento loop ou manipulador de eventos. Vamos agora discutir a implementação do código em detalhe Na parte inferior do artigo é a listagem completa de todos os arquivos de código fonte Se você colocá-los no mesmo diretório e executar Python você começará a gerar ordens, assumindo que você tenha preenchido o seu ID de conta e token de autenticação de OANDA. Python Implementation. It é má prática para armazenar senhas ou chaves de autenticação dentro de um codebase como você nunca pode prever quem será eventualmente permitido acesso a um Projeto Em um sistema de produção que iria armazenar essas credenciais como variáveis de ambiente com o sistema e, em seguida, consulta estes envvars cada vez que o código é r Edeployed Isso garante que as senhas e tokens de autenticação nunca são armazenados em um sistema de controle de versão. No entanto, uma vez que estamos unicamente interessados em construir um sistema de comércio de brinquedos e não estão preocupados com os detalhes de produção neste artigo, em vez disso, separar esses tokens de autenticação em Um arquivo de configurações. No seguinte arquivo de configuração temos um dicionário chamado AMBIENTES que armazena os pontos de extremidade da API para a API de fluxo de preços OANDA ea API de negociação Cada subdicionário contém três pontos de extremidade API separados e sandbox. A API da sandbox é puramente para Teste de código e para verificar que não há erros ou bugs Ele não tem as garantias de uptime do real ou prática APIs A API de prática, em essência, fornece a capacidade de comércio de papel Isso é, ele fornece todos os recursos do real API em uma conta de prática simulada A API real é apenas isso - é a negociação ao vivo Se você usar esse ponto de extremidade em seu código, ele será negociado contra o saldo da sua conta real SER EXTREMAMENTE CAREFUL. IMPORTANT Quando negociar de encontro à prática API recordar que um custo de transação importante, aquele do impacto de mercado não é considerado desde que nenhumas transações estão sendo colocadas realmente no ambiente que este custo deve ser explicado em uma outra maneira outro usando um modelo do impacto de mercado Se você deseja avaliar realisticamente o desempenho. No seguinte estamos usando a conta de prática como determinado pela configuração de DOMAIN Nós precisamos de dois dicionários separados para os domínios, um para cada componente de streaming e trading API Finalmente temos o ACCESSTOKEN e ACCOUNTID I ve Preenchido os dois abaixo com IDs fictício assim que você vai precisar para utilizar o seu próprio, que pode ser acessado a partir da página OANDA conta. O próximo passo é definir os eventos que a fila irá usar para ajudar a todos os componentes individuais comunicar Nós precisamos de dois TickEvent e OrderEvent O primeiro armazena informações sobre os dados do mercado de instrumentos, como o melhor pedido de lance eo tempo de negociação. O segundo é usado para transmitir ou Ders para o manipulador de execução e, portanto, contém o instrumento, o número de unidades para o comércio, o tipo de ordem mercado ou limite eo lado, ou seja, comprar e vender. Para o futuro-prova o nosso código de eventos, vamos criar uma classe base chamada Event e Têm todos os eventos herdar deste O código é fornecido abaixo in. The próxima classe que vamos criar vai lidar com a estratégia de negociação Nesta demo vamos criar uma estratégia um pouco absurdo que simplesmente recebe todos os carrapatos do mercado e em cada 5 Tick aleatoriamente compra ou vende 10.000 unidades de EUR USD. Clearly esta é uma estratégia ridícula No entanto, é fantástico para fins de teste porque é fácil de código e entender Em entradas de diário futuro, vamos substituir isso com algo significativamente mais emocionante que esperamos Gire um lucro. O arquivo pode ser encontrado abaixo Vamos trabalhar com ele e ver o que está acontecendo Em primeiro lugar, importamos a biblioteca aleatória eo objeto OrderEvent de Nós precisamos da biblioteca aleatória para selecionar Ct uma ordem de compra ou de venda aleatória Nós precisamos de OrderEvent como este é como o objeto de estratégia enviará ordens para a fila de eventos, que será mais tarde executado pelo manipulador de execução. A classe TestRandomStrategy simplesmente leva o instrumento neste caso EUR USD, o número De unidades ea fila de eventos como um conjunto de parâmetros Ele então cria um contador de carrapatos que é usado para dizer quantas ocorrências de TickEvent tem visto. A maior parte do trabalho ocorre no método calculatesignals, que simplesmente leva um evento, determina se ele é Um TickEvent caso contrário, ignorar e incrementa o contador de carrapato Ele então verifica para ver se a contagem é divisível por 5 e, em seguida, aleatoriamente compra ou vende, com uma ordem de mercado, o número especificado de unidades Não é certamente a maior estratégia de comércio do mundo, Ele será mais do que adequado para o nosso OANDA corretagem API fins de teste. O próximo componente é o manipulador de execução Esta classe é encarregada de atuar sobre as instâncias OrderEvent e fazer pedidos para o corretor em t Seu caso OANDA de uma forma estúpida Ou seja, não há gerenciamento de risco ou sobreposição de construção de potfolio O manipulador de execução simplesmente executará qualquer ordem que tenha sido dada. Devemos passar todas as informações de autenticação para a classe Execution, incluindo a prática de domínio , Real ou sandbox, o token de acesso e a ID da conta. Em seguida, criamos uma conexão segura com um dos Pythons construídos em bibliotecas. A maior parte do trabalho ocorre em executeorder O método requer um evento como um parâmetro Ele então constrói dois dicionários - Params Estes dicionários serão então corretamente codificados parcialmente por urllib outra biblioteca Python para ser enviada como uma solicitação POST para OANDAs API. Nós passamos os parâmetros de 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, as unidades, o tipo da ordem eo lado compra a venda Finalmente, nós fazemos o pedido e conservamos a resposta. O componente o mais complexo do t Rading é o objeto StreamingForexPrices, que lida com as atualizações de preço de mercado de OANDA Existem dois métodos connecttostream e streamtoqueue. O primeiro método usa a biblioteca de solicitações Python para se conectar a um soquete de streaming com os cabeçalhos e parâmetros apropriados. Os parâmetros incluem o ID da conta e A lista de instrumentos necessários que deve ser ouvida para atualizações neste caso é apenas EUR USD Observe a seguinte linha. Ela diz a conexão a ser transmitido e, portanto, mantidos abertos em uma maneira longa running. The segundo método, streamtoqueue realmente tenta Conectar-se ao fluxo Se a resposta não for bem-sucedida, ou seja, o código de resposta não é 200, então simplesmente retornar e sair Se for bem-sucedido tentamos carregar o pacote JSON retornado em um dicionário Python Finalmente, convertemos o dicionário Python com o instrumento , Bid ask e timestamp em um TickEvent que é enviado para os eventos queue. We agora têm todos os principais componentes no lugar O passo final é a Envolver tudo o que temos escrito até agora em um programa principal O objetivo deste arquivo, conhecido como é criar dois segmentos separados, um dos quais executa o manipulador de preços e outro que executa o manipulador de negociação. Por que precisamos de dois segmentos separados Put Simplesmente, estamos executando duas partes separadas de código, as quais estão continuamente em execução Se nós criássemos um programa não-threaded, então o soquete de streaming usado para as atualizações de preços nunca seria liberado de volta para o caminho do código principal e, portanto, Nunca iria realmente realizar qualquer negociação Da mesma forma, se nós corremos o comércio loop ver abaixo, nunca iria realmente retornar o caminho do fluxo para o preço streaming soquete Por isso, precisamos de vários segmentos, um para cada componente, para que possam ser realizadas de forma independente Ambos se comunicarão uns aos outros através da fila de eventos. Vamos examinar isto um pouco mais. Criamos dois segmentos separados com as seguintes linhas. Passamos o nome da função ou método para o argumento de palavra-chave de destino e t Hen passar um iterável, como uma lista ou tupla para o argumento args palavra-chave, que passa esses argumentos para o método real function. Finally nós começamos ambos os segmentos com as seguintes linhas. Portanto, somos capazes de executar dois, looping efetivamente infinito, código Segmentos independentes que se comunicam através da fila de eventos Observe que a biblioteca de threading Python não produz um verdadeiro multi-core multithreaded ambiente devido à implementação CPython do Python eo Global Interpreter Lock GIL Se você quiser ler mais sobre multithreading em Python , Por favor, dê uma olhada neste article. Let s examinar o resto do código em pormenor Primeiro nós importamos todas as bibliotecas necessárias, incluindo fila de enfileiramento e tempo Nós então importar todos os arquivos de código acima Eu pessoalmente prefiro capitalizar quaisquer configurações, Que é um hábito que eu peguei de trabalhar com Django. After que definimos a função de comércio, que foi explicado em Python-pseudocode acima Um whil infinito E é executado enquanto True que continuamente sondagens da fila de eventos e só ignora o loop se for encontrado vazio Se um evento é encontrado, então é um TickEvent ou um OrderEvent e, em seguida, o componente apropriado é chamado para realizá-lo In Neste caso, é um manipulador de estratégia ou execução O loop, em seguida, simplesmente dorme para segundos de pulsação, neste caso 0 5 segundos e continua. Finalmente, definimos o ponto de entrada principal do código na função principal É bem comentado abaixo, mas vou Resumir aqui Em essência nós instanciamos a fila de eventos e definimos as unidades de instrumentos Então criamos a classe de streaming de StreamingForexPrices e então subseqüentemente o manipulador de execução de Execução Ambos recebem os detalhes de autenticação necessários que são dados por OANDA ao criar uma conta. Nós então criamos o TestRandomStrategy Instância Finalmente, definimos os dois threads e, em seguida, iniciá-los. Para executar o código você simplesmente precisa colocar todos os arquivos no mesmo diretório e ca Ll o seguinte no terminal. Note que para parar o código neste estágio requer uma matança dura do processo de Python através de Ctrl-Z ou o equivalente Eu ve não adicionado um fio adicional para segurar procurar o que seria necessário para parar o código Com segurança Uma maneira potencial para parar o código em uma máquina Ubuntu Linux é para type. And então passar a saída deste um número de processo para o seguinte. Quando PROCESSID deve ser substituído com a saída de pgrep Note que esta não é particularmente boa prática. Em artigos posteriores, estaremos criando um mecanismo de início de parada mais sofisticado que faz uso da supervisão de processo do Ubuntu s para ter o sistema de negociação em execução 24 7. A saída após 30 segundos ou assim, dependendo da hora do dia em relação ao principal As horas de negociação para EUR USD, para o código acima, é dada abaixo. As primeiras cinco linhas mostram os dados de carimbo JSON retornados de OANDA com preços de compra de oferta. Posteriormente, você pode ver a saída de ordem de execução bem como a resposta de JSON retornada de OANDA confirmando a abertura de um comércio de compra de 10.000 unidades de EUR USD eo preço que foi alcançado em. Este irá continuar a correr indefinidamente até que você matar o programa com um comando Ctrl-Z ou similar. Em artigos posteriores vamos realizar Algumas melhorias muito necessárias, incluindo estratégias. Estratégias corretas de forex que geram sinais rentáveis. Infraestrutura de produção - implementação de servidor remoto e 24 7 sistema de comércio monitorado, com stop start capacidade. Portfolio e gestão de risco - Carteira e sobreposições de risco para todas as ordens sugeridas Da estratégia. Estratégias múltiplas - Construindo um portfolio de estratégias que integram na sobreposição de gestão de risco. Como com as ações backtestter evento-driven, também precisamos criar um forex backtesting módulo que nos permitirá realizar pesquisas rápidas e torná-lo mais fácil Para implementar estratégias. Lembre-se de alterar ACCOUNTID e ACCESSTOKEN. Just Getting Started com Quantitative Trading.
No comments:
Post a Comment