Saturday 21 October 2017

Svm trading system no Brasil


Negociação com SVMs: Desempenho Para obter uma sensação de desempenho de SVM na negociação, executo configurações diferentes nos dados históricos S038P 500 de 8230 aos 50. O motivo principal por trás de usar essa década foi decidir quais parâmetros variar e o que manter constante antes de executar os testes mais importantes. Trate-o como um teste de 8220in-amostra8221 para evitar (mais) o excesso de ajuste. Primeiro, o gráfico de desempenho: S038P 500 Desempenho de Negociação Muito bom O uso dos 5 retornos diários remanescentes mostra um desempenho semelhante à estratégia ARMAGARCH, que eu achei muito promissor. Se você se perguntar por que estou tão entusiasmado com esse fato, it8217s porque aqui estamos na área em que o ARMAGARCH é o melhor e, no entanto, os SVMs mostram desempenho comparável. As estatísticas também são impressionantes: ao escrever esta publicação, encontrei outro esforço para usar SVMs na negociação pelo Quantum Financier. Sua abordagem usa RSI de comprimento diferente como entrada para o SVM, mas também usa classificação (mapeia os retornos para dois valores, curto ou longo) em vez de regressão. Como eu planejava testar a classificação de qualquer maneira, seu post me inspirou a implementá-lo e executar uma comparação adicional, regressão vs classificação: S038P 500 SVM Trading 8211 Regressão vs Classificação O que posso dizer 8211, ambos parecem funcionar perfeitamente. Como um leitor sugeriu nos comentários, a Classificação exibe retornos mais consistentes. Olhando para a mesa, a classificação reduziu a metade da redução máxima, mas, curiosamente, não melhorou a proporção Sharpe significativamente. Nada conclusivo aqui, porém, foi uma rápida execução das estratégias mais rápidas (em termos de tempo de execução). Ainda há uma longa lista de tópicos a explorar, apenas para lhe dar uma ideia, sem nenhuma ordem específica: Adicione outros recursos. Principalmente pensando em adicionar algumas séries relacionadas ao Fed, esses dados remontam a 1960, portanto, em breve. :) Experimente outros parâmetros de svm: outras regressões, outras classificações, outros kerenls, etc. Isso é mais como um teste de estabilidade. Experimente outras funções de erro. O padrão é usar o erro quadrático médio, mas no caso de regressão, por que não usar Razão Sharpe (na amostra). O caso de regressão é mais simples, uma vez que temos os retornos reais 8211 verificar a entrada de tune. control. Experimente períodos mais longos em vez de dias. Weekly é um começo, mas idealmente eu gostaria de implementar períodos de dois ou três dias. Varie o período de loopback. Use mais classes com classificação: dias grandes, dias médios, etc. Isso levará tempo. Como sempre, comentários e comentários são bem-vindos. 1) Você possui Razões Sharpe para regressão SVM vs classificação SVM Ao examinar o gráfico, a classificação parece dar melhores retornos ajustados ao risco. 2) Você já ouviu falar do pacote do Caret (caret. r-forge. r-project. orgindex. html). Parece que já incorporou muito do trabalho que vejo que você usa no seu código existente. Outro grande benefício é que você pode facilmente trocar ML learning algo (por exemplo, redes neurais) sem ter que recodificar tudo. Blog muito interessante 1) Bom ponto, cortou a redução, mas não a relação Sharpe significativamente 8211 eu atualizei a publicação. 2) Obrigado por trazer o pacote do Caret, esta é a segunda vez que ouço falar sobre isso, então é hora de olhar mais de perto. :) Parece bastante promissor, certamente muito para aprender com isso. Você compartilha seu código Os resultados são realmente impressionantes. I8217m tentando construir um classificador SVM fazendo algo semelhante, mas eu quero usar mais parâmetros do que preços. Embora, talvez isso não seja tão útil, porque parece que os preços sozinhos fornecem valor preditivo. Obrigado. Eu também estou planejando usar mais do que apenas os preços, mas esse tipo de dados não está disponível para os anos 50. Em geral, os anos 50 no S038P 500 são bastante preditivos. É provável que sejam necessários modelos mais complexos. Verifique a publicação anterior (quintuitive20171130trading-with-support-vector-machines-svm) na série 8211. Existe um link para o código que usei com base no pacote e1071. Desde que publiquei o código, mudei-me para o pacote de caixa que fornece uma interface unificada para muitos modelos. Parece muito bom até agora também. Parece bom, obrigado por compartilhar. Muito bem sucedida. Também estou tentando usar o SVM-SVR para prever o preço de fechamento dos estoques, ou seja: valor do índice como DJ CAC40, etc. Minha idéia é muito simples e fácil, eu baixei os dados em um site de intermediário, tenho acesso de 3 anos Desses dados. A resposta é o valor próximo do índice, eu suponho que os recursos do dia anterior tenham um impacto do valor próximo dos próximos dias, ou seja. O valor de abertura de valor mais baixo do valor mais alto para segunda-feira são características para prever, para explicar o valor de fechamento de terça-feira, eu construo meu conjunto de dados com esses pressupostos, então eu uso recurso com lag1, obviamente eu posso adicionar outros recursos como lag2, lag3. Eu coloco uma amostra da minha estrutura de dados aqui: openinglag1 highlag1 smallestlag1 fechamento (resposta) volume lag1 3950.59 3959.2 3936.33 4013.97 589818 Finalmente eu tenho um conjunto de dados 764, todos os dados que eu uso para treinar o svr, e eu prevejo os próximos dias como Eu mencionei acima. Minhas perguntas são como posso prever, por exemplo, os próximos 5 dias. A minha estrutura de dados está correta. Não está feliz com a previsão de rodagem em svmComputeForecasts Veja o que faz para modelPeriod8217weeks8217, por exemplo. Uma alternativa é fazer previsões semanais logo à frente. Em outras palavras, sintetize os dados em semanas (ou trunfos de três dias) e ligue para svmComputeForecasts usando 8216days8217 neste conjunto. Cada previsão aplica-se a todo o período. Tanto quanto eu sei, não se pode apenas fazer uma previsão probabilística de cinco dias com SVMs (isso é possível com técnicas ARMA). Espero que isso ajude, Ivan Hi, I8217ve desfrutando suas postagens e tenho uma pergunta. Eu estava pensando qual o tipo de melhoria que você encontrou ao passar do modelo ARMA simples para o modelo ARMA-GARCH. Já testou outros parâmetros de treinamento da janela rolante. Além disso, você achou que o lado curto fazia muita diferença (ou seja, é muito melhor ou Pior) do que longo apenas Oi, abordei algumas dessas questões em uma postagem posterior: quintuitive20171227armagarch-experiences. Adicionar mais estatísticas ao tutorial ARMAGARCH é certamente na minha lista, mas isso levará tempo. Pode-se fazer todas essas análises usando o indicador (quintuitivewp-contentuploads201708spcInd3.csv) juntamente com o GSPC do Yahoo. O indicador já está alinhado 8211 sem necessidade de atraso. Muito impressionante. No entanto, você tentou usar a floresta aleatória 8211, afirma ser superior ao SVM, pois permite efeitos implícitos não lineares e termos de interação entre as variáveis ​​exógenas. Também reduz a variável exógena aos mais importantes criadores de jogos e é bastante rápido, especialmente com seu conjunto de dados. Oi e obrigado pela resposta anterior. Uma coisa em que I8217m um pouco confuso é que no posto ARMAGARCH (quintuitive20170822arma-models-for-trading) você menciona 18.87 CAGR e BampH parece ter cerca de 7 CAGR de olho no gráfico. No entanto, no quadro acima você mostra, 30,88 e 15,4 para ARMAGARCH e BH, respectivamente. É um período de tempo diferente ou estou perdendo algo Obrigado novamente. Trading com Máquinas de Vector de Suporte (SVM) Finalmente, todas as estrelas se alinharam e posso dedicar com confiança algum tempo para back-testing de novos sistemas de negociação e Support Vector Machines ( SVM) são o novo 8220toy8221 que vai me manter ocupado por um tempo. Os SVMs são uma ferramenta bem conhecida da área de Aprendizado de Máquinas supervisionado. E eles são usados ​​tanto para classificação quanto para regressão. Para mais detalhes, consulte a literatura. Parece-me que a aplicação mais intuitiva para negociação é a regressão, então let8217s começam pela construção de um modelo de regressão SVM. Seguindo nossa experiência com os modelos ARMAGARCH, começaremos tentando prever os retornos, em vez dos preços. Da mesma forma, em nossos primeiros testes, usaremos apenas os retornos dos últimos 5 dias como características que determinam o retorno de um determinado dia. Começaremos com história de 500 dias como o conjunto de treinamento. Em termos mais matemáticos, para o conjunto de treinamento, temos recursos N, para cada um deles temos M amostras. Nós também temos respostas M. Dada uma linha de valores de característica, a matriz esquerda, o SVM é treinado para produzir o valor de resposta. No nosso exemplo específico, temos cinco colunas (características), cada coluna correspondente aos retornos com atraso diferente (de 1 a 5). Temos 500 amostras e as respostas correspondentes. Uma vez que o SVM é treinado neste conjunto, podemos começar a alimentá-lo com conjuntos de cinco recursos, correspondentes aos retornos dos cinco dias anteriores, e o SVM nos fornecerá a resposta, qual é o retorno previsto. Por exemplo, depois de treinar o SVM nos 500 dias anteriores, usaremos os retornos para os dias 500, 499, 498, 497 e 496 (estes são nossos como a entrada para obter o retorno previsto para o dia 501. De todos os pacotes disponíveis Em R, eu decidi escolher o pacote e1071. Uma segunda escolha foi o pacote kernlab, que ainda estou planejando tentar no futuro. Então tentei algumas estratégias. Primeiro tentei algo muito parecido com a abordagem ARMAGARCH 8211 o Retornaram os retornos dos cinco dias anteriores. Fiquei bastante surpreso ao ver esta estratégia ter melhor desempenho do que a ARMAGARCH (esta é a terra natal do ARMAGARCH e eu teria ficado bastante feliz apenas com desempenho comparável) Em seguida, tentei o mesmo cinco Mas tentando selecionar o melhor subconjunto. A seleção foi feita usando uma abordagem gananciosa, começando com 0 recursos e adicionando de forma interativa o recurso que minimiza melhor o erro. Esta abordagem aprimorou ainda mais as coisas. Finalmente, tentei uma abordagem diferente H com cerca de uma dúzia de recursos. Os recursos incluíram retornos em diferentes períodos de tempo (1 dia, 2 dias, 5 dias, etc.), algumas estatísticas (média, mediana, sd, etc.) e volume. Eu usei a mesma abordagem gananciosa para selecionar recursos. Este sistema final também mostrou um excelente desempenho, mas demorou um momento para correr. Hora de terminar esta publicação, os resultados dos back-testing devem aguardar. Até então você pode jogar com o código-fonte completo você mesmo. Aqui está um exemplo de usá-lo: oi no Windows doesn8217t funciona por causa do problema multicore. Mais uma coisa que eu não consigo entender é refletida nessas linhas para o código retsindex (data) data dataindex (rets) Na minha opinião, it8217s é mais eficaz para mesclar série smth como mydtret lt-na. exclude (fusion (rets, data) E ter apenas um objeto de argumento para função de chamada em vez de 2 Trabalho interessante, obrigado Mike Argh, Windows 8211. Eu uso isso raramente ultimamente. Muito surpreendido ainda, já que o pacote paralelo faz parte da distribuição base R agora. Esperemos que seja abordado em breve Entretanto, como não está a usar a execução paralela, existem outros pacotes que oferecem execução em paralelo, mas isso seria mais trabalho. Você está certo sobre a fusão 8211. Eu ainda me pergunto por que eu fiz isso dessa maneira desta vez. :) I8217m recebendo erros. Agora, o erro é gt data svmFeatures (tt), c (1,2) Erro em match. fun (FUN). Objeto 8216skewness8217 não encontrado Mas quando eu faço manualmente objeto de dados eu recebo erro na previsão svmComputeOneForecast lt - função relacionada a dimensões e samplingquotcrossquot It039s difícil para mim depurar skewness vem do pacote PerformanceAnalytics, que você precisa instalar da CRAN. Adicionando exigir (PerformanceAnalytics) como a primeira linha de svmFeatures deve resolver o primeiro problema. Agora o erro é Error in merge. xts (res, xts (na. trim (lag (rollmean (rets, k 21, alinhar 8220right8221). Comprimento de 8216dimnames8217 2 não é igual à extensão da matriz, parece que no código do Windows precisa de muitas mudanças Mike, eu nunca quis dizer o código para ser usado diretamente (até agora eu estava fornecendo apenas fragmentos), mas estou surpreso que R no Windows seja tão feio. Não tenho certeza do que o seu objetivo, mas para analisar o desempenho das estratégias, você pode usar o Série de indicadores que já estão computados. It8217s é apenas um interesse acadêmico puro sobre o SVM. Eu costumava trabalhar com clusters, PCA e eu tenho curiosidade de como o SVM está fazendo o mesmo trabalho. No Windows, muitos erros estão relacionados a objetos com datas como xts é Ou os quadros de dados. O UNIX é melhor, mas todos os corretores dão API para o Windows. Alguns deles em Java e só isso, podemos usar do UNIX. Eu não gosto de win architecture, mas já é um hábito e eu não tenho tempo para mudar o sistema operacional. Eu apenas Tentei no Windows 7, 64 bit, R versão 2.15.2. Recebo um aviso de svmFeatures, que Eu sei como consertar (chamar sd em um objeto xtszoo faz conversão interessante para uma matriz), mas sem problemas. Correndo: Obrigado I8217ll tentar. Uma pergunta se você não se importa Por que você está usando get with function CetSymbols do pacote quantmod Eu uso call vers Exemplo SPY lt - getSymbols (039SPY039, auto. assign FALSE) Você tem muito para calcular e obter memória de consumo e leva tempo para obter objetos Nome como uma string var O mesmo erro I8217m usando R 2.15.1 Mas I8217m surpreendido com este resultado antes da função gt head (data) 1 (8230, list character (), pacote NULL, lib. loc NULL, 2 verbose getOption (8220verbose8221 ), Envir. GlobalEnv) 3 4 fileExt lt-function (x) 5 db lt - grepl (quot ... (gzbz2xz) quot, x) 6 ans lt-sub (quot..quot, quotquot, x) Parece que Os dados são palavras reservadas E agora eu não sei o que está funcionando

No comments:

Post a Comment