Monday 11 December 2017

Sistema de comércio svm


MetaTrader 5 - Aprendizagem da máquina de negociação: como o suporte de máquinas vetoriais podem ser usados ​​na negociação O que é uma máquina de vetor de suporte Uma máquina de vetor de suporte é um método de aprendizagem de máquina que tenta tirar dados de entrada e classificar em uma das duas categorias. Para que uma máquina de vetor de suporte seja efetiva, é necessário primeiro usar um conjunto de dados de entrada e saída de treinamento para construir o modelo de máquina vetorial de suporte que pode ser usado para classificar novos dados. Uma máquina de vetor de suporte desenvolve este modelo, tomando as entradas de treinamento, mapeando-as para o espaço multidimensional e, em seguida, usando a regressão para encontrar um hiperplano (um hiperplaneiro é uma superfície no espaço n-dimensional que separa o espaço em dois espaços) que se separa melhor As duas classes de insumos. Uma vez que a máquina de vetores de suporte tenha sido treinada, é capaz de avaliar novas entradas em relação ao hiperplane de separação e classificá-lo em uma das duas categorias. Uma máquina de vetor de suporte é essencialmente uma máquina de entrada de saída. Um usuário é capaz de colocar uma entrada, e com base no modelo desenvolvido através do treinamento, ele retornará uma saída. O número de entradas para qualquer máquina de vetor de suporte determinada varia teoricamente de um para o infinito, no entanto, em termos práticos, o poder de computação limita o número de entradas que podem ser utilizadas. Se, por exemplo, N entradas são usadas para uma máquina de vetor de suporte particular (o valor inteiro de N pode variar de um para o infinito), a máquina de vetor de suporte deve mapear cada conjunto de entradas em espaço N-dimensional e encontrar um (N-1 ) - hiperplaneamento dimensional que melhor separa os dados de treinamento. Figura 1. Máquinas de vetor de suporte são máquinas de entrada de saída A melhor maneira de conceituar como uma máquina de vetor de suporte funciona é considerando o caso bidimensional. Suponha que desejamos criar uma máquina de vetor de suporte que tenha duas entradas e retorna uma única saída que classifique o ponto de dados como pertencente a uma das duas categorias. Podemos visualizar isso, plotando-o em um gráfico bidimensional, como o gráfico abaixo. Figura 2. À esquerda: As entradas da máquina vetorial de suporte são mapeadas para um gráfico 2D. Os círculos vermelhos e as cruzes azuis são usados ​​para denotar as duas classes de entradas. Figura 3. Direita: As entradas da máquina do vetor de suporte são mapeadas para um gráfico 2D. Os círculos vermelhos e as cruzes azuis são usados ​​para denotar as duas classes de entradas com uma linha preta indicando o hiperplano separador. Neste exemplo, os cruzamentos azuis indicam pontos de dados que pertencem à categoria 1 e os círculos vermelhos que representam pontos de dados pertencentes à categoria 2. Cada um dos pontos de dados individuais tem valor de entrada 1 exclusivo (representado por sua posição no eixo x ) E um valor de entrada 2 exclusivo (representado por sua posição no eixo y) e todos esses pontos foram mapeados para o espaço bidimensional. Uma máquina de vetor de suporte é capaz de classificar dados criando um modelo desses pontos no espaço bidimensional. A máquina de vetor de suporte observa os dados no espaço bidimensional e usa um algoritmo de regressão para encontrar um hiperplano 1-dimensional (aka line) que separe com precisão os dados em suas duas categorias. Esta linha de separação é então usada pela máquina de vetor de suporte para classificar novos pontos de dados em categoria 1 ou categoria 2. A animação abaixo ilustra o processo de treinamento de uma nova máquina vetorial de suporte. O algoritmo começará fazendo um achado aleatório ao encontrar um hiperplano separador, então melhorará iterativamente a precisão do hiperplane. Como você pode ver, o algoritmo começa de forma bastante agressiva, mas depois diminui quando começa a se aproximar da solução de desejos. Figura 4. Uma animação que mostra um treinamento de máquina de vetor de suporte. O hiperplaneiro converge progressivamente na geometria ideal para separar as duas classes de dados. O cenário bidimensional acima apresentado nos permite visualizar o processo de uma máquina vetorial de suporte, no entanto, é possível classificar um ponto de dados usando duas entradas. E se quisermos usar mais entradas Felizmente, o algoritmo de máquina de vetor de suporte nos permite fazer o mesmo em dimensões superiores, embora seja muito mais difícil de conceituar. Considere isso, você deseja criar uma máquina de vetor de suporte que leva 20 entradas e pode classificar qualquer ponto de dados usando essas entradas em qualquer categoria 1 ou categoria 2. Para fazer isso, a máquina vetorial de suporte precisa modelar os dados em espaço de 20 dimensões E use um algoritmo de regressão para encontrar um hiperplano 19 dimensional que separe os pontos de dados em duas categorias. Isso é extremamente difícil de visualizar, pois é difícil para nós compreender algo acima das 3 dimensões, no entanto, tudo o que você precisa saber é que funciona exatamente da mesma maneira que acontece com o caso bidimensional. Como funciona o Vector de ferramentas de suporte Exemplo: É um Schnick Imagine esse cenário hipotético, você é um pesquisador que investiga um animal raro encontrado apenas nas profundezas do Ártico chamado Shnicks. Dado o afastamento destes animais, apenas um punhado pequeno já foi encontrado (digamos cerca de 5000). Como pesquisador, você está preso à questão. Como posso identificar um Schnick Tudo o que você tem à sua disposição são os trabalhos de pesquisa publicados anteriormente pelo punhado de pesquisadores que já viram um. Nestes trabalhos de pesquisa, os autores descrevem certas características sobre os Schnicks encontrados, isto é, altura, peso, número de pernas, etc. Mas todas essas características variam entre os documentos de pesquisa sem padrão discernível. Como podemos usar esses dados para identificar um novo animal como um schnick. Uma solução possível para o nosso problema é usar uma máquina de vetor de suporte para identificar os padrões nos dados e criar uma estrutura que possa ser usada para classificar os animais como um schnick ou Não é um schnick. O primeiro passo é criar um conjunto de dados que podem ser usados ​​para treinar sua máquina vetorial de suporte para identificar os schnicks. Os dados de treinamento são um conjunto de entradas e saídas correspondentes para a máquina vetorial de suporte para analisar e extrair um padrão. Portanto, devemos decidir quais os insumos serão usados ​​e quantos. Teoricamente, podemos ter tantas entradas como desejamos, no entanto isso geralmente pode levar a um treinamento lento (mais entradas você tem mais tempo leva a máquina de vetor de suporte para extrair padrões). Além disso, você deseja escolher valores de insumos que tendem a ser relativamente consistentes em todos os schnicks. Por exemplo, altura ou peso do animal seria um bom exemplo de insumo, porque você esperaria que isso fosse relativamente consistente em todos os schnicks. No entanto, a idade média de um animal seria uma fraca escolha de contribuição porque você esperaria que a idade dos animais identificados variasse bastante. Por esta razão, foram escolhidas as seguintes entradas: Altura Peso O número de pernas O número de olhos O ​​comprimento dos braços dos animais A velocidade média dos animais A frequência dos animais que acoplam a chamada Com as entradas escolhidas, podemos começar a compilar nossos dados de treinamento . Os dados de treinamento efetivos para uma máquina de vetor de suporte devem atender a certos requisitos: Os dados devem ter exemplos de animais que são schnicks. Os dados devem ter exemplos de animais que não são schnicks. Neste caso, temos os trabalhos de pesquisa de cientistas que identificaram com sucesso um schnick E listaram suas propriedades. Portanto, podemos ler esses trabalhos de pesquisa e extrair os dados em cada uma das entradas e alocar uma saída de verdade ou falso para cada um dos exemplos. Os dados de treinamento neste caso podem parecer semelhantes à tabela abaixo. Tabela 1. Tabela de exemplos de observações de schnick Uma vez que reunimos os dados para todas as nossas entradas e saídas de treinamento, podemos usá-lo para treinar nossa máquina de vetores de suporte. Durante o processo de treinamento, a máquina de vetor de suporte criará um modelo em espaço de sete dimensões que pode ser usado para classificar cada um dos exemplos de treinamento em verdade ou em falso. A máquina de vetor de suporte continuará a fazer isso até que ele tenha um modelo que represente com precisão os dados de treinamento (dentro da tolerância de erro especificada). Uma vez que o treinamento está completo, este modelo pode ser usado para classificar novos pontos de dados como verdadeiro ou falso. A máquina de suporte de vetores realmente funciona Usando o cenário de Schnick, escrevi um script que testa o quão bem uma máquina de vetor de suporte pode realmente identificar novos schnicks. Para fazer isso, usei a Biblioteca de funções da Ferramenta de Aprendizagem de Máquinas de Vector de Suporte que pode ser baixada do Mercado. Para modelar este cenário de forma eficaz, precisamos primeiro decidir quais são as propriedades reais de um Schnick. As propriedades que assumi neste caso foram listadas na tabela abaixo. Se um animal satisfaz todos os critérios abaixo, então é um Schnick. Tabela 2. Resumo dos parâmetros que definem um schnick Agora que definimos nosso Schnick, podemos usar essa definição para experimentar com máquinas de vetor de suporte. O primeiro passo é criar uma função capaz de tomar as sete entradas para qualquer animal dado e retornar a classificação real do animal como um schnick ou não. Esta função será usada para gerar dados de treinamento para a máquina vetorial de suporte, bem como para avaliar o desempenho do mesmo no final. Isso pode ser feito usando a função abaixo. O próximo passo no processo é criar uma função que possa gerar entradas e saídas de treinamento. As entradas neste caso serão geradas criando números aleatórios dentro de um intervalo definido para cada um dos sete valores de entrada. Em seguida, para cada um dos conjuntos de entradas aleatórias geradas, a função isItASchnick () acima será usada para gerar a saída desejada correspondente. Isso é feito na função abaixo: agora temos um conjunto de entradas e saídas de treinamento, agora é hora de criar nossas máquinas de vetor de suporte usando a Ferramenta de Aprendizado de Máquinas de Vetores de Suporte disponível no Mercado. Uma vez que uma nova máquina de vetores de suporte é criada, é necessário passar as entradas e saídas de treinamento para ele e executar o treinamento. Agora temos uma máquina de vetor de suporte que foi treinada com sucesso na identificação de Scnhicks. Para verificar isso, podemos testar a máquina de vetores de suporte final pedindo que ele classifique novos pontos de dados. Isso é feito primeiro gerando entradas aleatórias e, em seguida, usando a função isItASchnick () para determinar se essas entradas correspondem a um Schnick real, use a máquina de vetor de suporte para classificar as entradas e determinar se o resultado previsto corresponde ao resultado real. Isso é feito na função abaixo: Eu recomendo jogar com os valores dentro das funções acima para ver como a máquina de vetor de suporte funciona em diferentes condições. Por que o Support Vector Machine é tão útil O benefício de usar uma máquina de vetor de suporte para extrair padrões complexos dos dados é que não é necessário uma compreensão prévia do comportamento dos dados. Uma máquina de vetor de suporte é capaz de analisar os dados e extrair seus únicos insights e relacionamentos. Desta forma, funciona de forma semelhante a uma caixa preta recebendo entradas e gerando uma saída que pode revelar-se muito útil na busca de padrões nos dados que são muito complexos e não óbvios. Uma das melhores características das máquinas de vetor de suporte é que eles são capazes de lidar com erros e ruídos nos dados muito bem. Muitas vezes, eles são capazes de ver o padrão subjacente dentro dos dados e afastar os outliers de dados e outras complexidades. Considere o seguinte cenário, ao realizar sua pesquisa em Schnicks, você encontra vários trabalhos de pesquisa que descrevem Schnicks com características massivamente diferentes (como um schnick com 200kg e 15000mm de altura). Erros como este podem levar a distorções seu modelo do que é um Schnick, o que poderia causar um erro ao classificar novas descobertas de Schnick. O benefício da máquina de vetor de suporte é que ele irá desenvolver um modelo que concorda com o padrão subjacente oposto a um modelo que se encaixa todos os pontos de dados de treinamento. Isso é feito ao permitir um certo nível de erro no modelo para habilitar a máquina vetorial de suporte para ignorar quaisquer erros nos dados. No caso da máquina de vetor de suporte da Schnick, se permitimos uma tolerância de erro de 5, o treinamento só tentará desenvolver um modelo que concorde com 95 dos dados de treinamento. Isso pode ser útil porque permite que o treinamento ignore a pequena porcentagem de outliers. Podemos investigar esta propriedade da máquina de vetor de suporte ainda mais modificando nosso script Schnick. A função abaixo foi adicionada para introduzir erros aleatórios deliberados em nosso conjunto de dados de treinamento. Esta função selecionará pontos de treinamento aleatoriamente e substituirá as entradas e a saída correspondente com variáveis ​​aleatórias. Esta função nos permite introduzir erros deliberados em nossos dados de treinamento. Usando esses dados preenchidos por erros, podemos criar e formar uma nova máquina de vetores de suporte e comparar seu desempenho com o original. Quando o script é executado, ele produz os seguintes resultados no Expert Log. Dentro de um conjunto de dados de treinamento com 5000 pontos de treinamento, conseguimos introduzir 500 erros aleatórios. Ao comparar o desempenho desta máquina de vetor de suporte preenchido com o original, o desempenho é reduzido apenas em lt1. Isso ocorre porque a máquina de vetor de suporte é capaz de ignorar os outliers no conjunto de dados ao treinar e ainda é capaz de produzir um modelo impressionantemente preciso dos dados verdadeiros. Isso sugere que as máquinas de vetor de suporte possam potencialmente ser uma ferramenta mais útil na extração de padrões complexos e insights de conjuntos de dados ruidosos. Figura 5. O registro experiente resultante após a execução do script Schnick no MetaTrader 5. Versões de Demonstração Uma versão completa do código acima pode ser baixada da Base de Código, no entanto, este script só pode ser executado no seu terminal se você tiver comprado um Versão completa da Ferramenta de Aprendizado de Máquinas de Vetores de Suporte do Market. Se você tiver apenas uma versão de demonstração dessa ferramenta baixada, você estará limitado a usar a ferramenta através do testador de estratégia. Para permitir o teste do código Schnick usando a versão de demonstração da ferramenta, reescrevi uma cópia do script em um Expert Advisor que pode ser implantado usando o testador de estratégia. Ambas as versões de código podem ser baixadas seguindo os links abaixo: Versão Completa - Usando um Script implantado no terminal MetaTrader 5 (requer uma versão adquirida da Ferramenta de Aprendizagem de Máquina de Vetores de Suporte) Versão Demo - Usando um Consultor Especialista que é Implantado no testador de estratégia MetaTrader 5 (requer apenas uma versão de demonstração da Ferramenta de Aprendizagem de Máquinas de Vetores de Suporte) Como pode suportar máquinas vetoriais ser usado no mercado. É certo que o exemplo de Schnick discutido acima é bastante simples, no entanto, existem algumas semelhanças que Pode ser desenhado entre este exemplo e usando as máquinas de vetor de suporte para análise técnica de mercado. A análise técnica é fundamentalmente sobre o uso de dados históricos do mercado para prever futuros movimentos de preços. Da mesma forma, dentro do exemplo schnick, estávamos usando as observações feitas por cientistas anteriores para prever se um novo animal é um schnick ou não. Além disso, o mercado está atormentado com ruído, erros e valores atípicos estatísticos que tornam o uso de uma máquina de vetor de suporte um conceito interessante. A base para um número significativo de abordagens de análise de análise técnica envolve as seguintes etapas: Monitorando vários indicadores Identificando quais condições para cada indicador se correlaciona com um comércio potencialmente bem-sucedido. Assista a cada um dos indicadores e avalie quando todos (ou a maioria) estão sinalizando um comércio. É possível adotar uma abordagem semelhante para usar máquinas de vetor de suporte para sinalizar novos negócios de forma semelhante. A ferramenta de ferramentas de suporte de ferramentas de vetores foi desenvolvida com isso em mente. Uma descrição completa de como usar esta ferramenta pode ser encontrada no mercado, então eu vou apenas dar uma visão geral rápida. O processo para usar esta ferramenta é o seguinte: Figura 6. O diagrama de blocos mostrando o processo para implementar a máquina-ferramenta do vetor de suporte em um consultor especialista Antes de poder usar a Ferramenta de Aprendizado de Máquinas de Vector de Suporte, é importante primeiro entender como o treinamento Entradas e saídas são geradas. Como são as Entradas de Treinamento Geradas, os indicadores que você quer usar como entradas já foram inicializados, bem como a sua nova máquina vetorial de suporte. O próximo passo é passar as alças de indicadores para a sua nova máquina de vetores de suporte e instruí-lo sobre como gerar os dados de treinamento. Isso é feito chamando a função setIndicatorHandles (). Esta função permite que você passe as alças de indicadores inicializados na máquina vetorial de suporte. Isso é feito passando e uma matriz inteira contendo as alças. As outras duas entradas para esta função são o valor de deslocamento e o número de pontos de dados. O valor do deslocamento denota o deslocamento entre a barra atual e a barra de partida a ser usada na geração das entradas de treinamento e o número de pontos de treinamento (denotado por N) define o tamanho dos dados de treinamento. O diagrama abaixo ilustra como usar esses valores. Um valor de deslocamento de 4 e um valor N de 6 dirão à máquina de vetor de suporte que use apenas as barras capturadas no quadrado branco para gerar entradas e saídas de treinamento. Da mesma forma, um valor de deslocamento de 8 e um valor de N de 8 dirão à máquina de vetor de suporte que use apenas as barras capturadas no quadrado azul para gerar entradas e saídas de treinamento. Uma vez que a função setIndicatorHandles () foi chamada, é possível chamar a função genInputs (). Esta função usará as alças de indicadores para passar para gerar uma matriz de dados de entrada a ser usada para treinar. Figura 7. Gráfico de velas que ilustra os valores de Deslocamento e N Como são geradas as Saídas de Treinamento As saídas de Treinamento são geradas simulando negociações hipotéticas com base em dados de preços históricos e determinando se tal comércio teria sido bem sucedido ou mal sucedido. Para fazer isso, existem alguns parâmetros que são usados ​​para instruir a ferramenta de aprendizado de máquina de vetor de suporte, como avaliar um comércio hipotético como bem sucedido ou mal sucedido. A primeira variável é OPTRADE. O valor deste pode ser COMPRAR ou VENDER e corresponderá a operações de compra ou venda hipotéticas. Se o valor deste for BUY, então, ao gerar as saídas, apenas analisará o potencial sucesso de negociações de compras hipotéticas. Alternativamente, se o valor deste é VENDER, então, ao gerar as saídas, apenas analisará o potencial sucesso de negociações de venda hipotéticas. Os próximos valores utilizados são Stop Loss e Take Profit para esses negócios hipotéticos. Os valores são definidos em pips e definirão os níveis de parada e limite para cada uma das negociações hipotéticas. O parâmetro final é a duração do comércio. Esta variável é medida em horas e assegurará que apenas os negócios que estejam completos dentro dessa duração máxima serão considerados bem-sucedidos. A razão para incluir esta variável é evitar o suporte de máquinas de vetores de máquinas de sinalização em um mercado paralelo lento. Considerações para fazer ao escolher entradas É importante colocar algum pensamento na seleção de entrada ao implementar máquinas de vetor de suporte em sua negociação. De forma semelhante ao exemplo de Schnick, é importante escolher uma entrada que seria esperada para ter semelhanças entre as incidências de diferença. Por exemplo, você pode ser tentado a usar uma média móvel como uma entrada, no entanto, uma vez que o preço médio a longo prazo tende a mudar de forma bastante dramática ao longo do tempo, uma média móvel em isolamento pode não ser a melhor entrada para usar. Isso ocorre porque não haverá semelhança significativa entre o valor médio móvel hoje e os valores médios móveis há seis meses. Suponha que estamos negociando EURUSD e usando uma máquina de vetor de suporte com uma entrada média móvel para comprar compra de sinal. Digamos que o preço atual é 1,10, no entanto, está gerando dados de treinamento de seis meses atrás, quando o preço foi de 0,55. Ao treinar a máquina de vetores de suporte, o padrão que ele encontra só pode levar a que um comércio seja sinalizado quando o preço é de cerca de 0,55, uma vez que este é o único dado que conhece. Portanto, sua máquina de vetor de suporte pode nunca sinalizar um comércio até que o preço caia de volta para 0,55. Em vez disso, uma melhor entrada a ser usada para a máquina vetorial de suporte pode ser um MACD ou um oscilador similar porque o valor do MACD é independente do nível de preço médio e apenas sinais de movimento relativo. Eu recomendo que você experimente com isso para ver o que produz os melhores resultados para você. Outra consideração a ser feita ao escolher entradas é garantir que a máquina de vetores de suporte tenha um instantâneo adequado de um indicador para sinalizar um novo comércio. Você pode achar em sua própria experiência comercial que um MACD só é útil quando você tem as últimas cinco barras para ver, pois isso irá mostrar uma tendência. Uma única barra do MACD pode ser inútil isoladamente, a menos que você possa saber se está indo para cima ou para baixo. Portanto, pode ser necessário passar as últimas barras do indicador MACD para a máquina vetorial de suporte. Existem duas maneiras possíveis de fazer isso: você pode criar um novo indicador personalizado que use as últimas cinco barras do indicador MACD para Calcule uma tendência como um valor único. Este indicador personalizado pode então ser passado para a máquina vetorial de suporte como uma única entrada, ou Você pode usar as cinco barras anteriores do indicador MACD na máquina vetorial de suporte como cinco entradas separadas. A maneira de fazer isso é inicializar cinco instâncias diferentes do indicador MACD. Cada um dos indicadores pode ser inicializado com um deslocamento diferente da barra atual. Em seguida, as cinco alças dos indicadores separados podem ser passadas para a máquina vetorial de suporte. Note-se que a opção 2 tenderá a causar tempos de execução mais longos para o seu Consultor Especialista. Quanto mais insumos você tiver, maior será o tempo necessário para treinar com êxito. Implementando máquinas de vetor de suporte e consultor especial Eu preparei um consultor especialista que é um exemplo de como alguém poderia usar máquinas de vetor de suporte em suas próprias negociações (uma cópia disso pode ser baixada seguindo este link mql5encode1229). Espero que o Consultor Especialista permita que você experimente um pouco com máquinas de vetor de suporte. Eu recomendo que você copie o nome do consultor especialista para se adequar ao seu próprio estilo de negociação. A EA funciona da seguinte forma: Duas novas máquinas de vetor de suporte são criadas usando a biblioteca svMachineTool. Um é configurado para assinalar novos negócios de compra e o outro está configurado para assinalar novos negócios de venda. Sete indicadores padrão são inicializados com cada um de seus identificadores armazenados em uma matriz inteira (Nota: qualquer combinação de indicadores pode ser usada como entradas, eles só precisam ser passados ​​para o SVM em uma única matriz de inteiros). A matriz de alças de indicadores é passada para as novas máquinas de vetor de suporte. Usando a matriz de alças de indicadores e outros parâmetros, os dados de preços históricos são usados ​​para gerar entradas e saídas precisas a serem usadas para treinar as máquinas de vetor de suporte. Uma vez que todas as entradas e saídas foram geradas, ambas as máquinas de vetores de suporte são treinadas. As máquinas de vetores de suporte treinados são usadas na EA para sinalizar novos negócios de compra e venda. Quando um novo comércio de compra ou venda é sinalizado, o comércio abre junto com as ordens manuais Stop Loss e Take Profit. A inicialização e treinamento da máquina vetorial de suporte são executados dentro da função onInit (). Para sua referência, este segmento do svTrader EA foi incluído abaixo com notas. Advanced Support Vector Machine Trading O recurso adicional foi incorporado na ferramenta de ferramentas de suporte de máquinas vetoriais para os usuários mais avançados lá fora. A ferramenta permite que os usuários passem seus próprios dados de entrada e dados de saída personalizados (como no exemplo de Schnick). Isso permite que você crie seus próprios critérios para obter entradas e saídas de máquinas vetoriais de suporte, e passar manualmente nesses dados para treiná-lo. Isso abre a oportunidade de usar máquinas de vetor de suporte em qualquer aspecto da sua negociação. Não é possível usar máquinas de vetor de suporte para sinalizar novos negócios, mas também pode ser usado para sinalizar o fechamento de negócios, gerenciamento de dinheiro, novos indicadores avançados etc. No entanto, para garantir que você não receba erros, é importante entender como Esses insumos e saídas devem ser estruturados. Entradas: as entradas são passadas para SVM como uma matriz de dois valores de dimensão 1. Observe que qualquer entrada que você crie deve ser passada como um valor duplo. Booleano, inteiro, etc. devem ser convertidos em um valor duplo antes de serem passados ​​para a máquina vetorial de suporte. As entradas são necessárias no formulário a seguir. Por exemplo, suponha que estamos passando em entradas com 3 entradas x 5 pontos de treinamento. Para conseguir isso, nossa matriz dupla deve ter 15 unidades de comprimento no formato: A 1 B 1 C 1 A 2 B 2 C 2 A 3 B 3 C 3 A 4 B 4 C 4 A 5 B 5 C 5 Também é necessário Para passar um valor para o número de entradas. No caso, NInputs3. Saídas: as saídas são transmitidas como uma matriz de valores booleanos. Esses valores booleanos são a saída desejada do SVM correspondente a cada um dos conjuntos de entradas passadas. Seguindo o exemplo acima, digamos que temos 5 pontos de treinamento. Neste cenário, passaremos em uma matriz booleana de valores de saída com 5 unidades de comprimento. Ao gerar suas próprias entradas e saídas, certifique-se de que o comprimento de suas matrizes corresponda aos valores que você passa. Se eles não combinarem, será gerado um erro informando sobre a discrepância. Por exemplo, se nós passamos em NInputs3, e as entradas são uma matriz de comprimento 16, um erro será lançado (uma vez que, um valor de Ninputs de 3 significará que o comprimento de qualquer matriz de entrada precisará ser um múltiplo de 3) . Da mesma forma, assegure-se de que o número de conjuntos de entradas e o número de saídas que você passa são iguais. Novamente, se você tiver NInputs3, comprimento de entradas de 15 e um comprimento de saídas de 6, outro erro será lançado (como você tem 5 conjuntos de entradas e 6 saídas). Tente garantir que você tenha variação suficiente em suas saídas de treino. Por exemplo, se você passar em 100 pontos de treinamento, o que significa uma matriz de saída de comprimento 100 e todos os valores são falsos com apenas um verdadeiro, então a diferenciação entre o caso verdadeiro eo caso falso não é suficiente. Isso tenderá a levar ao treinamento SVM muito rápido, mas a solução final é muito pobre. Um conjunto de treinamento mais diverso, muitas vezes, levará a um SVM mais afetivo. Trading com Máquinas de Vector de Suporte (SVM) Finalmente, todas as estrelas se alinharam e posso dedicar 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, I never meant the code to be used directly (until now I was providing only snippets), but I am surprised that R on Windows is so ugly. Not sure what8217s your goal, but to analyze the strategies performance, you can use the indicator series which are already computed. It8217s just pure academic interest on SVM. I used to work with clusters, PCA and I am curious how SVM is doing the same work. In windows a lot of error are related to objects with dates as xts is or data frames. UNIX is better but all brokers give API for windows. Some of them in Java and only this we may use from UNIX. I don8217t like win architecture but it8217s a habit already and I don8217t have time to change OS. I just tried it on windows 7, 64 bit, R version 2.15.2. I get a warning from svmFeatures, which I know how to fix (calling sd on an xtszoo object does interesting conversion to a matrix), but no problems. Running: Thanks I8217ll try. One question if you don8217t mind Why are you using get with function cetSymbols from quantmod package I use call vers Example SPY lt - getSymbols(039SPY039, auto. assign FALSE) You have a lot to compute and get consume memory and takes time to obtain objects name as a string var The same error I8217m using R 2.15.1 But I8217m surprised with this result before call gt head(data) 1 function (8230, list character(), package 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) It seems that data is reserved word And now I don039t know what is going to features functionA Single SVM Trading Strategy Support Vector Machines (SVM) are gaining popularity in machine learning trading systems. They have advantages Neural Networks (NN) as they are guaranteed to find the optimal solution. NN can get caught in a local minima, so while you get a result using NN you can never be sure it is optimal. Also if NN are started with random weights you8217ll probably get a different set of weights each time you run backpropagation on the same set of data. SVMs do have their drawbacks too. Specifically the selection of the 8216hyper8217 parameters. These are the penalty (C), gaussian width (g) if using an RBF kernel and epsilon insensitivity (e) if using Support Vector Regression (SVR). My use of SVMs so far has been to use them in classification so I only need to select the C and g parameters 8211 I use the standard RBF kernel. It8217s hard enough trying to predict if the market will go up or down, let alone by how much. We can select these parameters using a grid search . This means that we simply try each combination of parameters and see which worked best. The way the parameters are assessed is through n-fold cross-validation. Cross Validation This is best explained with an example. If we have 1000 labelled training instances and we use 10 fold cross-validation, then for each combination of C, g we do the following: Randomly take out 10 of the samples. This is our hold-out set of 100 training instances. Train the SVM on the remaining 90 and create a model. Use the model to test the accuracyon the hold-out set. Repeat the exercise 10 times and take the average accuracy. The above is 10-fold cross validation. We could take this to the logical conclusion and only have a single instance in out hold-out 8216set8217. This is leave-one-out cross validation. It would give us the most accurate assessment of the parameter combination but in practice 10-fold or even 5-fold is good enough. So how do we actually do a cross-validation The libSVM package at csie. ntu. edu. tw cjlinlibsvm contains some Python scripts in the tools directory. You8217ll need to install Python and Gnuplot . You can also use DeepThought available from deep-thought. co. In the examples below I8217ll use DeepThought. The first thing we need is some data. I8217ll use a training set with the following features Hour of Day Average close price difference between the previous 30 bars Moving average differences between the previous 1,2,3,4,5,7,9,13,16,20,25,31,45,55,70,100 bars with MA periods of 5, 10, 20, 50 and 100 The target is -1 for the price will go down at the close of the next bar, 1 for the price will go up at the close of the next bar. Once I8217ve set these in the configuration, I run the command to extract the training set. I8217ve also use min-max scaling. I8217ll discuss feature preparation and scaling in another article. The command above will create training files from all models defined in the DeepThought configuration. After the command has completed a file h4-features. training. data is created the the same directory that I ran the command from. This is in libSVM format so we can use the libSVM tools to run the grid search, or use grid search built into DeepThought. Also created is the file h4-features. training. data. csv which contains the same data but in CSV format so you can play with it in other tools such as R, Python, Excel etc. To run the grid search in DeepThought I use the command: The results are in the logfile where Result: is the percentage accuracy: The (uninteresting) results in the middle have been removed for brevity. We can see that the SVM seems to favour smaller gammas and the C looks to be a sensible value. We should be concerned if the best gamma was large and the C small as it probably means some sort of data error. The next highest values are roughly the same range as the best parameters which indicates that the parameter selection is relatively insensitive. We should be concerned if the values giving the best result were outliers. Backtesting the Single SVM Strategy The final step is to assess how a single SVM performs in a backtest. In this backtest we simply buy with a 1 forecast and sell with a -1 forecast. If we are long and we get a buy signal we add another position to a maximum position size of 10. Conversely for sell signals. Using the best C of 128 and gamma of 0.00195313 we can cut and past the following XML snippet from the grid search log file into the DeepThought configuration file: The backtest is run with the following command: The DeepThought backtest operates by creating a training set at the close of each bar, the EURUSD H4 in this case. When the close of the next bar is reached a forecast is made and trades entered andor closed, then the model is retrained again ready for the next bar. Thus it is continuously adapting to the latest conditions and all tests are out-of-sample, avoiding over-fitting. The results of the backtest were: and a plot of the PnL (plotted using R): It sort of looks ok, but probably not something we8217d trade as is. The next article will discuss ensembles to see if we can improve this result.

No comments:

Post a Comment