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 descrever 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 em ambos os 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 liberal MIT open source, no site de controle de versão do Github no seguinte URL: github / mhallsmoore / qsforex. Para aqueles de vocês que usaram git e Github antes, você poderá clonar o repo 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 no github / mhallsmoore / qsforex. Para aqueles 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 gratuito Pro Git. Vale a pena passar algum tempo aprendendo sobre o controle de origem, pois isso irá poupar-lhe uma enorme quantidade de dor de cabeça futura se você gastar muito tempo programando e atualizando projetos. O início rápido de 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 a 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 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 de lance / pedido), 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 intradiário 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 do tiquete passado e atual) usando o objeto Estratégia, que cria objetos do 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 de base GBP - Para manter as coisas simples, eu apenas 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 GBP / USD Trading - Escolhi o cabo como o par de moedas para testar a posição inicial e Objetos de portfólio 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 se acumulam. Por favor, veja este fantástico artigo sobre representações de ponto flutuante para mais detalhes. Trocas Longas / Curtas - Entre as entradas diárias 2 e 3 adicionei a capacidade de reduzir um par de moedas (em vez de apenas poder aguentar). 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 posição / portfólio - Embora eu 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 conforme o 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 forem aprovados, 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 um grande deslizamento devido à natureza de alta freqüência do tick dados 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 (GBP / USD). 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 um ambiente de varejo / pessoal, talvez desejemos usar uma abordagem de dimensionamento de posição, como o Critério de Kelly, para maximizar nossa taxa de crescimento combinada 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. As entradas futuras do diário concentrar-se-ão em estratégias tiradas de uma mistura de indicadores / filtros 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 desktop / laptop em casa. É vital que criemos uma implantação de servidor remoto robusto do nosso sistema com redundância e monitoramento adequados. Histórico de Backtesting - 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, E / S 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 morreu de repente. Acredite, isso acontece Integração de vários corretores / 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 baseado em console / linha de comando. 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 de longo prazo, eu quero apresentar algumas das mudanças que fiz no código desde a entrada do diário 2. Em particular, quero descrever como eu modifiquei o código para lidar com o Decimal data - Digite em vez de usar o 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 para 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 informática, O assunto da Análise Numérica cobre 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 github / mhallsmoore / qsforex. Com a documentação que o acompanha. Se você quiser ler as outras entradas da série, siga os links abaixo: O Universo de Negociação Algorítmica e Autotrading abaixo, encontre uma lista das várias ferramentas e serviços que I8217ve encontrou que ajudam a negociar ações, futuros, divisas e Opções, além de desenvolver programas de negociação algorítmica para sistematizar a negociação desses instrumentos. Alguns desses sites cumprem inúmeras funções e, portanto, estão listados em várias seções. Atualizado constantemente. Por favor, deixe-me saber se você gostaria que seu site ou serviço fosse adicionado a esta lista. Testadores de estoque e Backtesters Ferramentas que permitem ao usuário visualizar por vários critérios para encontrar ações e, em vários casos, testar como os investimentos com base nesses critérios teriam realizado. Os analgésicos são t ools que permitem testar uma estratégia usando dados históricos para ver como ele pode ter feito hipoteticamente. Muito útil para refinar e testar ideias comerciais e criar regras para negociação algorítmica bem-sucedida. Alguns sites requerem habilidades de programação, e alguns são apontados e clicados. Websites de aconselhamento e análise que lhe proporcionam a capacidade de criar suas próprias carteiras e ver como elas podem executar ou importar carteiras existentes para analisar o desempenho contínuo da faixa Seleção do modelo A forma mais básica de autotrading, envolve a criação de uma conta, escolhendo um modelo ( Ou seja, investir com base no seu perfil de risco, investir no setor de saúde, investir com base no que os hedge funds grandes estão comprando, etc.) e depois configurá-lo e esquecê-lo. No que diz respeito à negociação algorítmica, esta é a forma mais básica. Seleção do Gerente Esta opção é o núcleo da autotrading. Faça a sua diligência nos sistemas de negociação fornecidos, selecione um ou mais sistemas de negociação e faça-o negociar em sua conta. Algumas dessas opções exigem uma conta configurada no corretor preferido do serviço8217s, mas, em todos os casos, você poderá ver trocas em sua conta na medida em que acontecer. Alguns deles são baseados em modelos de negociação algorítmica, e alguns são negócios discricionários pelo gerente do modelo. Menção de honra: a autotravação da funcionalidade de novosletários fornecida por várias corretoras, como o OptionsXpress (Xecute e a OX XML API, são descontinuadas. Muito obrigado, Schwab), Trademonster. Atendimento. Etc. Social Conecte sua conta a esses serviços e analise seus negócios, ou faça-os enviar automaticamente no Twitter. Facebook. Ou o Google. Compartilhe idéias e aprenda com outros enquanto eles negociam. Do It Yourself Quer tentar sua mão no desenvolvimento de seus próprios modelos de negociação algorítmica e automatizar suas próprias estratégias. Aqui estão os sites que lhe dão as ferramentas para fazê-lo. Talvez você precise executar o software em seu computador para executar os negócios, no entanto. Para programadores: para aqueles que desejam projetar algoritmos através de uma interface visual (ponto-e-clique, planilha ou outra): Corretoras com API Tudo configurado com suas ferramentas e algoritmos Agora você precisa de um lugar para negociar. Esperemos que mais corretores implementem APIs RESTful para permitir que os comerciantes usem suas linguas de programação e interfaces de escolha. Alternativa Não investir em ações, mas ainda é uma maneira de diversificar seus investimentos e ter um processo de investimento automatizado. Educação Saiba sobre finanças, negociação e programação. Negociação virtual negocie com uma conta virtual para aprimorar suas habilidades e, em alguns casos, ganhe recompensas ou dinheiro. INTJ Capital diz: depende da sua capacidade de programação. Aqueles de nós que não são programadores podem otimizar usando o Excel 8217s Solver. Algumas plataformas que requerem capacidade de programação são a Zipline (a versão open source de Quantopian, que supostamente possui capacidades de otimização) ou o MetaTrader 5 (requer proficiência em MQL, pode ser fornecido gratuitamente pelo seu corretor), ou a plataforma R foi bem desenvolvida Pacotes de otimização, mas é preciso conhecer o idioma R. Se você encontrar outras soluções, informe-me, como também é algo com o qual eu luto. Grande artigo. Esta deve ser a lista mais abrangente que já vi. Obrigado por criar esta lista. Eu sou um comerciante da Algo e uso a Tradier API. Estou apenas começando a olhar para algumas das ferramentas listadas acima. Posts recentes Comentários recentes Categorias
Comments
Post a Comment