Saturday 15 July 2017

Trading Signals Matlab


MatlabTrading Esta publicação é sobre como é importante usar diferentes tipos de métodos de otimização, como algoritmos genéticos e paralelização, para obter resultados mais rápidos. Otimização de Algoritmos Genéticos Apesar do fato de que o princípio do algoritmo genético (evolutivo) é muito bem explicado nos webinars de MathWorks, no entanto, ele é usado apenas para otimizar a escolha de um grupo de estratégia a partir de um conjunto. Este é um bom exemplo do uso desses algoritmos, no entanto, acontece que é necessário estabelecer muitas variáveis ​​com intervalos significativos para uma estratégia, você não passa por uma iteração e a paralelização de processos. Os cálculos podem levar vários dias . Certamente, existem estratégias na fase final de otimização. Quando quase certamente sabemos que a estratégia de negociação é bem sucedida, podemos aguardar vários dias também ou alugar todo o cluster - o resultado pode valer a pena. No entanto, se precisarmos estimar os resultados de uma estratégia volumosa e decidir se vale a pena gastar o tempo, então os algoritmos genéticos podem ser perfeitamente adequados. Nós fornecemos a possibilidade de usar três métodos para otimizar a estratégia em WFAToolbox: Método linear 8211 é um modo usual de classificação em que você verá todos os resultados intermédios (sub-ótimos). Ele fornece a máxima precisão. Método paralelo 8211, todos os kernels da sua CPU serão usados. Não permite ver resultados intermédios, mas acelera significativamente a operação. Ele fornece a máxima precisão durante o aumento da velocidade de computação. O método genético 8211 usa o algoritmo de otimização evolutiva. Permite ver valores sub-óptimos, mas dá o resultado próximo ao melhor. Não é um método muito preciso, mas é suficientemente preciso para a execução inicial da estratégia. Muito rápido. Muitas vezes, nos perguntam se o WFAToolbox - Walk-Forward Analysis Toolbox para MATLAB tem a capacidade de usar o GPU em cálculos. Infelizmente, o GPU não é adequado para todas as tarefas e seu uso é muito específico. Para usá-lo, você precisa ajustar a lógica e o código de cada estratégia para o teste de núcleos gráficos. Infelizmente, devido a tal não-universalidade do método, não se pode usar o GPU no WFAToolbox. Continuando a Parte 2 da discussão de problemas e soluções no teste e análise da estratégia de negociação algorítmica no MATLAB, convido você a ler esta publicação sobre o problema da indisponibilidade da visualização dos processos em soluções de software modernas para testar sistemas de negociação. Visualização do processo de teste Na minha experiência de trabalho, muitas vezes analisei outras plataformas populares para testes de estratégia comercial. Como a TradeStation. MetaStock. Multicartas etc e sempre fiquei surpreso com a pouca atenção dada à visualização do processo de teste. A coisa é que, quando não vemos os resultados dos valores intermédios, sub-ótimos de parâmetros otimizados, muitas vezes jogamos fora o ouro junto com a sujeira. A questão é devido a uma amostragem muito ampla, a estratégia ajusta os parâmetros da maneira como vemos uma estratégia perfeita que falha na vida real ou veja uma ou duas ofertas, que são supostamente as melhores porque foi selecionado esses dados de intervalo de tempo onde a A melhor estratégia de negociação seria buy-and-hold, mas por que outras estratégias são necessárias para a visualização do processo de teste de estratégia de negociação em MATLAB (proposto no webinar). Como resultado, sem ver resultados intermédios, nós precisamos que simpatizar187 mudar os parâmetros para tentar Para obter melhores dados ou assistir em alguns 3D ou 4D (a cor é a 4ª dimensão), conforme proposto nos webinars. A análise de valores nos espaços N-dimensionais pode definitivamente ser uma alternativa, mas tem várias limitações: o que acontece se houver mais de 4 dimensões. Quando você vê quais sinais e em que freqüência aparecem na faixa de preço, você tem quase todos os Representação visual necessária da sua estratégia: a frequência das transacções, a sua rentabilidade (curva de rendimento), a precisão da abertura, a semelhança com outros valores sub-óptimos, etc., que não pode ser dito sobre o desempenho no espaço N-dimensional, onde todas as informações úteis É, de fato, que o valor ótimo não é apenas um, mas há toda uma gama de valores subóptimos em uma ou mais áreas. Ao otimizar uma estratégia na WFAToolbox 8211 Walk-Forward Analysis Toolbox para MATLAB174. Como um novo valor ótimo é encontrado, os sinais de estratégia de negociação no período em amostra e fora da amostra aparecem imediatamente no gráfico, para que você sempre possa controlar o intervalo de opções que você deve atribuir e também pode pausar a otimização Sem esperar o fim do teste, pois fica claro que algo deu errado ou tudo está bem. Hola, meu nome é Igor Volkov. Desenvolvi estratégias de negociação algorítmicas desde 2006 e trabalhei em diversos fundos de hedge. Neste artigo, gostaria de discutir as dificuldades surgidas no caminho do desenvolvedor de estratégias de negociação MATLAB durante testes e análises, bem como oferecer soluções possíveis. Eu tenho usado o MATLAB para testar estratégias de algoritmos desde 2007 e cheguei à conclusão de que esta não é apenas a ferramenta de pesquisa mais conveniente, mas também a mais poderosa porque possibilita o uso de modelos complexos estatísticos e econométricos, redes neurais, Aprendizado de máquina, filtros digitais, lógica difusa, etc., adicionando caixa de ferramentas. O idioma MATLAB é bastante simples e bem documentado, então mesmo um não programador (como eu) pode dominá-lo. Como tudo começou. Foi 2008 (se não me enganei) quando o primeiro webinar sobre negociação algorítmica em MATLAB com Ali Kazaam foi lançado, abrangendo o tópico de otimização de estratégias simples baseadas em indicadores técnicos, etc., apesar de um código bastante 8220chaotic8221, as ferramentas eram interessantes O suficiente para usar. Eles serviram como ponto de partida para pesquisa e aprimoramento de um modelo de teste e análise que permitiria usar todo o poder das caixas de ferramentas e a liberdade das ações do MATLAB durante a criação de suas próprias estratégias comerciais, ao mesmo tempo que permitiria controlar o processo De testes e os dados obtidos e suas análises subsequentes escolheriam um portfólio efetivo de sistemas de negociação robustos. Posteriormente, os webinars Mathworks foram atualizados a cada ano e gradualmente introduziram elementos cada vez mais interessantes. Assim, o primeiro webinar sobre negociação de pares (arbitragem estatística) usando a Econometric Toolbox foi realizado em 2010, embora a caixa de ferramentas de testes e análises permaneceu a mesma. Em 2013, surgiu o Trading Toolbox da Mathworks, que permitiu conectar o MATLAB a corretores diferentes para a execução de suas aplicações. Embora existissem soluções automáticas para a execução das transações, a partir desse ponto, o MATLAB poderia ser considerado um sistema para o desenvolvimento de estratégias comerciais com um ciclo completo: desde o carregamento de dados até a execução de estratégias de negociação automatizadas. Por que cada Algotrader deve reinventar a roda No entanto, a Mathworks não ofereceu uma solução completa para testar e analisar as estratégias. Os códigos que você poderia sair dos webinars eram os únicos elementos de um teste completo do sistema, e era necessário modificá-los. , Personalize-os e adicione-os à GUI para facilidade de uso. Foi muito demorado, colocando uma questão: seja qual for a estratégia, deve passar pelo mesmo processo de análise e análise, o que permitiria classificar-se como estável e utilizável. Por isso, cada algotrader deve reinventar a roda e escrever Seu próprio código para estratégias de teste adequadas em MATLAB Então, a decisão foi tomada para criar um produto que permitisse realizar todo o processo associado ao teste e análise de estratégias de negociação algorítmicas utilizando uma interface simples e fácil de usar. Em primeiro lugar, gostaria de responder as seguintes perguntas: O que aconteceu com o blog. Jev Kuznetsov já não é o proprietário. O blog foi adquirido ao nosso amigo, Jev Kuznetsov, que se mudou para o seu outro blog com o blog. Ele concluiu que Python é melhor que o MATLAB para negociação, o que eu considerava falso. MATLAB continua a ser um dos melhores softwares do mundo para fins de negociação algorítmica IMHO (eu tenho alguns fatos sobre isso, porém para discussão futura). 2. Nós mudamos a marca. A partir deste momento, o blog será chamado MatlabTrading, o que é muito mais compreensível em relação aos tópicos que irá incluir. Além disso, o nome do domínio foi alterado para matlabtrading em vez do matlab-trading. blogspot inicial. Embora o domínio antigo ainda esteja funcionando redirecionando do nome do domínio primário. O que acontecerá com o blog 1. Mais publicações e artigos Esperamos trazer a vida a este blog postando conteúdos relevantes uma ou duas vezes por semana. Nos primeiros meses, publicaremos principalmente artigos e vídeos que já temos para tornar mais fácil para os nossos queridos leitores pesquisar informações sobre um recurso e reticular-se sobre eles. Então temos planos para escrever posts sobre aspectos práticos da negociação algorítmica no MATLAB. Como criar estratégias modernas de negociação automática, tais como: negociação de pares de arbitragem estatística significa estratégias de negociação neutras de mercado de reversão com base na cointegração bollinger bandas filtro kalman etc para commodities, ações e Forex. Tendência de estratégias seguidas com Jurik Moving Average e outros filtros digitais sofisticados. Estratégias de previsão com aprendizado de máquina (Support Vector Machines) e outros métodos. Criando estratégias de negociação robustas usando o gerenciamento de dinheiro visual para o reinvestimento de sua capital (ciência sobre como obter 1M de 10K Em um ano com o máximo, mas o risco estimado e as recompensas de suor). Talvez depois de ler isso, você pensou que este seria um outro artigo burro para aqueles caras pobres que procuram como se tornar rico através da negociação no forex e tudo isso. Bem, isso é totalmente falso Estamos trabalhando no MATLAB, e a maioria de nós somos cientistas e especialistas nesse aspecto, então tudo é sério. 2. Mais interatividade Ficarei feliz se pudermos nos relacionar com comentários em postagens. Assine nossas novidades para receber alertas sobre as últimas postagens e eventos. Mais tarde, temos planos de fazer webinars do Google Hangouts. Não perca, clique no botão Siga no canto superior direito para se juntar à nossa comunidade. O que você gostaria de ler em nossas postagens de blog Que tópicos você pode sugerir Por favor, escreva aqui nos comentários. Na minha publicação anterior, cheguei à conclusão de que a negociação de pares fechados para fechar não é tão lucrativa hoje como costumava ser antes de 2010. Um leitor apontou que poderia ser que a natureza reversa dos spreads acabasse de mudar para prazos mais curtos . Eu compartilhei a mesma idéia, então eu decidi testar essa hipótese. Desta vez, apenas um par é testado: 100 SPY vs -80 IWM. Backtest é executado em dados de barra de 30 segundos de 11.2011 a 12.2012. As regras são simples e similares à estratégia que testei na última publicação: se o retorno da barra do par exceder 1 no z-score, troque a barra seguinte. O resultado parece muito bonito: considero que isso é uma prova suficiente de que ainda existe uma grande inversão média na escala de 30 segundos. Se você acha que este gráfico é muito bom para ser verdade, isso infelizmente é o caso. Não foram considerados custos de transação ou spread de oferta e solicitação. Na verdade, eu duvidava que houvesse algum lucro depois de subtrair todos os custos de negociação. Ainda assim, este tipo de gráficos é a cenoura pendurada na minha frente, mantendo-me em pé. Mal notícias de todos, de acordo com os meus cálculos (que espero sinceramente são incorretas), o comércio de pares clássicos está morto. Algumas pessoas estariam totalmente em desacordo, mas aqui é o que eu encontrei: vamos tomar uma estratégia hipotética que funcione em uma cesta de etfs: SPY, XLY, XLE, XLF, XLI, XLB, XLK, IWM, QQQ, DIA A partir destes etfs 90 unique Podem ser feitos pares. Cada par é construído como um spread neutro no mercado. Regras de estratégia: em cada dia, para cada par, calcule o z-score com base no desvio padrão de 25 dias. Se o limite de gt de z-score, fique curto, feche o próximo dia. Se o limite de z-score lt for longo, feche o próximo dia. Para manter tudo simples, o cálculo é feito sem gerenciamento de capital (um pode ter até 90 pares em portfólio Em cada dia). Os custos de transação também não são considerados. Simplificando, esta estratégia acompanha a natureza do dia de um dia reverter a natureza dos spreads do mercado neutro. Aqui estão os resultados simulados para vários limiares: não importa o limite utilizado, a estratégia é altamente rentável em 2008, muito boa até 2009 e completamente inútil desde o início de 2010. Esta não é a primeira vez que me deparo com essa mudança na reversão média Comportamento em etfs. Não importa o que tentei, não tive sorte em encontrar uma estratégia de negociação de pares que funcione em ETFs passados ​​em 2010. Minha conclusão é que esses tipos de modelos simples de stat-arb simplesmente não diminuíram mais. ComércioAlgorítico com MATLAB - 2010 I Recebo o seguinte erro: Erro ao usar - As dimensões da matriz devem concordar. Erro no filtro2 (linha 10) Difaplicas (X1 (:, 3) - cr) Erro no scribe. legendmethodsgtlscan (linha 935) newpop filter2 (uns (3), pop) Erro no scribe. legendmethodsgtgetbestlocation (linha 700) pos (1: 2) lscan (duplo (h. Axes), duplo (h. Plotchildren), pos (3), pos (4), 0,1) Erro no scribe. legendmethods (linha 19) varargout feval (args) Erro no legendcolorbarlayoutgtdoBestLegendLayout ( Linha 1159) métodos pos (identificador (h), x27getbestlocationx27) Erro no legendcolorbarlayout (linha 120) doBestLegendLayout (ax, h) Erro no scribe. legendinit (linha 137) legendcolorbarlayout (ax, x27addToLayoutListx27, double (h)) Erro no scribe. Lenda (linha 122) h. init () Erro no legendgtmakelegend (linha 386) lhscribe. legend (ha, orient, location, position, children, listen, strings, propargs) Erro na legenda (linha 284) h, msg makelegend (ha , Varargin (arg: end)) Erro na lenda AlgoTradingDemo1 (linha 21) (x27Closex27, x27Leadx27, x27Lagx27, x27Locationx27, x27Bestx27) Abordagem interessante, ainda funcionando através disso. Traga o ajuste da curva O tradeSignal. m definitivamente tem um erro. Couldnx27t bastante obter Ivanx27s solução para o trabalho. Eu reparei da seguinte maneira: mude para idx indLoc (:) e adicione se (ind2use (iInd) 0) sigCsigB elseif (ind2use (iInd1) 0) sigCsigA Eu também renomeei alguns vars e me livrei desse negócio de eval, parece funcionar mais rápido . Código completo abaixo, se houver mais erros, sinta-se à vontade para comentar. Re anualização de Sharpe - caras OMG Quando você usa essa maximização de Sharpe, você também deve perceber que você não está realmente maximizando o índice de Sharpe, a menos que você esteja trabalhando com preços indexados. A função PnL dá diferenças de preços (não retorna), a relação Sharpe funciona com a função de retorno sigOut tradeSignal (pop, ind) BitString Length cntBString size (pop, 2) Calcular Indicators Length 4NoIndicators - 2 cntInd (cntBString2) 4 posições do indicador indLoc 1: 3 : CntBString-cntInd indLocEnd max (indLoc) Gerar Sinal sigOut zeros (tamanho (ind, 1), tamanho (pop, 1)) para iPop 1: tamanho (pop, 1) ind2use lógico (pop (iPop, cntBString-cntInd1: fim )) Idx indLoc (:) para iInd 1: comprimento (idx) -1 indicador 1 se (iInd 1) avaliar primeiro indicador sigAind (:, iInd) pop (iPop, idx (iInd)) para outros indicadores, combinar com Os resultados gerados até agora sigA sigC final indicador 2 sigBind (:, iInd1) pop (iPop, idx (iInd1)) conector se (ind2use (iInd) 0) sigCsigB I1 inativo elseif (ind2use (iInd1) 0) sigCsigA I2 inactive else conValue Bin2dec (num2str (pop (iPop, (1: 2) idx (iInd)))) switch conValue case 0 sigC bitand (sigA, sigB) caso 1 sigC bitor (sigA, sigB) caso 2 sigC bitxor (sigA, sigB) fim Final para sigOut (:, IPop) sigC final Após o Ivan, parece que precisamos transformar o sinal bruto -11 em 01 para usar o TradeSignal. m com precisão. Suponha pop1 0 0 0 1 1, tradeSignal (pop, 1 -1) 0 enquanto tradeSignal (pop, 1 0) 1, sendo o último o sinal correto dado a regra. Tenho alguns problemas com a função tradeSignal. m Parece ser um erro lá: le suponha que temos pop 1 0 0 1 0 0 0 0 1 1, o que significa não usar o indicador1 e retornar True se o indicador2 1 e o indicador 3 0 sinais 0 1 0, que deve satisfazer as condições de pop. Agora, eu executo TradeSignal (pop, sinais) e obtenho 0. Portanto, há um erro. Ix27m pensando na linha 50 e 57. Mas primeiro devemos declarar a linha 46: filtradoSignals ind (:, ind2use) linha 51: A eval (x27 (filtradoSignals (:, 1) pop (r, x27, idxstr, x27)) x27) Linha 57: B eval (x27 (filtradoSignals (:, x27, num2str (i1), x27) pop (r, x27, idxstr, x27)) x27) Agora, teste de sinais de função corrigida 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 s tradeSignal (pop, sinais) s I39m estudando engenharia elétrica (bacharel). Entretanto, descobri, que não consegui obter as caixas de ferramentas de qualquer maneira. Isso é, a menos que eu compre uma licença Matlab pessoal e essas duas caixas de ferramentas, uma vez que é impossível adicionar caixas de ferramentas à versão do aluno. Agora, isso é um pouco demais de um investimento para algo que é um hobby. Na verdade, existem algumas funções escritas no MATLAB para ajudá-lo a baixar rapidamente os dados do Yahoo, o que é bastante o mesmo, você está usando Zipline localmente. E é grátis. Por exemplo, este. No entanto, ainda existem muitas coisas a serem feitas, principalmente coisas de infra-estrutura, como a tradução de sinais comerciais para o diário de comércio, calculando CAGR, beta, alfa, tudo. Tipos de coisas pequenas, mas necessárias. Meu 2c é tentar familiarizar-se com o Python, gratuito e popular. Pode realmente fazer mais. Por exemplo, em pouco tempo você terá uma ótima idéia e quer escrever um material para monitorar as flutuações das ações, bem como escrever e enviar um pedido rapidamente. Matlab será menos conveniente, porque é basicamente um único thread.

No comments:

Post a Comment