Friday 12 May 2017

Quantstart Forex Trading



Estratégias de Quant - São eles para você As estratégias de investimento quantitativas evoluíram em ferramentas muito complexas com o advento de computadores modernos, mas as raizes das estratégias vão para trás sobre 70 anos. Eles são geralmente executados por equipes altamente educadas e usar modelos proprietários para aumentar sua capacidade de bater o mercado. Há mesmo off-the-shelf programas que são plug-and-play para aqueles que procuram simplicidade. Quant modelos sempre funcionam bem quando volta testado, mas suas aplicações reais e taxa de sucesso são discutíveis. Enquanto eles parecem funcionar bem em mercados de touro. Quando os mercados se esgotam, estratégias quantirais estão sujeitas aos mesmos riscos que qualquer outra estratégia. A História Um dos fundadores do estudo da teoria quantitativa aplicada às finanças foi Robert Merton. Você só pode imaginar o quão difícil e demorado o processo foi antes do uso de computadores. Outras teorias em finanças também evoluíram a partir de alguns dos primeiros estudos quantitativos, incluindo a base da diversificação de portfólio baseada na moderna teoria da carteira. A utilização de financiamento e cálculos quantitativos levou a muitas outras ferramentas comuns, incluindo uma das mais famosas fórmulas de precificação Black-Scholes, que não só ajuda os investidores a optarem por preços e a desenvolver estratégias, como também ajuda a manter os mercados checados com liquidez. Quando aplicado diretamente ao gerenciamento de portfólio. O objetivo é como qualquer outra estratégia de investimento. Para adicionar valor, alfa ou excesso retorna. Quants, como os desenvolvedores são chamados, compõem modelos matemáticos complexos para detectar oportunidades de investimento. Existem tantos modelos lá fora como quants que desenvolvê-los, e todos afirmam ser o melhor. Uma das estratégias de investimento mais vantajosas é que o modelo, e, finalmente, o computador, faz com que a decisão buysell real, não um humano. Isso tende a remover qualquer resposta emocional que uma pessoa pode experimentar ao comprar ou vender investimentos. As estratégias de Quant são agora aceitas na comunidade de investimento e geridas por fundos mútuos, hedge funds e investidores institucionais. Eles normalmente vão pelo nome alfa geradores. Ou alfa gens. Atrás da cortina Assim como em O Mágico de Oz, alguém está por trás da cortina que conduz o processo. Como com qualquer modelo, seu somente tão bom quanto o ser humano que desenvolve o programa. Embora não exista um requisito específico para se tornar um quant, a maioria das empresas que executam modelos quant combinam as habilidades de analistas de investimento, estatísticos e programadores que codificam o processo para os computadores. Devido à natureza complexa dos modelos matemáticos e estatísticos, é comum ver credenciais como pós-graduação e doutorado em finanças, economia, matemática e engenharia. Historicamente, esses membros da equipe trabalhavam nos back offices. Mas como os modelos de quant tornou-se mais comum, o back office está se movendo para o front office. Benefícios de estratégias Quant Enquanto a taxa de sucesso global é discutível, a razão de algumas estratégias quant trabalho é que eles são baseados em disciplina. Se o modelo estiver certo, a disciplina mantém a estratégia trabalhando com computadores de velocidade relâmpago para explorar ineficiências nos mercados com base em dados quantitativos. Os modelos em si podem ser baseados em tão pouco como algumas razões como PE. Dívida para capital próprio e crescimento de lucros, ou usar milhares de insumos trabalhando juntos ao mesmo tempo. Estratégias bem sucedidas podem pegar em tendências em seus estágios iniciais como os computadores constantemente executar cenários para localizar ineficiências antes que outros fazem. Os modelos são capazes de analisar um grupo muito grande de investimentos simultaneamente, onde o analista tradicional pode estar olhando apenas alguns de cada vez. O processo de triagem pode classificar o universo por níveis de grau como 1-5 ou A-F dependendo do modelo. Isso torna o processo de negociação real muito simples, investindo nos investimentos altamente cotados e vendendo os mais baixos. Modelos Quant também abrem variações de estratégias como longo, curto e longshort. Fundos quant bem sucedidos mantêm um olho afiado no controle de risco devido à natureza de seus modelos. A maioria das estratégias começa com um universo ou benchmark e usa ponderações setoriais e industriais em seus modelos. Isso permite que os fundos controlem a diversificação até certo ponto sem comprometer o próprio modelo. Os fundos Quant funcionam normalmente em uma base de custo mais baixo porque eles não precisam de tantos analistas tradicionais e gerentes de portfólio para executá-los. Desvantagens de estratégias Quant Há razões por que tantos investidores não abraçar totalmente o conceito de deixar uma caixa preta executar seus investimentos. Para todos os fundos quant bem sucedidos lá fora, assim como muitos parecem ser malsucedido. Infelizmente para a reputação dos quants, quando falham, falham grande. Long-Term Capital Management foi um dos mais famosos fundos de hedge, já que foi administrado por alguns dos mais respeitados líderes acadêmicos e dois economistas premiados com o Nobel Memorial, Myron S. Scholes e Robert C. Merton. Durante os anos 90, sua equipe gerou retornos acima da média e atraiu capital de todos os tipos de investidores. Eles eram famosos por não apenas explorar as ineficiências, mas usando o acesso fácil ao capital para criar enormes apostas apalancadas nas direções do mercado. A natureza disciplinada de sua estratégia realmente criou a fraqueza que levou ao seu colapso. Long-Term Capital Management foi liquidada e dissolvida no início de 2000. Seus modelos não incluem a possibilidade de que o governo russo poderia inadimplência em parte de sua própria dívida. Esse evento desencadeou eventos e uma reação em cadeia ampliada pelo caos causado pela alavancagem. A LTCM estava tão envolvida com outras operações de investimento que seu colapso afetou os mercados mundiais, desencadeando eventos dramáticos. A longo prazo, o Federal Reserve interveio para ajudar, e outros bancos e fundos de investimento apoiou LTCM para evitar quaisquer danos adicionais. Esta é uma das razões pelas quais os fundos podem fracassar, pois são baseados em eventos históricos que podem não incluir eventos futuros. Enquanto uma equipe de quant forte vai constantemente adicionando novos aspectos aos modelos para prever eventos futuros, é impossível prever o futuro cada vez. Quant fundos também podem se tornar oprimido quando a economia e os mercados estão experimentando maior do que a volatilidade média. Os sinais de compra e venda podem vir tão rapidamente que a alta rotatividade pode criar comissões elevadas e eventos tributáveis. Quant fundos também podem representar um perigo quando eles são comercializados como à prova de urso ou são baseados em estratégias de curto. Previsões de recessão. Usando derivativos e combinando alavancagem pode ser perigoso. Uma vez errada pode levar a implosões, que muitas vezes fazem a notícia. O Bottom Line As estratégias de investimento quantitativo evoluíram de caixas pretas de back office para ferramentas de investimento mainstream. Eles são projetados para utilizar as melhores mentes do negócio e os computadores mais rápidos tanto para explorar as ineficiências e alavancar uso para fazer apostas no mercado. Eles podem ser muito bem sucedidos se os modelos têm incluído todas as entradas direito e são ágeis o suficiente para prever eventos anormais do mercado. Por outro lado, enquanto os fundos quant estão rigorosamente testados até que funcionam, a sua fraqueza é que eles dependem de dados históricos para o seu sucesso. Embora o estilo de estilo de investimento tem seu lugar no mercado, é importante estar ciente de suas deficiências e riscos. Ser coerente com as estratégias de diversificação. É uma boa idéia para tratar estratégias quant como um estilo de investimento e combiná-lo com estratégias tradicionais para alcançar a diversificação adequada. Um tipo de imposto incidente sobre ganhos de capital incorridos por pessoas físicas e jurídicas. Os ganhos de capital são os lucros que um investidor. Uma ordem para comprar um título igual ou inferior a um preço especificado. Uma ordem de limite de compra permite que traders e investidores especifiquem. Uma regra do Internal Revenue Service (IRS) que permite retiradas sem penalidade de uma conta IRA. A regra exige que. A primeira venda de ações por uma empresa privada para o público. IPOs são muitas vezes emitidos por empresas menores, mais jovens à procura da. DebtEquity Ratio é o rácio da dívida utilizado para medir a alavancagem financeira de uma empresa ou um rácio da dívida utilizado para medir um indivíduo. Um tipo de estrutura de remuneração que os gestores de fundos de hedge normalmente empregam em que parte da remuneração é baseado no desempenho. Diário de Negociação do Forex 5 - Negociação de Pares de Moedas Múltiplas Ontem publiquei algumas alterações importantes ao software QSForex. Essas mudanças aumentaram a utilidade do sistema significativamente para o ponto onde ele está quase pronto para backtesting de dados de vários dias em um intervalo de pares de moedas. As seguintes alterações foram lançadas no Github: Alteração adicional dos objetos Posição e Carteira para permitir que vários pares de moeda sejam negociados, bem como moedas que não são denominadas na moeda da conta. Assim, uma conta em GBP pode agora negociar EURUSD, por exemplo. Revisão completa de como a posição e carteira de cálculo abre, fecha, adições e remoções de unidades. O objeto Position realiza agora o levantamento pesado deixando um objeto Portfolio relativamente magro. Adição da primeira estratégia não-trivial, ou seja, a conhecida estratégia Crossover média móvel com um par de médias móveis simples (SMA). Modificação para backtest. py para torná-lo single-threaded e determinista. Apesar do meu otimismo de que uma abordagem multi-threaded wouldnt ser muito prejudicial para a precisão de simulação, achei difícil obter resultados backtesting satisfatória com uma abordagem multi-threaded. Introduziu um script de saída muito básico baseado em Matplotlib para visualizar a curva de equidade do portfólio. A geração da curva de equidade está numa fase inicial e ainda requer muito trabalho. Como mencionei na entrada anterior. Para aqueles de vocês que não estão familiarizados com QSForex e estão vindo para esta série diário forex pela primeira vez, eu sugiro fortemente ter uma leitura das seguintes entradas diário para chegar até a velocidade com o software: Bem como a página Github para QSForex : Suporte a Moedas Múltiplas Um recurso que eu tenho continuamente discutido nessas entradas de diário é a capacidade de suportar vários pares de moedas. Nesta fase Ive agora modificado o software para permitir diferentes denominações de conta, uma vez que anteriormente GBP era a moeda codificada. Também é possível negociar em outros pares de moedas, exceto aqueles que consistem em uma base ou cotação em ienes japoneses (JPY). O último é devido a como carrapato tamanhos são caclulated em JPY moedas. Para conseguir isso, modifiquei como o lucro é calculado quando as unidades são removidas ou a posição é fechada. Aqui está o snippet atual para calcular pips, no arquivo position. py: Se fecharmos a posição para realizar um ganho ou perda, precisamos usar o snippet a seguir para closeposition. Também no arquivo position. py: Em primeiro lugar, obtemos os preços de lances e pedidos tanto para o par de moedas como para o par de moedas. Por exemplo, para uma conta denominada em GBP, onde estamos a negociar EURUSD, devemos obter preços para USDGBP, uma vez que EUR é a moeda base e USD é a cotação. Nesta fase, verificamos se a posição em si é uma posição longa ou curta e, em seguida, calcular o preço apropriado remover e citar remover preço, que são dadas por removeprice e qhclose, respectivamente. Nós então atualizamos os preços atuais e médios dentro da posição e finalmente calculamos o PampL multiplicando os pips, o preço de remoção do quotehome e então o número de unidades estava se fechando. Eliminamos completamente a necessidade de discutir a exposição, que era uma variável redundante. Esta fórmula então corretamente fornece o PampL contra qualquer (não-JPY denominado) par de moedas. Revisão do Posicionamento e Manuseio de Carteiras Além da capacidade de negociar em vários pares de moedas, também aprimorei como a posição e o portfólio compartilham a responsabilidade de abrir e fechar posições, bem como somar e subtrair unidades. Em particular, Ive mudou muito do código de manipulação de posição que estava no portfolio. py para position. py. Isso é mais natural, pois a posição deve ser cuidar de si mesmo e não delegá-lo para o portfólio Em particular, o addunits. Removeunits e métodos de closeposition foram criados ou aprimorados: Nos dois últimos você pode ver como a nova fórmula para cálculo de lucro é implementada. Grande parte da funcionalidade da classe Portfolio foi assim reduzida de forma correspondente. Em particular os métodos addnewposition. Addpositionunits. As unidades de posicionamento de remoção e a posição de fechamento foram modificadas para levar em conta o fato de que o trabalho de cálculo está sendo feito no objeto Posição: Essencialmente, todos (além da adição) simplesmente verificam se a posição existe para esse par de moedas e então chamam o método de Posição correspondente , Tendo em conta os lucros, se necessário. Estratégia de Crossover Média em Movimento Nós discutimos a estratégia de Crossover Médio em Movimento antes no QuantStart. No contexto do comércio de acções. É uma estratégia muito útil para o indicador de teste porque é fácil replicar os cálculos manualmente (pelo menos em frequências mais baixas), para verificar se o backtester está se comportando como deveria. A idéia básica da estratégia é a seguinte: São criados dois filtros separados de média móvel simples, com períodos de retrocesso variáveis, de uma série temporal específica. Os sinais para comprar o ativo ocorrem quando a média móvel de retrocesso mais curta excede a média móvel de retrocesso mais longa. Se a média mais longa subseqüentemente exceder a média mais curta, o ativo é vendido de volta. A estratégia funciona bem quando uma série de tempo entra em um período de forte tendência e, em seguida, lentamente inverte a tendência. A implementação é simples. Em primeiro lugar, nós fornecemos um método calcrollingsma que nos permite utilizar mais eficientemente o cálculo de SMA de período de tempo anterior para gerar o novo, sem ter que recalcular completamente o SMA em cada passo. Em segundo lugar, geramos sinais em dois casos. No primeiro caso geramos um sinal se o SMA curto excede o SMA longo e não foram longos o par de moedas. No segundo caso geramos um sinal se o SMA longo exceder o SMA curto e já estamos longos. Eu configurei a janela padrão para ser 500 carrapatos para o SMA curto e 2.000 carrapatos para o SMA longo. Obviamente, em uma configuração de produção esses parâmetros seriam otimizados, mas eles funcionam bem para nossos propósitos de teste. Single-Threaded Backtester Outra alteração importante foi modificar o backtesting componente a ser single-threaded, em vez de multi-threaded. Eu fiz essa alteração porque eu estava tendo um tempo muito difícil sincronizar os segmentos para executar de uma maneira que iria ocorrer em um ambiente ao vivo. Ele basicamente significava que os preços de entrada e saída eram muito irreal, muitas vezes ocorrendo (virtual) horas após o tiquetaque real tinha sido recebido. Daí eu incorporei o streaming de objetos TickEvent para o loop backtesting, como você pode ver no trecho a seguir de backtest. py: Observe a linha ticker. streamnexttick (). Isso é chamado antes de uma sondagem da fila de eventos e, como tal, sempre garante que um novo evento tick terá chegado antes da fila é pesquisada novamente. Em particular, isso significa que um sinal é executado à medida que chegam novos dados de mercado, mesmo que haja algum atraso no processo de pedido devido ao deslizamento. Ive também definir um valor maxiters que controla quanto tempo o backtesting loop continua. Na prática, este terá de ser bastante grande quando se lida com várias moedas ao longo de vários dias, mas Ive configurá-lo para um valor padrão que permite um único dias dados de um par de moedas. O método streamnexttick da classe manipulador de preço é semelhante ao streamtoqueue, exceto que ele chama o iterador next () método manualmente, em vez de executar o ticking streaming em um loop for: Observe que ele pára após a recepção de uma exceção StopIteration. Isso permite que o código para continuar em vez de falhar na exceção. Matplotlib Output Ive também criou um script de saída Matplotlib muito básico para exibir a curva de equidade. Output. py atualmente vive no diretório backtest do QSForex e é dado abaixo: Observe que há uma nova variável settings. py agora chamada OUTPUTRESULTSDIR. Que deve ser definido em suas configurações. Eu tenho que apontar para um diretório temporário em outro lugar no meu sistema de arquivos como eu não quero acidentalmente adicionar qualquer equity backtest resultados para a base de código A curva de equidade funciona com um valor de equilíbrio adicionado a uma lista de dicionários, com um dicionário correspondente a um Horário. Uma vez concluído o back-test, a lista de dicionários é convertida em um Pandas DataFrame eo método tocsv é usado para produzir o arquivo equity. csv. Este script de saída simplesmente lê no arquivo e traça a coluna de equilíbrio do DataFrame subseqüente. Você pode ver o snippet para os métodos appendequityrow e outputresults da classe Portfolio abaixo: Cada vez que executesignal é chamado, o método anterior é chamado e acrescenta o valor do timestampbalance ao membro equity. No final do backtest é chamado outputresults que simplesmente converte a lista de dicionários para um DataFrame e, em seguida, saídas para o diretório OUTPUTRESULTSDIR especificado. Infelizmente, esta não é uma forma particularmente adequada de criar uma curva de equidade, uma vez que só ocorre quando um sinal é gerado. Isso significa que não leva em conta PampL não realizada. Enquanto isso é como ocorre a negociação real (você havent realmente fez algum dinheiro até que você fechar uma posição) isso significa que a curva de equidade permanecerá completamente plana entre as atualizações de saldo. Pior, o Matplotlib usará a interpolação linear entre esses pontos, proporcionando assim a falsa impressão da PampL não realizada. A solução para este problema é criar um rastreador PampL não realizado para a classe Position que actualiza correctamente em cada tick. Isso é um pouco mais computacionalmente caro, mas permite uma curva de equidade mais útil. Este recurso está planejado para uma data posterior Próximas etapas A próxima grande tarefa para QSForex é permitir backtesting de vários dias. Atualmente, o objeto HistoricCSVPriceHandler só carrega um valor de dias únicos de dados de marca DukasCopy para qualquer par de moedas especificado. A fim de permitir testes de vários dias, será necessário carregar e transmitir todos os dias sequencialmente para evitar o preenchimento da memória RAM com toda a história dos dados de carrapatos. Isso exigirá uma modificação de como o método streamnexttick funciona. Uma vez que é completo que permitirá backtesting estratégia de longo prazo em vários pares. Outra tarefa é melhorar a saída da curva de equidade. Para calcular qualquer uma das métricas usuais de desempenho (como a Taxa Sharpe), precisaremos calcular os retornos percentuais em um determinado período de tempo. No entanto, isso requer que nós bin os dados de carrapatos em barras, a fim de calcular um retorno para um determinado período de tempo. Esse binning deve ocorrer em uma freqüência de amostragem que é semelhante à freqüência de negociação ou o Índice de Sharpe não será reflexo do verdadeiro risco da estratégia. Este binning não é um exercício trivial porque há lotes das suposições que vão em gerar um preço para cada bin. Uma vez que estas duas tarefas estão completas, e dados suficientes foram adquiridos, estaremos em uma posição para backtest uma ampla gama de tick-data com base em estratégias de forex e produzir curvas de equidade líquido da maioria dos custos de transação. Além disso, será extremamente simples para testar essas estratégias na prática papel-trading conta fornecida pela OANDA. Isso deve permitir que você tome decisões muito melhores sobre se deve executar uma estratégia em comparação com um sistema de backtesting mais orientado para pesquisa. Começando com o Diário de Negociação TradingForex Quantitativo 3 - Abrir Sourcing o Sistema de Negociação de Forex Na entrada de hoje do Diário de Negociação de Forex Eu quero discutir o plano de longo prazo para o sistema de negociação forex. Além disso, eu quero descrever como eu usei o tipo de dados decimais Pythons para fazer cálculos mais precisos. Até o momento, estamos experimentando a OANDA Rest API para ver como ela se compara à API fornecida por Interactive Brokers. Weve também viu como adicionar em um elemento de replicação básica de portfólio como o primeiro passo para um bom sistema de backtesting conduzido por eventos. Ive também teve alguns comentários úteis sobre ambos os artigos anteriores (1 e 2), o que sugere que muitos de vocês estão interessados ​​em mudar e estender o código-se. Open Sourcing Forex Trading System Pelas razões acima descritas eu decidi abrir-fonte do sistema de negociação forex. O que isso significa? Significa que todos os códigos atuais e futuros estarão disponíveis gratuitamente, sob uma licença MIT open source liberal, no site de controle de versão Github no seguinte URL: githubmhallsmooreqsforex. Para aqueles de vocês que já usaram git e Github antes, você será capaz de git clone 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 em githubmhallsmooreqsforex. Para aqueles de vocês que são novos para o controle de versão de origem, você provavelmente vai querer ler sobre como git (e controle de versão em geral) funciona com o fantástico livre ebook Pro Git. Vale a pena gastar algum tempo aprendendo sobre o controle de origem, pois ele vai lhe poupar uma enorme quantidade de dor de cabeça futuro, se você gastar muito tempo de programação e atualização de projetos O início rápido para um sistema Ubuntu é instalar git: Você precisará fazer Um diretório para o projeto qsforex para viver e clonar o projeto a partir do site Github da seguinte forma: Neste ponto, você precisará criar um ambiente virtual no qual executar o código: Você precisará instalar os requisitos (isso vai levar Algum tempo): Finalmente, você precisará criar um link simbólico em seu ambiente virtual Python para permitir que você digite qsforex de importação em seu código (e executá-lo): Como mencionei nas entradas anteriores, você precisará criar as variáveis ​​de ambiente necessárias Para suas credenciais de autenticação OANDA. Consulte a entrada 2 do diário 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 de isenção de responsabilidade e uma garantia sobre como usar o código. Como o software está no modo alfa, essas instruções se tornarão mais simples à medida que o tempo avança. Em particular, vou tentar envolver 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, assim como o 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 orientada para a investigação backtesting situações. Latência, interrupções de servidores, 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 de tick (bidask timestamps), seremos capazes de incorporar o spread nos custos de transação. Podemos também modelar o deslizamento. É menos direto modelar o impacto no mercado, embora este seja menos uma preocupação em quantidades negociando menores. Além dos custos de transação, queremos modelar o gerenciamento robusto da carteira 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 Orientada a Eventos - O sistema de negociação forex foi concebido como um sistema orientado a eventos a partir do zero, pois é assim que um sistema de negociação intraday será implementado em um ambiente ao vivo . Streaming de preços - Temos um objeto básico de streaming de preços. Atualmente, trata-se da assinatura de apenas um par, mas podemos modificá-lo facilmente para subscrever vários pares de moedas. Geração de sinal - Podemos incorporar estratégias de negociação (baseadas diretamente nos preços de atributos passados ​​e atuais) usando o objeto Estratégia, que cria objetos SignalEvent. Execução de Ordens - Temos um sistema de execução de ordens ingênuo que envia cegamente ordens do Portfólio para a 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 pode levar a custos de transação reduzidos. GBP Moeda Base - Para manter as coisas simples, eu só escrevi o sistema para a moeda base GBP. Este é talvez o aspecto mais importante a modificar, dado quantos de vocês terão práticas contas denominadas em USD, EUR, CAD, JPY, AUD e NZD GBPUSD Trading - Eu escolhi o cabo como o par de moedas para testar a posição inicial e os objetos Portfolio com. Manipular vários pares de moedas é uma etapa importante. Isto implicará a modificação dos cálculos da posição e da carteira. Decimal Manipulação - 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 irão acumular. Consulte este fantástico artigo sobre representações de ponto flutuante para obter mais detalhes. LongShort Trading - entre entradas de diário 2 e 3 eu adicionei a capacidade de curto um par de moedas (em oposição a apenas ser capaz de ir por muito tempo). Crucialmente, isso também é testado unidade. Manipulação de portfólio local - Na minha opinião, realizar um backtest que infla o desempenho da estratégia devido a suposições irrealistas é irritante na melhor das hipóteses e extremamente não rentável na pior Apresentação de um objeto de portfólio local que replica os cálculos OANDA significa que podemos verificar nossos cálculos internos ao realizar a prática Negociação. O que nos dá maior confiança quando mais tarde usamos esse mesmo objeto de portfólio para backtesting em dados históricos. Testes unitários para PositionPortfolio - Embora eu não tenha mencionado isso diretamente nas entradas 1 e 2 do diário, eu realmente tenho escrito 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, deve-se estar extremamente confiante de que eles funcionam como esperado. Um benefício adicional de tais testes é que eles permitem que o cálculo subjacente seja modificado, de forma que se todos os testes ainda passarem, podemos estar confiantes de que o sistema geral continuará a se comportar como esperado. Nesta fase, o Forex Trading System está faltando a seguinte funcionalidade: Manuseio de deslizamento - O sistema está gerando atualmente uma grande quantidade de deslizamento devido à natureza de alta freqüência dos dados de carrapatos fornecidos pela OANDA. Isso significa que o saldo da carteira calculado localmente não reflete o saldo calculado pela OANDA. Até que o correto manuseio de eventos eo ajuste de deslizamento sejam realizados, isso significa que um backtest não refletirá corretamente a realidade. Moedas de Base 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. Pares múltiplos da moeda - Igualmente nós necessitamos suportar os pares principais da moeda corrente além do cabo (GBPUSD). Existem dois aspectos para isso. O primeiro é tratar 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 várias posições para que possamos trocar uma carteira de pares de moedas. Gestão de Risco - Muitos backtests de pesquisa ignoram completamente o gerenciamento de risco. Infelizmente isso é geralmente necessário para a brevidade na descrição das regras de uma estratégia. Na realidade, devemos - deve - usar uma sobreposição de risco quando a negociação, caso contrário, é extremamente provável que vamos sofrer uma perda substancial em algum momento. Isso não quer dizer que a gestão de risco possa impedir isso completamente, mas certamente o torna menos provável. Otimização de Carteira - Em um cenário institucional teremos um mandato de investimento, que ditará um robusto sistema de gerenciamento de portfólio com várias regras de alocação. Em um ambiente de varejo, talvez desejemos usar uma abordagem de dimensionamento de posição, como o Critério de Kelly, para maximizar nossa taxa de crescimento composta de longo prazo. Estratégias Robustas - Eu só tenho demonstrado algum sinal aleatório simples gerando estratégias de brinquedo até à data. Agora que estamos começando a criar um sistema de negociação intraday forex confiável, devemos começar a realizar algumas estratégias mais interessantes. As futuras entradas do diário concentrar-se-ão em estratégias extraídas de uma mistura de indicadores técnicos, bem como modelos de séries temporais e técnicas de aprendizagem de máquinas. Implantação remota - Como estamos potencialmente interessados ​​em negociar 24 horas (pelo menos durante a semana), precisamos de uma configuração mais sofisticada do que executar o backtester em uma máquina desktoplaptop local em casa. É vital que criemos uma implantação de servidor remoto robusta do nosso sistema com redundância e monitoramento apropriados. 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. Em artigos subseqüentes veremos a obtenção de dados históricos de carrapatos e armazená-los em um banco de dados apropriado, como o HDF5. Base de dados de comércio - Eventualmente nós desejamos armazenar nossos comércios vivos em nossa própria base 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 - Já que estamos considerando um sistema intraday de alta freqüência, precisamos implementar um monitoramento abrangente e redundância de alta disponibilidade. Isso significa informar sobre o uso da CPU, uso de disco, IO de rede, latência e verificação de que todos os scripts periódicos estão configurados para continuar em execução. Além disso, precisamos de uma estratégia de backup e restauração. Pergunte a si mesmo que planos de backup você teria no lugar se você tivesse grandes posições abertas, em um mercado volátil, e seu servidor de repente morreu. Acredite, isso acontece Integração Multiple BrokerFIX - No momento estamos fortemente acoplados ao corretor OANDA. Como eu disse isso é simplesmente porque eu me deparei com sua API e achei que fosse uma oferta moderna. Há uma abundância de outros corretores lá fora, muitos dos quais suportam o protocolo FIX. Adicionar um recurso FIX aumentaria o número de corretores que poderiam ser usados ​​com o sistema. GUI Controle e Relatórios - Agora o sistema é completamente consolecommand linha baseada. No mínimo, precisaremos de alguns gráficos básicos para exibir os resultados do backtest. Um sistema mais sofisticado incorporará estatísticas sumárias de negócios, métricas de desempenho em nível de estratégia, bem como o desempenho geral do portfólio. Essa GUI pode ser implementada usando um sistema de janelas multi-plataforma como Qt ou Tkinter. Ele também pode ser apresentado usando um web-front-end, utilizando um web-framework, como Django. Como pode ser visto, há uma grande quantidade de funcionalidade deixada no roteiro. Dito isto, cada nova entrada do diário (e possíveis contribuições da comunidade) moverá o projeto para a frente. Tipos de Dados Decimais Agora que discutimos o plano de longo prazo, quero apresentar algumas das alterações que fiz ao código desde a entrada do diário 2. Em particular, quero descrever como modifiquei o código para lidar com os dados decimais - Tipo em vez de usar armazenamento em ponto flutuante. Essa é uma mudança extremamente importante, pois as representações de ponto flutuante são uma fonte substancial de erro de longo prazo nos sistemas de gerenciamento de carteira e de pedidos. Python nativamente suporta representações decimais para uma precisão arbitrária. A funcionalidade está contida dentro da biblioteca decimal. Em particular, precisamos modificar - cada valor que aparece em um cálculo de posição para um tipo de dado decimal. Isso inclui as unidades, exposição, pips, lucro e lucro percentual. Isso garante que estamos no controle total de como as questões de arredondamento são tratadas ao lidar com representações de moeda que têm duas casas decimais de precisão. Em particular, precisamos escolher o método de arredondamento. Python suporta alguns tipos diferentes, mas nós vamos ir com ROUNDHALFDOWN. Que arredonda para o inteiro mais próximo com gravatas indo para zero. Aqui está um exemplo de como o código é modificado para manipular tipos de dados decimais de suas representações de ponto flutuante anteriores. A seguir está uma lista de position. py: Observe que devemos fornecer Decimal com um argumento de seqüência de caracteres, em vez de um argumento de ponto flutuante. Isso ocorre porque uma seqüência de caracteres está precisamente especificando a precisão do valor, enquanto que um tipo de ponto flutuante não. Observe também que quando começamos a armazenar nossos negócios em um banco de dados relacional (conforme descrito acima no roteiro), precisaremos ter certeza de que usamos o tipo de dados correto novamente. PostgreSQL e MySQL suportam uma representação decimal. É vital que nós utilizamos estes tipos de dados quando criamos o nosso esquema de banco de dados, caso contrário, vamos correr em erros de arredondamento que são extremamente difíceis de diagnosticar. Para aqueles que estão interessados ​​em uma discussão mais aprofundada dessas questões, em matemática e ciência da computação, o Assunto de Análise Numérica aborda questões de armazenamento em ponto flutuante, entre muitos outros tópicos interessantes. Nas entradas subseqüentes do diário vamos discutir como eu apliquei o teste de unidade ao código e como podemos estender o software a mais pares de moedas, modificando os cálculos de posição. Full Python Code Desde que o código-fonte completo para o projeto é agora de código aberto, sob uma licença MIT. Ele sempre pode ser encontrado em githubmhallsmooreqsforex. Com a documentação anexa. Se você gostaria de ler as outras entradas da série, por favor, siga os links abaixo: Apenas começando com Quantitative Trading

No comments:

Post a Comment