Sunday, 1 October 2017

Negociação com máquinas vector de suporte (svm)


Negociação com Máquinas Vector de Suporte (SVM)


(Este artigo foi publicado pela primeira vez em Quintuitive »R. e gentilmente contribuiu para R-bloggers)


Finalmente todas as estrelas alinharam e eu posso confiantemente dedicar algum tempo para back-testing de novos sistemas de negociação, e Support Vector Machines (SVM) são o novo 8220; toy8221; Que vai me manter ocupado por um tempo.


As SVMs são uma ferramenta bem conhecida da área de Aprendizagem Automática supervisionada. E eles são usados ​​tanto para classificação e regressão. Para mais detalhes consulte a literatura.


Parece-me que a aplicação mais intuitiva para negociação é regressão, por isso vamos começar por construir um modelo de regressão SVM.


Seguindo nossa experiência com modelos ARMA + GARCH, vamos começar tentando prever retornos, em vez de preços. Da mesma forma, em nossos primeiros testes, usaremos apenas os retornos dos 5 dias anteriores como as características que determinam o retorno de um determinado dia. Vamos começar com o histórico de 500 dias como o conjunto de treinamento.


Em termos mais matemáticos, para o conjunto de treinamento temos N características, para cada um deles temos M amostras. Temos também respostas M.


Dada uma linha de valores de característica, a matriz esquerda, o SVM é treinado para produzir o valor de resposta. Em nosso exemplo específico, temos cinco colunas (características), cada coluna correspondente aos retornos com um retardo diferente (de 1 a 5). Temos 500 amostras e as respostas correspondentes.


Uma vez que o SVM é treinado sobre este conjunto, podemos começar a alimentá-lo com conjuntos de cinco recursos, correspondente aos retornos para os cinco dias anteriores, eo SVM irá fornecer-nos com a resposta, que é o retorno previsto. Por exemplo, após o treinamento do SVM nos 500 dias anteriores, usaremos os retornos para os dias 500, 499, 498, 497 e 496 (estes são nossos 2C21 "/% como 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 eu ainda estou planejando para tentar no futuro.


Então eu tentei algumas estratégias. Primeiro eu tentei algo muito semelhante à abordagem ARMA + GARCH os retornos defasados ​​dos cinco dias anteriores. Fiquei bastante surpreso ao ver esta estratégia melhor desempenho do que o ARMA + GARCH (esta é a terra natal do ARMA + GARCH e eu teria sido bastante feliz apenas com desempenho comparável)!


Em seguida, tentei os mesmos cinco recursos, mas tentando selecionar o melhor subconjunto. A seleção foi feita usando uma abordagem gananciosa, começando com 0 recursos, e adicionando interativamente o recurso que minimiza o erro melhor. Essa abordagem melhorou ainda mais as coisas.


Finalmente, eu tentei uma abordagem diferente com cerca de uma dúzia de recursos. As características incluídas retornam ao longo do período de tempo diferente (1-dia, 2-dia, 5-dia, etc), algumas estatísticas (média, mediana, sd, etc) e volume. Eu usei a mesma abordagem ávida para selecionar recursos. Este sistema final mostrou um desempenho muito bom também, mas demorou um inferno de um tempo para correr.


Tempo para terminar este post, os resultados de back-testing tem que esperar. Até então você pode jogar com o código-fonte completo sozinho. Aqui está um exemplo de como usá-lo:

No comments:

Post a Comment