Sunday, 22 April 2018

Estratégia de negociação de cointegração forex


xmphforex.


& quot; Quando a maré se apagar, você pode dizer quem está nadando nu & quot;


R para Metatrader.


Pós-navegação.


MT4 - & gt; Sessões Multi-R para análise de ticks.


A memória compartilhada entre várias sessões de R mencionadas em meu post anterior me fez pensar & # 8230; algum potencial de fato. Como resultado, investiguei mais usando (chamando) várias sessões de R a partir do mesmo script MT4. Especificamente, eu queria ter uma compreensão mais clara do tempo necessário para executar um raio rápido & amp; processamento morto lento, estando no mesmo script MT4 e sem impedir a análise de ticks em tempo real (isto é, o potencial HFT pelo menos no lado do recebimento + processamento).


Eu desenhei o seguinte cenário para comparar performances:


Sessão R única chamada a cada atualização de tique, exibindo Bid / Ask @ tick-update e usando ChartSeries para traçar 500 barras ou 10.000 barras & # 8211; Barras são geradas na função Init (). 2 sessões R chamadas sequencialmente, primeira sessão R exibindo o Bid / Ask @ tick-update, a segunda usando ChartSeries para plotar 500 barras ou 10.000 como anteriormente 2 sessões R, mas onde a segunda sessão R é executada de forma assíncrona, a primeira sessão plotando o Bid / Ask em @ tick-update, o segundo usando ChartSeries para traçar 500 bar / 10.000 bar.


O gráfico de 10.000 barras é usado para amplificar ainda mais as possíveis observações antecipadas feitas com os 500 bar (isso é um atraso, ou até mesmo uma perda, de carrapatos devido ao tempo necessário para "renderizar" o gráfico sequencialmente). As duas principais áreas de preocupação que tive foram a cooperação de duas sessões de R no mesmo script e a segunda o tempo necessário para realizar a chamada assíncrona.


Os resultados são apresentados em seguida; O eixo y é o número de pulsos (GbpUsd) e o eixo x é o tempo necessário para executar um loop de início MT4 completo em [ms].


CONCLUSÃO: Fiquei muito surpreso com o comportamento do modo assíncrono do MT4R. O custo de verificar se uma chamada assíncrona está pendente de re-emissão antes de outra chamada Asynch é de cerca de 1ms. Isso, adicionado aos 1-2ms necessários para exibir Bid / Ask @ tick-update, mostrava um sistema de processamento de dados extremamente rápido.


Embora eu não esteja muito feliz com a configuração, pois acho que um multithread (ou mpi) do c ++ teria sido melhor (através do Rcpp ou outro), eu realmente não posso descartar o óbvio que baseado nestes simples testes, a configuração multissessão da R Asynch parece perfeitamente viável para um sistema de negociação ao vivo. Eu até acho que vou empurrar os limites para testes de negociação HFT, para o qual eu provavelmente terá que recompilar Blas e Atlas de qualquer maneira.


Finalmente, as próximas estratégias devem ser projetadas para separar o processamento em tempo real do processamento de assinaturas. Além disso, ainda não avaliei o tempo necessário para enviar sinais de negociação de R & gt; MT4, também não avaliei o tempo da Corretora para aceitar tal sinal (o que é o ponto de processamento de dados a 2-5ms se os sinais de negociação forem executados a 250ms)


Multithreading em R (ou outros tipos de programação não sequencial)


Considerando que o envio de dados do tick de MT4 para R requer menos de 2ms, mas que o gráfico 4 diferentes tempos (1min, 15min, 30min e 1hour) a cada tick-update pode exigir mais de 250ms (dependendo do número de barras no histórico) , Eu acho que é fundamental investigar mais em diferentes tipos de programação não sequencial e R, especificamente multithreading ou programação paralela.


De fato, embora gráficos sejam perfeitamente inúteis para nosso propósito de negociação algorítmica, é um exemplo valioso para demonstrar um loop principal que ainda recebe atualizações de ticks a uma taxa de poucos milissegundos, enquanto outro thread & # 8221; mapearia um intervalo de tempo diferente a cada 1/2 segundo, sem afetar a coleta de ticks em tempo real.


Juntamente com a avaliação da investigação de transferência de dados MT4 & Gt; R, esta é outra área importante para esclarecer o avanço anterior no mundo do design de sistema (a parte divertida), considerando que nosso objetivo é alcançar uma plataforma de negociação de alta qualidade com Softwares Open Source .


Atualmente, estou investigando:


Computação paralela em R através de Rmpi, Snow. Eu encontrei esse exemplo específico aplicado à otimização de um sistema algorítmico em dados de backtested em Revolutionalytics. Isso me conforta dizendo que eu provavelmente estou seguindo o caminho certo. Uma lista de computação de alto desempenho R pode ser encontrada aqui. Estratégias multiencadeadas através da Memória Compartilhada Rcpp entre várias sessões de R. O autor mencionou a motivação de seu exemplo para o desenvolvimento de sistemas de negociação de alta frequência. Para esse propósito, o pacote R nws pode ser mais bem investigado. Novamente, também é possível usar conexões de soquete através do RServer.


Na memória compartilhada entre várias sessões de R, gostaria de acrescentar que essa estratégia pode apoiar o desenvolvimento de sistemas de negociação em várias moedas. Cada moeda teria seu próprio Metatrader EA que, pelo menos, informa o Bid / Ask continuamente para aquele determinado PAIR, em um espaço de matriz compartilhada & # 8230 ;. realmente muito para pensar, mas eu ainda não vou por esse caminho?


Transferência de cotações MT4 em R.


Quanto mais eu entro nisso, mais eu ajustei meus objetivos. Atualmente, estou disposto a aproveitar ao máximo os pacotes Quantmod e Blotter R, enquanto constroi um MT4 equivalente ao InteractiveBroker-R_API. Como primeiro passo, eu estava disposto a traçar ticks do MT4 em R usando o chartSeries () da Quantmod.


Existem diferentes opções para exportar carrapatos do MT4:


Usando o DDE & # 8211; a principal desvantagem, se eu não estou enganado, este é um mecanismo de somente exportação. Considerando que estou disposto a usar R para gerar os sinais de negociação, o DDE não é uma opção. Usando soquetes em 127.0.0.0 & # 8211; A principal questão é o trabalho extra necessário para projetar o protocolo de comunicação. No entanto, existem algumas ideias interessantes sobre soquetes. Eu acredito que este é um similar, aparentemente eficiente, projeto de servidor COM / DCOM. Através de uma interface de banco de dados como MySQL. dll para MT4 & # 8211; no lado positivo, permite o fácil gerenciamento de dados de ticks (usando timestamps como chave principal), mas acredito que isso traria um problema de complexidade e velocidade. Aqui está um exemplo. Usando um EA / Indicator com o R. dll Usando um EA / Indicator com qualquer. dll [personalizado].


Eu decidi seguir a 5ª alternativa referenciada como a biblioteca de interface MT4R, especificamente aquela proposta por 7bits no ForexFactory. A interface do 7bits inicia o Rterm. exe como um processo em segundo plano e se comunica com sua linha de comando via stdin / stdout. Embora eu seja um pouco preocupado com a eficiência em tempo real (eu li o seguinte: Para negociação de barras de 1 minuto, com sobrecarga computacional limitada, R é uma solução perfeitamente viável. Dentro desse período de tempo, as coisas podem ficar difíceis), isso parece um primeiro movimento direto, que tem muitos benefícios e pode permitir a negociação ao vivo através de R (desde que um não seja HFT ou escalpelamento).


Posteriormente é uma captura de tela do meu R-Chart do tick do MT4, junto com um vídeo do desempenho geral em relação ao R-tick & # 8220; em tempo real & # 8221; desempenho (embora meu código ainda não tenha sido projetado para velocidade).


Eu fiz upload de um vídeo de ambos os MT4 ao lado de R-chart, de modo a ter uma noção do atraso de R-map: Megaupload link (.swf jogável em qualquer navegador). Como você pode perceber, em algum momento específico, R está ficando para trás de MT4. No entanto, deve-se ter em mente que, a cada tique, eu passo as últimas 500 cotações de volume do OHLC + do MT4 para o R, enquanto uma abordagem mais lógica simplesmente adicionaria esse último tick novo. No entanto, isso dá algumas dicas sobre o desempenho do R & C, uma vez que vamos começar a realizar o processamento real através de R, para eventualmente levar a um sinal de negociação.


A partir desse primeiro teste, eu estava relativamente preocupado com a capacidade de enviar rapidamente ticks MT4 para R em tempo real. Eu decidi escrever o mais simples logger de transferência, pois eu simplesmente envio os preços Bid / Ask @everytick de MT4 para R (atribuindo 2 [variáveis] duplas em R) enquanto media o tempo de execução. Surpreendentemente eu descobri que apenas 1-4 ms são necessários. Aqui está o meu link de Megaupload de vídeo. Eu rapidamente adicionei uma linha para passar um Matrix [1000] que eu inicializei no Init () que resultou em um aumento médio de 2ms (link Megaupload). Além disso, investigarei um cenário de processamento diferente para ter uma visão clara das configurações de negociação ao vivo MT4- & gt; R - & gt; MT4.


Eu vou colocar meus exemplos de código simples @ xmph. forex-googlecode.


& # 8220; R & # 8221; scripts para Metatrader & # 8230; .. Os primeiros passos de muitos para negociação adequada.


Eu projetei e desenvolvi Automated Trading Systems (ATS) por alguns anos agora. Desde a negociação ao vivo, eu tenho sido bastante rentável (isto é, eu consegui meus objetivos). No entanto, tive a sensação insatisfatória de que estava faltando alguma informação para aumentar o nível de confiança em meus sistemas & # 8230; Eu estava faltando as ferramentas adequadas para examinar de perto e acompanhar a curva de equidade real de um ATS.


Eu defino a Curva Real Equity (REC) como a acumulação do.


Ensaio de backtesting na amostra Período + backtesting da amostra Período + Período negociado no papel + Período de negociação ao vivo.


Há um bocado de informação na web para tal, mas eu não encontrei nenhuma ferramenta Free Open Source para realizar essa avaliação, especificamente para o Metatrader. Na verdade, eu uso o MT4 para trocar minhas estratégias, e tudo bem para mim; sem problemas nem preocupações. Você pode pensar de outra forma, mas eu não irei lá & # 8230; que está longe, longe do meu objetivo atual.


Passando de um segmento para outro, encontrei este em particular: Coberturas sintéticas, cointegração, reversão à média e coisas semelhantes (relacionadas a: MQL4- & gt; R-project & # 8211; Biblioteca de interfaces). Bem, isso foi mais do que eu precisava para finalmente dar um pontapé inicial tentando preencher minhas necessidades de análise de REC.


Eu iniciei um GoogleCode SVN que contém meus scripts R junto com arquivos de exemplo. Meus objetivos são projetar e implementar o seguinte:


Análise de múltiplos arquivos MT4 StrategyTester [.htm] & ​​# 8230; como eu percebi mais, se não todos, o software lá fora são soluções comerciais Análise e Acompanhamento do ATS através da avaliação Real Equity Curve Fornecer uma detecção para o desempenho ATS Break-Down & # 8230; determinar o mais rápido possível quando as coisas ficarem feias.


Em uma segunda sessão, e porque tropeço em algumas informações interessantes aqui e ali, estarei observando o seguinte:


Otimização da estratégia do MT4 ATS através do R Melhorou a análise do desempenho do ATS, por meio da avaliação de consistência do sistema, por exemplo. Aprimorou a avaliação do REC com análise de Monte-Carlo e Bayesian Statistics e eventualmente combinou o acima para investigar ATS gerada por computador (CGATS).


Como primeiro começo, apresento dois exemplos do meu kick-start de programação: (1) A agregação de múltiplos relatórios StrategyTester e, (2) o acompanhamento visual de uma Média Móvel MT4 otimizada de backtesting para negociação de papéis. Todas as informações e materiais necessários podem ser encontrados em code. google/p/rscripts4metatrader/


(1) Usando: MT4_StratRep_Analyzer ()


(2) Usando: MT4_RealEquityCurve_Analysis ()


Otimização do Metatrader na EA Média Móvel para o período 2008.01 - & gt; 2009.01.


3 2408,02 694 1,27 3,47 784,52 18,86% MovingPeriod = 60 Lotes = 0,1 MaximumRisk = 0,02 DecreaseFactor = 3 MovingShift = 6.


Pós-navegação.


Aviso Legal.


Seu acesso e uso deste Site estão sujeitos aos seguintes Termos de Uso. Ao acessar e usar este site, você considera que leu e aceitou estes Termos de Uso e as restrições regulamentares que regem o uso deste site.


Dinâmica do fluxo de pedidos e da taxa de câmbio nos dados do sistema de corretagem eletrônica ☆


Analisamos a associação entre fluxo de pedidos e taxas de câmbio usando um novo conjunto de dados representando a maioria das transações interdealer globais nos dois pares de moedas mais negociados na frequência de um minuto ao longo de um período de seis anos. Esse longo período de dados de alta frequência nos permite obter novos insights sobre o comportamento conjunto dessas séries. Primeiro, confirmamos a presença de uma associação substancial entre o fluxo de ordens interdealer e os retornos da taxa de câmbio em horizontes que variam de 1 min a duas semanas, mas achamos que a associação é substancialmente mais fraca em horizontes mais longos. Estudamos a variação temporal da associação entre os retornos da taxa de câmbio e o fluxo de pedidos, tanto intradiamente quanto a longo prazo, e mostramos que a relação parece ser mais forte quando a liquidez do mercado é menor. No geral, nosso estudo apóia a visão de que os efeitos de liquidez desempenham um papel importante na relação entre fluxo de pedidos e mudanças na taxa de câmbio. Isso de modo algum elimina o papel do fluxo de pedidos como um canal pelo qual informações fundamentais são transmitidas ao mercado, pois mostramos que nossas descobertas são bastante consistentes com um modelo recente de Bacchetta e Van Wincoop (2006: Heterogeneidade da informação pode explicar o quebra-cabeças da determinação da taxa de câmbio - American Economic Review, 96, pp. 552–576.) que combina efeitos de liquidez e de informação.


Classificação JEL.


Escolha uma opção para localizar / acessar este artigo:


Verifique se você tem acesso através de suas credenciais de login ou sua instituição.


Verifique este artigo em outro lugar.


Somos gratos a Benjamin Chiquoine pela excelente assistência de pesquisa e a Jon Faust, Mico Loretan, Richard Lyons, Michael Moore, Dagfinn Rime, Krista Schwarz, Eric van Wincoop e dois árbitros anônimos por comentários muito úteis sobre rascunhos anteriores deste manuscrito. As opiniões neste documento são de responsabilidade exclusiva dos autores e não devem ser interpretadas como refletindo as opiniões do Conselho de Governadores do Sistema da Reserva Federal ou de qualquer pessoa associada ao Sistema da Reserva Federal.


Uma estratégia de negociação baseada em contratos de Bull / Bearable.


O Contrato da Bullable / Bear da Callable é um contrato de opções de barreira introduzido recentemente no mercado de Hong Kong. Neste estudo, propomos uma estratégia de negociação que define o ponto de entrada e o ponto de saída usando informações sobre o preço de chamada do contrato e o evento de chamada obrigatório. Usando dados sobre contratos baseados no Índice Hang Seng de Hong Kong, mostra-se que a estratégia de negociação proposta, em média, produz alguns retornos comerciais decentes que variam bastante substancialmente em negócios individuais. Análises exploratórias indicam que os retornos de negociação estão associados à volatilidade observada durante a vigência de um contrato e, em menor escala, com a volatilidade no período de pré-emissão. Além disso, a frequência relativa de emissão de um emissor pode ter algumas implicações para o desempenho da estratégia de negociação.


Classificação JEL.


Escolha uma opção para localizar / acessar este artigo:


Verifique se você tem acesso através de suas credenciais de login ou sua instituição.


Construa estratégias melhores! Parte 2: Sistemas Baseados em Modelos.


Os sistemas de negociação vêm em dois tipos: baseados em modelos e mineração de dados. Este artigo trata de estratégias baseadas em modelos. Mesmo quando os algoritmos básicos não são complexos, desenvolvê-los adequadamente tem suas dificuldades e armadilhas (caso contrário, qualquer um estaria fazendo isso). Uma ineficiência significativa do mercado dá ao sistema apenas uma vantagem relativamente pequena. Qualquer pequeno erro pode transformar uma estratégia vencedora em uma perdida. E você não vai necessariamente notar isso no backtest.


O desenvolvimento de uma estratégia baseada em modelo começa com a ineficiência do mercado que você deseja explorar. A ineficiência produz uma anomalia de preço ou padrão de preço que você pode descrever com um modelo qualitativo ou quantitativo. Tal modelo prevê o preço atual y t do preço anterior y t-1 mais alguma função f de um número limitado de preços anteriores mais algum termo de ruído ε:


A distância temporal entre os preços y t é o período de tempo do modelo; o número n de preços usado na função f é o período de lookback do modelo. Quanto mais alto o termo preditivo em relação ao termo não-previsto, melhor é a estratégia. Alguns traders afirmam que seu método favorito não prediz, mas "reage ao mercado" # 8217; ou alcança um retorno positivo por outros meios. Em um determinado fórum de traders você pode até mesmo encontrar um professor de matemática que reinventou o sistema de negociação de grade, e elogiou-o como não-preditivo e até capaz de negociar uma curva de passeio aleatório. Mas sistemas que não predizem de alguma maneira devem confiar na sorte; eles só podem redistribuir o risco, por exemplo, trocar um alto risco de uma pequena perda por um baixo risco de uma perda alta. A expectativa de lucro permanece negativa. Até onde eu sei, o professor ainda está tentando vender seu trader de grade, ainda anunciando como não previsível, e ainda regularmente soprando sua conta demo com ele.


Negociar jogando uma moeda perde os custos de transação. Mas negociando aplicando o modelo errado & # 8211; por exemplo, a tendência segue para uma série de preços de reversão à média & # 8211; pode causar perdas muito maiores. O comerciante médio de fato perde mais do que por negociação aleatória (cerca de 13 pips por negociação, de acordo com as estatísticas da FXCM). Portanto, não é suficiente ter um modelo; Você também deve provar que é válido para o mercado que você negocia, no momento em que você negocia, e com o período de tempo usado e período de lookback.


Nem todas as anomalias de preços podem ser exploradas. Limitar os preços das ações a 1/16 de frações de dólar é claramente uma ineficiência, mas é provavelmente difícil usá-lo para fazer previsões ou ganhar dinheiro com isso. As estratégias baseadas em modelos de trabalho que conheço, seja da teoria ou porque fomos contratados para codificar algumas delas, podem ser classificadas em várias categorias. Os mais frequentes são:


O impulso na curva de preços é provavelmente a anomalia mais significativa e mais explorada. Não há necessidade de elaborar aqui, pois a tendência seguinte foi o tópico de uma série de artigos completa neste blog. Há muitos métodos de seguir tendências, sendo o clássico um crossover de média móvel. Este "Olá mundo" & # 8217; de estratégias (aqui os scripts em R e em C) rotineiramente falha, porque não distingue entre momentum real e picos ou vales aleatórios na curva de preço.


O problema: o momentum não existe em todos os mercados o tempo todo. Qualquer ativo pode ter períodos longos sem tendência. E ao contrário da crença popular, isso não é necessariamente um mercado lateral. Uma curva de passeio aleatório pode subir e descer e ainda não tem momento. Portanto, um bom filtro que detecta o regime real de mercado é essencial para os sistemas que seguem a tendência. Aqui está uma estratégia mínima do Zorro que usa um filtro passa-baixa para detectar a inversão de tendência e o indicador MMI para determinar quando estamos entrando no regime de tendência:


A curva de lucro desta estratégia:


Curva de lucro de estratégia de impulso.


(Para simplificar, todos os trechos de estratégia desta página são sistemas barebone sem nenhum mecanismo de saída além da reversão e sem paradas, trailing, treinamento de parâmetros, gerenciamento de dinheiro ou outros truques. É claro que os backtests não significam de forma alguma que eles sejam sistemas rentáveis ​​As curvas P & amp; L são todas do EUR / USD, um bem válido para demonstrações, uma vez que parece conter um pouco de toda a ineficiência possível).


2. Reversão Média.


Um mercado de reversão significa um valor real & # 8216; ou & # 8216; preço justo & # 8217; de um ativo. Os comerciantes compram quando o preço real é mais barato do que deveria, e vendem quando é mais caro. Isso faz com que a curva de preço retorne à média com mais frequência do que em uma caminhada aleatória. Dados aleatórios são médios revertendo 75% do tempo (prova aqui), então qualquer coisa acima de 75% é causada por uma ineficiência do mercado. Uma modelo:


= algum termo de ruído aleatório.


Quanto maior o fator de meia-vida, mais fraca é a reversão à média. A meia-vida de reversão à média na série de preços é normalmente na faixa de 50 a 200 barras. Você pode calcular λ por regressão linear entre y t-1 e (y t-1 - y t). A série de preços não precisa ser estacionária para experimentar reversão à média, uma vez que o preço justo pode ser desviado. Apenas deve derrapar menos como em um passeio aleatório. A reversão média é geralmente explorada pela remoção da tendência da curva de preços e pela normalização do resultado. Isso produz um sinal oscilante que pode disparar trocas quando se aproxima de uma parte superior ou inferior. Aqui está o script de um sistema simples de reversão à média:


O filtro passa-alta amortece todos os ciclos acima de 30 bar e, assim, elimina a tendência da curva de preços. O resultado é normalizado pela transformação de Fisher, que produz uma distribuição gaussiana dos dados. Isso nos permite determinar limites fixos em 1 e -1 para separar as caudas da curva de sino resultante. Se o preço entrar numa cauda em qualquer direção, um negócio é acionado antecipando que ele retornará em breve para a barriga do sino. Para detectar o regime de reversão, o script usa o Expoente Hurst. O expoente é 0,5 para uma caminhada aleatória. Acima de 0,5 começa o regime de momentum e abaixo de 0,5 regime de reversão da média.


Curva de lucro da reversão média.


3. Arbitragem Estatística.


As estratégias podem explorar a similaridade entre dois ou mais ativos. Isso permite proteger o primeiro ativo por uma posição inversa no segundo ativo, e dessa forma obter lucro da reversão à média de sua diferença de preço:


onde y 1 e y 2 são os preços dos dois ativos e os fatores de multiplicação h 1 e h 2, suas taxas de hedge. As taxas de hedge são calculadas de forma que a média da diferença y seja zero ou um valor constante. O método mais simples para calcular as taxas de hedge é a regressão linear entre y 1 e y 2. Uma estratégia de reversão à média como acima pode então ser aplicada a y.


Os ativos não precisam ser do mesmo tipo; Um sistema de arbitragem típico pode ser baseado na diferença de preço entre um índice ETF e seu principal estoque. Quando y não está parado & # 8211; significando que sua média tende a vagar lentamente & # 8211; as taxas de hedge devem ser adaptadas em tempo real para compensação. Aqui está uma proposta usando um filtro de Kalman por um colega blogueiro.


O sistema de arbitragem simples do tutorial R:


4. Restrições de preço.


Uma restrição de preço é uma força artificial que causa um desvio constante de preço ou estabelece uma faixa de preço, piso ou teto. O exemplo mais famoso foi o limite de preço EUR / CHF mencionado na primeira parte desta série. Mas, mesmo após a remoção do limite, o preço EUR / CHF ainda tem uma restrição, desta vez não imposta pelo banco nacional, mas pela forte assimetria atual no poder de compra de EUR e CHF. Um exemplo extremo de um preço variável é o par EUR / DKK (veja abaixo). Todas essas restrições podem ser usadas em estratégias para a vantagem do comerciante.


Faixa de preço EUR / DKK 2006-2016.


Os ciclos não sazonais são causados ​​pelo feedback da curva de preços. Quando os traders acreditam em um preço justo & # 8217; & # 8217; de um activo, vendem ou compram frequentemente uma posição quando o preço atinge uma certa distância desse valor, na esperança de uma reversão. Ou fecham posições vencedoras quando o movimento de preços favorito começa a desacelerar. Esses efeitos podem sincronizar entradas e saídas entre um grande número de traders e fazer com que a curva de preços oscile com um período estável ao longo de vários ciclos. Muitas vezes, muitos desses ciclos são superpostos na curva, assim:


Quando você conhece o período C i e a fase D i do ciclo dominante, é possível calcular os pontos de entrada e saída de comércio ideais, contanto que o ciclo persista. Ciclos na curva de preços podem ser detectados com funções de análise espectral & # 8211; por exemplo, transformação rápida de Fourier (FFT) ou simplesmente um banco de filtros de passagem de banda estreitos. Aqui está o espectro de frequências do EUR / USD em outubro de 2015:


Espectro EUR / USD, duração do ciclo em barras.


A exploração de ciclos é um pouco mais complicada do que a tendência ou a reversão à média. Você precisa não apenas do comprimento do ciclo dominante do espectro, mas também de sua fase (para desencadear operações no momento certo) e sua amplitude (para determinar se existe um ciclo que valha a pena ser negociado). Este é um script barebone:


A função DominantPhase determina a fase e o comprimento do ciclo do pico dominante no espectro; o último é armazenado na variável rDominantPeriod. A fase é convertida em uma curva senoidal que é deslocada adiante por π / 4. Com esse truque, obteremos uma curva senoidal que vai além da curva de preços. Assim, fazemos a previsão real de preços aqui, apenas a questão é se o preço seguirá nossa previsão. Isso é determinado pela aplicação de um filtro de passagem de banda centrado no ciclo dominante na curva de preço e medindo sua amplitude (oi na fórmula). Se a amplitude estiver acima de um limiar, concluímos que temos um ciclo suficientemente forte. O roteiro, em seguida, entra em um vale da curva senoidal de avanço e curto em um pico. Como os ciclos são de curta duração, a duração de uma negociação é limitada por ExitTime a um máximo de 10 ciclos.


Podemos ver na curva P & L que houve longos períodos em 2012 e 2014 sem ciclos fortes na curva de preços EUR / USD.


6. Clusters.


O mesmo efeito que faz com que os preços oscilar também pode deixá-los agrupar em certos níveis. O clustering extremo pode até produzir o "fornecimento" & # 8221; e & # 8220; demanda & # 8221; linhas (também conhecidas como & # 8220; suporte e resistência & # 8220;), os assuntos favoritos em seminários de negociação. Os palestrantes de seminários especializados podem desenhar linhas de suporte e resistência em qualquer gráfico, não importando se os preços da barriga de porco ou as pontuações de beisebol do ano passado. No entanto, a mera existência dessas linhas permanece discutível: existem poucas estratégias que realmente as identificam e exploram e, menos ainda, que realmente produzem lucros. Ainda assim, os clusters de curvas de preços são reais e podem ser facilmente identificados em um histograma semelhante ao espectograma de ciclos.


7. Padrões de Curva.


Eles surgem do comportamento repetitivo dos comerciantes. Os comerciantes não apenas produzem, mas também acreditam em muitos padrões de curva; mais & # 8211; como a famosa & # 8216; cabeça e ombros & # 8217; padrão que é dito para prever a inversão de tendência & # 8211; são mitos (pelo menos eu não encontrei nenhuma evidência estatística disso, e não ouvi de nenhuma outra pesquisa alguma que confirmasse a existência de previsões de cabeças e ombros em curvas de preço). Mas alguns padrões, por exemplo, xícaras & # 8221; ou "xícaras", realmente existem e podem, de fato, preceder um movimento para cima ou para baixo. Padrões de curva & # 8211; não deve ser confundido com padrões de velas & # 8211; podem ser explorados por métodos de detecção de padrões, como o algoritmo Fréchet.


Uma variante especial de um padrão de curva é o Breakout & # 8211; um impulso repentino depois de um longo movimento lateral. Isso pode ser causado, por exemplo, pela tendência do trader de colocar suas perdas de parada a uma curta distância abaixo ou acima do patamar atual. Acionar as primeiras paradas acelera o movimento do preço até que mais e mais paradas sejam acionadas. Esse efeito pode ser explorado por um sistema que detecta um período lateral e, em seguida, fica aguardando o primeiro movimento em qualquer direção.


8. Sazonalidade.


& # 8220; Temporada & # 8221; não significa necessariamente uma temporada de um ano. Oferta e demanda também podem seguir padrões mensais, semanais ou diários que podem ser detectados e explorados por estratégias. Por exemplo, o índice S & P500 costuma subir para cima nos primeiros dias de um mês, ou para mostrar uma tendência ascendente nas primeiras horas da manhã antes do pregão principal do dia. Como os efeitos sazonais são fáceis de explorar, eles geralmente são de vida curta, fracos e, portanto, difíceis de detectar apenas por meio de curvas de preços. Mas eles podem ser encontrados ao traçar um perfil de dia, semana ou mês das diferenças da curva de preço médio.


Quando os participantes do mercado contemplam se entram ou fecham uma posição, eles parecem chegar a conclusões semelhantes quando têm tempo para pensar durante a noite ou durante o final de semana. Isso pode fazer com que o preço comece em um nível diferente quando o mercado abrir novamente. As diferenças de preço durante a noite ou no final de semana são geralmente mais previsíveis do que as alterações de preço durante as horas de negociação. E, claro, eles podem ser explorados em uma estratégia. No fórum do Zorro, foi recentemente discutida a questão do “One Night Stand System”, um comerciante de moeda de fim de semana simples, com lucros misteriosos.


10. Autorregressão e heteroscedasticidade.


O último é uma palavra chique para: "Os preços mudam muito e o jittering varia com o tempo" # 8221 ;. Os modelos ARIMA e GARCH são os primeiros modelos que você encontra em matemática financeira. Eles assumem que retornos futuros ou volatilidade futura podem ser determinados com uma combinação linear de retornos passados ​​ou volatilidade passada. Esses modelos são muitas vezes considerados puramente teóricos e sem uso prático. Não é verdade: você pode usá-los para prever o preço de amanhã como qualquer outro modelo. Você pode examinar um correlograma & # 8211; uma estatística da correlação do retorno atual com os retornos das barras anteriores & # 8211; para descobrir se um modelo ARIMA se ajusta a uma determinada série de preços. Aqui estão dois excelentes artigos de colegas blogueiros para usar esses modelos em estratégias de negociação: ARIMA + GARCH Trading Strategy no S & amp; P500 e Are ARIMA / GARCH Predictions Rentable?


11. Choques de preço.


Os choques de preços geralmente acontecem na segunda ou sexta-feira de manhã, quando empresas ou organizações publicam boas ou más notícias que afetam o mercado. Mesmo sem saber das novidades, uma estratégia pode detectar as primeiras reações de preço e saltar rapidamente para o bandwagon. Isso é especialmente fácil quando um grande choque está abalando os mercados. Aqui está uma estratégia simples de portfólio Forex que avalia as forças relativas das moedas para detectar choques de preço:


A curva de capital do sistema de força da moeda (você precisará do Zorro 1.48 ou superior):


Sistema de exploração de choque de preços.


A curva de capital azul acima reflete os lucros de pequenos e grandes saltos de preços da moeda. Você pode identificar claramente o choque do preço do Brexit e do CHF. É claro que tais estratégias funcionariam ainda melhor se as notícias pudessem ser detectadas e interpretadas de alguma forma. Alguns serviços de dados fornecem eventos de notícias com uma avaliação binária, como & # 8220; bom & # 8221; ou & # 8220; ruim & # 8221 ;. Especialmente de interesse são os relatórios de ganhos, conforme fornecidos pelos serviços de dados como Zacks ou Xignite. Dependendo de quais surpresas o relatório de lucros contém, os preços das ações e as volatilidades implícitas podem subir ou cair acentuadamente no dia do relatório e gerar lucros rápidos.


Para aprender o que pode acontecer quando as notícias são usadas de maneiras mais criativas, eu recomendo o excelente Índice de Medo de Robert Harris & # 8211; um livro obrigatório na biblioteca de qualquer hacker financeiro.


Esta foi a segunda parte da série Build Better Strategies. A terceira parte tratará do processo de desenvolvimento de uma estratégia baseada em modelos, desde a pesquisa inicial até a construção da interface do usuário. Caso alguém queira experimentar os snippets de código postados aqui, eu os adicionei ao repositório de scripts de 2015. Eles não são estratégias reais, no entanto. Os elementos que faltam & # 8211; otimização de parâmetros, algoritmos de saída, gerenciamento de dinheiro etc. & # 8211; será o tema da próxima parte da série.


26 reflexões sobre “Construir Estratégias Melhores! Parte 2: Sistemas Baseados em Modelos & rdquo;


Continue, ame seus artigos.


Este é o ciclo dominante & # 8217; ideia semelhante a Ehlers & # 8217; trabalhar sobre o assunto?


Eu não pareço lembrar qualquer menção de determinar a amplitude do ciclo como um filtro para remover negociações fracas / ruído. Interessante! Terá que olhar para isso. Obrigado pelo post.


Sim, o conceito de ciclo dominante é da Ehlers. Na minha experiência, um filtro que detecta a situação do mercado, como o limite de amplitude, é essencial para a maioria das estratégias baseadas em modelos & # 8211; é quase mais importante que o algoritmo de comércio em si.


Jcl, você gostaria de explicar / comentar mais o indicador de amplitude que é executado no Zorro? John Ehlers trabalho é realmente grande, mas vendo aplicado aos mercados reais hoje em dia é ainda mais valioso, IMHO.


A partir do manual do Zorro, o Aplitude é “o maior pico menos o menor valor da Série de dados, suavizado sobre o TimePeriod com um EMA, para que as flutuações mais recentes ganhem mais peso. & # 8220 ;. Então eu acho que é simplesmente algo como EMA (intervalo, período de tempo) da banda de freqüência do ciclo dominante.


Eu não consigo reproduzir nenhum dos resultados acima. Eu acho que é devido a parâmetros de trailing e similares. Da mesma forma, talvez eu esteja codificando uma estratégia que faça sentido, mas no final esqueço porque a considero não lucrativa quando o problema se deve à gestão do dinheiro e ao controle de risco.


Não seria útil adicionar um workshop em que algumas ideias de gerenciamento de risco sejam implementadas para que os iniciantes possam entender melhor e desenvolver estratégias melhores. Eu sei que há todas aquelas funções de trilha construídas, mas usar uma ou outra até que uma curva fique boa é como andar meio cego, ou como jogar uma moeda na esperança de que a próxima função tentada funcione.


Esqueça a gestão de risco neste momento. Isso apenas distorceria os resultados e seria inútil quando o algoritmo não tivesse borda. O primeiro passo é o modelo. O segundo passo é um algoritmo baseado nesse modelo, com um retorno positivo em uma simulação com custo real de negociação. Isso é feito nos exemplos acima. It is quite easy to come up with such systems that seemingly produce good returns. The hard part is testing if the return is for real or just curve fitting bias. That would be the next step, and only if the system passes that test, the model is justified. Then you can think about making a real strategy from it, with trailing, risk management, money management, and so on. This is the very last step of strategy development, not the first.


Reproducing published results is often difficult, but should not be a problem here. You got the code and the test environment, so you can see what the functions return and which trades are opened. Compare with your own results. This way you can quickly find out where and why they are different.


Thanks for the fast answer. My fault: I was actually using the assetlist from another broker and the results were completly down. Thats why I thought that there was some magic added to get the results. When I use the fxcm settings I get similar results.


Yes, I read in the manual how a strategy should be develop from basic idea and step by step adding features.


It is difficult to know if there is an edge in the results. There is no a rule like: if the simple idea gives a certain amount of pips then it may have an edge.


Thanks a lot for all these articles icl, I’m reading them like a fascinating book!


Can you teach me a bit more about the lambda of the mean reversion, i. e., “You can calculate λ by linear regression between yt-1 and (yt-1-yt)”? Por que é que? How can we use lambda in the mean reversion example?


When you reformulate the mean reversion formula above, like this:


you can see that it is a line equation in the form y = a*x + b, where a = -1/(1+Lambda). When a is nonzero, the price change y(t)-y(t-1) has a linear relationship to the deviation of the previous price from the fair price, y(t-1)-Mean. The mathematical method to determine the slope a from many data pairs ( y(t)-y(t-1), y(t-1)-Mean ) is linear regression. From a you get the half-life parameter Lambda. The market is mean reversing when a is negative.


Thanks for the detail, jcl. It helps a lot.


Does the procedure look correct to you ?


The steps are as follows:


1. Set our price close lagged by -1 day.


2. Subtract todays price close against yesterdays lagged close.


3. Subtract (yesterday price close) – mean(of the -1 lagged price close )


4. Perform a linear regression on (todays price – yesterdays price)


(yesterday price close) – mean(of the -1 lagged price close )


R code for this is below, does it look correct?


# Half Life of Mean Reversion.


# Andrew Bannerman 9.24.2017.


random. data <- c(runif(1500, min=0, max=100))


# Calculate yt-1 and (yt-1-yt)


y. lag <- c(random. data[2:length(random. data)], 0)


y. diff <- random. data – y. lag.


prev. y.mean <- y. lag – mean(y. lag)


final <- merge(y. diff, prev. y.mean)


prev. y.mean, data = final. df)


The steps look correct. For the R code I dare not judge the correctness – put in some data and check if the half life value makes sense.


My next question is, can this be applied to a linear trend? I tested the above procedure on the SPY from inception to present and the half life was 939.6574. Doesnt look to correct even thought the procedure looks correct. Jc – have you obtained accurate results using this half life method?


I have, and yes, it can be applied to a trending asset, especially to SPY. But when it trends, check how you calculate the mean: this is your mean reversion target. Use 20 days or so. If you use all the data for the mean, then you might get the half life of SPY reverting to its price of 1980, and I guess that’s infinity.


If you’re interested in this method, get the book by Ernie Chan. It contains a in depth description of mean reverting algos and half life calculation.


Ok if i did present to 20 days, that gives me the half life of the previous 2o days? What about the rest of the sample size? Do we then roll this on a 20 day basis from inception to present? Does it mean the half life is likely to change as the series rolls into the future?


Sure, you must roll. For trading you want the mean and halflife from today, not from 10 years ago. Since price series are nonstationary, the mean changes all the time. The halflife is much more stationary, but it can also change under different market conditions.


First of all, thank you for this blog . I wish I had come across it years ago.


I’m a very unsophisticated (it turns out) options trader. I made my living doing volatility arbitrage, but that game is finished. I’ve been trying to teach myself new trades and I tried pairs trading using some highly correlated index futures. I would do well for a time, but then the spread between the futures would move to a new level usually wiping out whatever profits I had.


I learned that this was because of something called stationarity. Whenever the spread would start trending I would lose.


In your Stat Arb section above you state; & # 8221; When y is not stationary – meaning that its mean tends to wander off slowly – the hedge ratios must be adapted in real time for compensating.”


Do you think my problem might be solved by using a Kalman filter as suggested, to come up with dynamic hedge ratios? Would the hedge ratio change fast enough during real time trading to save me?


I was trading these pairs intraday.


You can use a Kalman filter for almost anything, but for adapting the hedge ratio there are also simpler methods, such as permanent linear regression of the previous N price pairs. The hedge ratio is then the linear regression slope.


I believe the link for the blog post on Kalman filter changed:


Being very new on Zorro/R, what’s the easiest but logical way to apply this filter into pair trading?


Obrigado pelo link. With R, there are Kalman filters in the FKF, KFAS, and several other packages. I have no ready code, but the usage is described in the pdf manuals to the packages.


For anyone interested , I saw a tutorial comparing Copula vs Cointegration in Pairs Trading.

No comments:

Post a Comment