Monday 13 November 2017

Quantstart Forex Market


Forex Trading Diary 3 - Open Sourcing the Forex Trading System Na entrada de hoje do Forex Trading Diary Eu quero discutir o plano de longo prazo para o sistema de negociação forex. Além disso, quero delinear como usei o tipo de dados decimais Pythons para tornar os cálculos mais precisos. Até o momento, estamos experimentando a API OANDA Rest, para ver como é comparado com a API fornecida pela Interactive Brokers. Nós também vimos como adicionar um elemento básico de replicação de portfólio como o primeiro passo para um sistema de teste de retorno adequado para eventos. Também tive alguns comentários úteis sobre os dois artigos anteriores (1 e 2), o que sugere que muitos de vocês estão interessados ​​em mudar e ampliar o código. Open Sourcing the Forex Trading System Por razões acima descritas, eu decidi abrir a fonte do sistema de negociação forex. O que isso significa Isso significa que todos os códigos atuais e futuros estarão disponíveis de graça, sob uma licença de código aberto MIT liberal, no site de controle de versão do Github no seguinte URL: githubmhallsmooreqsforex. Para aqueles de vocês que usaram o git e o Github antes, você poderá clonar o retomado e começar a modificá-lo para seus próprios fins. O QuantStart Automated Forex Trading System agora é open-source sob uma licença MIT liberal. Você pode encontrar o código mais recente no Github sob o repositório qsforex em githubmhallsmooreqsforex. Para aqueles de vocês que são novos para o controle de versão de origem, você provavelmente quer ler sobre como o git (e o controle de versão em geral) funcionam com o fantástico ebook grátis Pro Git. Vale a pena passar algum tempo aprendendo sobre o controle de origem, pois isso irá poupar-lhe uma grande quantidade de dor de cabeça futura, se você gastar muito tempo programando e atualizando projetos. O início rápido para um sistema Ubuntu é instalar o git: você precisará fazer Um diretório para o projeto qsforex para viver e clonar o projeto do site Github da seguinte maneira: neste momento, você precisará criar um ambiente virtual no qual executar o código: você precisará instalar os requisitos (isto levará Algum tempo): Finalmente, você precisará criar um link simbólico em seu ambiente virtual Python para permitir que você digite importar qsforex no seu código (e executá-lo): conforme mencionei nas entradas anteriores, você precisará criar as variáveis ​​de ambiente necessárias Para suas credenciais de autenticação OANDA. Por favor, veja a entrada do diário 2 para obter instruções sobre como fazer isso. Preste atenção ao README associado ao repo, pois contém instruções de instalação, um aviso legal e uma garantia sobre o uso do código. Uma vez que o software está no modo alfa, essas instruções se tornarão mais diretas à medida que o tempo avança. Em particular, tentarei enrolar o projeto em um pacote Python para que ele possa ser facilmente instalado via pip. Se você tiver alguma dúvida sobre o procedimento de instalação, então não hesite em me enviar um e-mail no mikequantstart. Plano de longo prazo A filosofia do sistema de negociação forex, como no resto do site QuantStart, é tentar imitar o comércio da vida real tanto quanto possível em nosso backtesting. Isso significa incluir os detalhes que muitas vezes são excluídos de mais situações de backtesting orientadas para pesquisa. Latência, interrupções do servidor, automação, monitoramento, custos de transação realistas, todos serão incluídos nos modelos para nos dar uma boa idéia de quão bem uma estratégia é susceptível de realizar. Uma vez que teremos acesso aos dados do tick (timestamps bidask), poderemos incorporar o spread nos custos de transação. Nós também podemos modelar o deslizamento. É menos direto modelar o impacto do mercado, embora isso seja menos preocupante em menores montantes de negociação. Além dos custos de transação, queremos modelar o gerenciamento de portfólio robusto usando sobreposições de risco e dimensionamento de posição. Então, o que está atualmente incluído no sistema de negociação Forex até à data Arquitetura dirigida a eventos - O sistema de negociação forex foi projetado como um sistema baseado em eventos desde o início, pois é assim que um sistema de negociação intradía será implementado em um ambiente ao vivo . Streaming de preços - Temos um objeto básico de transmissão de preços. Isso atualmente administra assinatura apenas para um único par, mas podemos facilmente modificar isso para se inscrever em vários pares de moedas. Geração de Sinal - Podemos incorporar estratégias de negociação (baseadas diretamente nos preços atualizados passados ​​e atuais) usando o objeto Estratégia, que cria objetos SignalEvent. Execução de Ordem - Temos um sistema de execução de ordens ingênuo que envia cjamente ordens do Portfolio para OANDA. Por cegamente, quero dizer que não há gerenciamento de risco ou dimensionamento de posição sendo realizado, nem qualquer execução algorítmica que possa levar a custos de transação reduzidos. Moeda Base do GBP - Para manter as coisas simples, eu só escrevi o sistema para a moeda base do GBP. Este é talvez o aspecto mais importante a modificar dado quantos de vocês terão contas de prática denominadas em USD, EUR, CAD, JPY, AUD e NZD GBPUSD Trading - Escolhi o cabo como o par de moedas para testar os objetos iniciais de Posição e Portfolio com. Manter vários pares de moedas é um importante passo seguinte. Isso envolverá modificação na posição e nos cálculos do portfólio. Manipulação decimal - Qualquer sistema de comércio de produção deve lidar corretamente com cálculos de moeda. Em particular, os valores de moeda não devem ser armazenados como tipos de dados de ponto flutuante, uma vez que os erros de arredondamento serão acumulados. Por favor, veja este fantástico artigo sobre representações de ponto flutuante para mais detalhes. LongShort Trading - Entre as entradas diárias 2 e 3 adicionei a capacidade de reduzir um par de moedas (ao contrário de apenas ser capaz de passar por muito tempo). Crucialmente, isso também é testado por unidade. Manipulação de portfólio local - Na minha opinião, realizar um backtest que infla o desempenho da estratégia devido a pressupostos irrealistas é irritante na melhor das hipóteses e extremamente improdutivo no pior. Apresentar um objeto de portfólio local que replica os cálculos OANDA significa que podemos verificar nossos cálculos internos enquanto realizamos a prática Negociação. O que nos dá maior confiança quando usamos mais tarde esse mesmo objeto de portfólio para fazer backtesting em dados históricos. Testes unitários para PositionPortfolio - Embora não tenha mencionado isso diretamente nas entradas 1 e 2 do diário, eu realmente escrevi alguns testes unitários para os objetos Portfolio e Position. Uma vez que estes são tão cruciais para os cálculos da estratégia, é preciso ter a certeza de que eles funcionam como esperado. Um benefício adicional de tais testes é que eles permitem que o cálculo subjacente seja modificado, de modo que, se todos os testes ainda passam, podemos ter certeza de que o sistema geral continuará a se comportar conforme o esperado. Nesta fase, o Forex Trading System está faltando a seguinte funcionalidade: Slippage Handling - O sistema está gerando uma série de derrapagens devido à natureza de alta freqüência dos dados de ticks fornecidos pela OANDA. Isso significa que o saldo da carteira calculado localmente não reflete o saldo calculado pela OANDA. Até que o ajuste correto do evento e o ajuste do deslizamento sejam realizados, isso significará que um backtest não refletirá corretamente a realidade. Moedas básicas múltiplas - atualmente estamos restritos a GBP. No mínimo, precisamos incluir as principais denominações monetárias - USD, EUR, CAD, AUD, JPY e NZD. Múltiplos pares de moedas - Da mesma forma, precisamos apoiar os principais pares de moedas além do cabo (GBPUSD). Existem dois aspectos para isso. O primeiro é manipular corretamente os cálculos quando nem a base ou a cotação de um par de moedas é igual à moeda da denominação da conta. O segundo aspecto é apoiar posições múltiplas para que possamos negociar um portfólio de pares de moedas. Gerenciamento de riscos - Muitos testes de pesquisa ignoram completamente o gerenciamento de riscos. Infelizmente, isso geralmente é necessário para a brevidade ao descrever as regras de uma estratégia. Na realidade, devemos usar uma sobreposição de risco ao negociar, caso contrário é extremamente provável que sofreremos uma perda substancial em algum estágio. Isso não quer dizer que a gestão de riscos possa evitar isso inteiramente, mas certamente o torna menos provável. Otimização de portfólio - Em um cenário institucional, teremos um mandato de investimento, que ditará um sistema robusto de gerenciamento de portfólio com várias regras de alocação. Em uma configuração de pessoal de varejo, talvez desejemos usar uma abordagem de dimensionamento de posição, como o Critério de Kelly, para maximizar nossa taxa de crescimento de longo prazo. Estratégias robustas - Eu só demonstrei algumas estratégias de brinquedos gerando geração de sinal aleatório até à data. Agora que estamos começando a criar um sistema de negociação forex intraday confiável, devemos começar a realizar algumas estratégias mais interessantes. Futuras entradas no diário se concentrarão em estratégias tiradas de uma mistura de filtros de indicadores técnicos, bem como modelos de séries temporais e técnicas de aprendizado de máquina. Implantação remota - Uma vez que estamos potencialmente interessados ​​em negociar 24 horas (pelo menos durante a semana), exigimos uma configuração mais sofisticada do que executar o backtester em uma máquina local de mesa para uso em casa. É vital que criemos uma implantação de servidor remoto robusto do nosso sistema com redundância e monitoramento adequados. Backtesting Histórico - Construímos o objeto Portfolio para nos permitir realizar backtesting realista. Nesta fase, estamos faltando um sistema histórico de armazenamento de dados de carrapatos. Nos artigos subsequentes, analisaremos a obtenção de dados históricos do carrapato e armazená-lo em um banco de dados apropriado, como o HDF5. Trade Database - Eventualmente, gostaríamos de armazenar nossos negócios ao vivo em nosso próprio banco de dados. Isso nos permitirá realizar nossas próprias análises em dados de negociação ao vivo. Uma boa recomendação para um banco de dados relacional seria PostgreSQL ou MySQL. Monitoramento e alta disponibilidade - Como estamos considerando um sistema intradía de alta freqüência, devemos colocar um monitoramento abrangente e uma redundância de alta disponibilidade no local. Isso significa informar sobre o uso da CPU, uso do disco, IO de rede, latência e verificação de que qualquer script periódico esteja configurado para continuar sendo executado. Além disso, precisamos de uma estratégia de backup e restauração. Pergunte-se quais os planos de backup que você teria no lugar se você tivesse grandes posições abertas, em um mercado volátil e seu servidor de repente morreu. Acredite-me, acontece Integração de vários corretores de FIX - No momento estamos fortemente acoplados ao corretor de OANDA. Como eu disse, isso é simplesmente porque eu encontrei sua API e achei que ela era uma oferta moderna. Há muitos outros corretores por aí, muitos dos quais suportam o protocolo FIX. A adição de uma capacidade FIX aumentaria o número de corretores que poderiam ser usados ​​com o sistema. GUI Controle e Relatórios - Agora o sistema é completamente consolecommand baseado em linha. No mínimo, precisaremos de algum gráfico básico para exibir os resultados do backtest. Um sistema mais sofisticado incorporará estatísticas resumidas de negócios, métricas de desempenho de nível estratégico, bem como o desempenho geral do portfólio. Esta GUI poderia ser implementada usando um sistema de janelas multiplataforma, como Qt ou Tkinter. Também pode ser apresentado usando um front-end baseado na web, utilizando um framework web como o Django. Como pode ser visto, há muita funcionalidade deixada no roteiro. Dito isto, cada nova entrada no diário (e contribuições potenciais da comunidade) moverá o projeto para a frente. Tipos de dados decimais Agora que discutimos o plano a longo prazo, quero apresentar algumas das alterações que fiz no código desde a entrada no diário 2. Em particular, quero descrever como modifiquei o código para lidar com os dados decimais - Digite em vez de usar armazenamento em ponto flutuante. Esta é uma mudança extremamente importante, uma vez que as representações de ponto flutuante são uma fonte substancial de erro a longo prazo nos sistemas de gerenciamento de pedidos e portfólio. O Python suporta nativamente representações decimais a uma precisão arbitrária. A funcionalidade está contida na biblioteca decimal. Em particular, precisamos modificar todo valor que aparece em um cálculo de Posição para um tipo de dados Decimal. Isso inclui as unidades, exposição, pips, lucro e lucro percentual. Isso garante que temos o controle total de como os problemas de arredondamento são tratados quando se trata de representações de moeda que possuem duas casas decimais. Em particular, precisamos escolher o método de arredondamento. O Python suporta alguns tipos diferentes, mas nós iremos com ROUNDHALFDOWN. Que arredonda para o inteiro mais próximo com laços indo em direção a zero. Aqui está um exemplo de como o código é modificado para lidar com tipos de dados decimais de suas representações de ponto flutuante anteriores. O seguinte é uma lista de position. py: Observe que devemos fornecer Decimal com um argumento de string, em vez de um argumento de ponto flutuante. Isso ocorre porque uma string especifica precisamente a precisão do valor, enquanto que um tipo de ponto flutuante não. Note-se também que, quando começarmos a armazenar nossos negócios em um banco de dados relacional (conforme descrito acima no roteiro), precisamos ter certeza de que, mais uma vez, usaremos o tipo de dados correto. O PostgreSQL e o MySQL suportam uma representação decimal. É vital que utilizemos esses tipos de dados quando criamos nosso esquema de banco de dados, caso contrário, nos armaremos em erros de arredondamento que são extremamente difíceis de diagnosticar. Para aqueles que estão interessados ​​em uma discussão mais profunda sobre essas questões, em matemática e ciência da computação, Assunto da Análise Numérica abrange questões de armazenamento em ponto flutuante, entre muitos outros tópicos interessantes. Em entradas de diário subseqüentes, vamos discutir como apliquei testes de unidade para o código e como podemos ampliar o software para mais pares de moedas, modificando os cálculos de posição. Código Python Completo Uma vez que o código fonte completo do projeto agora é de código aberto, sob uma licença MIT. Sempre pode ser descoberto no githubmhallsmooreqsforex. Com a documentação que o acompanha. Se você quiser ler as outras entradas da série, siga os links abaixo: Pioneering in Tomorrows Trading Como funciona. Construa Algoritmos em um IDE do navegador, usando Estratégias de modelo e Design de dados gratuito e teste sua estratégia em nossos dados gratuitos e Quando estiver pronto, implemente-o ao vivo para sua corretora. Código em várias linguagens de programação e aproveite o nosso cluster de centenas de servidores para executar o backtest para analisar sua estratégia em ações, FX, CFD, Opções ou Futures Markets. QuantConnect é a próxima revolução no comércio quantitativo, combinando computação em nuvem e acesso aberto a dados. Velocidade sem paralelo aproveita nossa fazenda de servidores para velocidades institucionais do seu computador desktop. Você pode iterar em suas idéias mais rápido do que você já fez antes. Massive Data Library Nós fornecemos uma enorme biblioteca gratuita de dados de resolução de carrapatos de 400 TB que cobre os US Equities, Options, Futures, Fundamentals, CFD e Forex desde 1998. Execução de Classe Mundial Nossos algoritmos de negociação ao vivo estão co-localizados ao lado dos servidores de mercado em Equinix (NY7) Para uma execução rápida, resiliente, segura e ilimitada para os mercados. Tenha algumas ótimas idéias Vamos testá-lo. Comece seu algoritmo Qualidade profissional, Open Data Library Estratégias de projeto com nossa biblioteca de dados cuidadosamente com curadoria, abrangendo mercados globais, do tico à resolução diária. Os dados são atualizados quase que diariamente, para que você possa fazer o backtest sobre os dados mais recentes possíveis, e o viés de sobrevivência livre. Nós oferecemos dados de ticks de ações de volta a janeiro de 1998 para cada símbolo negociado, totalizando mais de 29 mil ações. O preço é fornecido pela QuantQuote. Além disso, temos dados fundamentais da Morning Star para os 8.000 símbolos mais populares para 900 indicadores desde 1998. FOREX amp CFD Oferecemos 100 pares de moedas e 70 contratos CFD cobrindo todas as principais economias fornecidas pela FXCM e pela OANDA. O dados está na resolução de carrapatos, começa em abril de 2007 e é atualizado diariamente. Nós oferecemos comércio de trocas de futuros e citar dados de janeiro de 2009 para o presente, para cada contrato negociado em CME, COMEX e GLOBEX. Os dados são atualizados semanalmente e são fornecidos pela AlgoSeek. Oferecemos negociações de opções e cotações até resolução de minutos, para cada opção negociada na ORPA desde 2007, cobrindo milhões de contratos. Os dados são atualizados dentro de 48 horas e são fornecidos pela AlgoSeek. Colaboração em equipe Encontre novos amigos na comunidade e colabore com nosso recurso de codificação de equipe Compartilhe projetos e veja seu código instantaneamente à medida que eles digitam. Você pode até conceder acesso ao vivo e controlar o algoritmo ao vivo em conjunto. Use nossa mensagem instantânea interna para encontrar futuros membros da equipe para unir forças. Propriedade Intelectual Segura Nosso foco é dar-lhe a melhor plataforma de negociação algorítmica possível e proteger sua valiosa propriedade intelectual. Nós sempre seremos um fornecedor de infra-estrutura e tecnologia primeiro. Quando você estiver pronto para o comércio ao vivo, felizmente, você o ajudará a executar através do seu corretor de eleição. Execute Through Leading Brokerages Weve integrado com corretoras líderes mundiais para fornecer a melhor execução e taxas mais baixas para a comunidade. Estratégias conduzidas por eventos O projeto de um algoritmo não poderia ser mais fácil. Existem apenas duas funções necessárias e cuidamos de tudo o mais. Você apenas inicializa () sua estratégia e lida com os eventos de dados solicitados. Você pode criar novos indicadores, classes, pastas e arquivos com um compilador C completo baseado na web e auto-completar. Estamos empenhados em oferecer-lhe a melhor experiência de design de algoritmo possível. Aumente o seu potencial Opt nos usuários podem ter suas estratégias apresentadas aos clientes hedgefund em um painel de estratégia de estratégia transparente. As estratégias são validadas pelo teste de QuantConnects e negociação ao vivo, dando-lhe uma revisão de código neutro de terceiros. Os hedgefunds interessados ​​podem contatá-lo diretamente através da QuantConnect para oferecer emprego ou financiamento para sua estratégia. Junte-se à nossa comunidade. Temos uma das maiores comunidades comerciais quantitativas do mundo, construindo, compartilhando e discutiendo estratégias através da nossa comunidade. Converse com algumas das mentes mais brilhantes do mundo enquanto exploramos novos domínios de ciência, matemática e finanças.

No comments:

Post a Comment