Sunday 8 April 2018

Máquina de vetores de suporte forex


Aprendizado de máquina: como as máquinas de vetor de suporte podem ser usadas na negociação.


O que é uma máquina de vetores de suporte?


Uma máquina de vetores de suporte é um método de aprendizado de máquina que tenta obter dados de entrada e classificar em uma das duas categorias. Para que uma máquina de vetores de suporte seja eficaz, é necessário primeiro usar um conjunto de dados de entrada e saída de treinamento para construir o modelo de máquina de vetores de suporte que pode ser usado para classificar novos dados.


Uma máquina de vetores de suporte desenvolve esse modelo pegando as entradas de treinamento, mapeando-as em um espaço multidimensional e usando a regressão para encontrar um hiperplano (um hiperplano é uma superfície no espaço n-dimensional que separa o espaço em dois meio espaços) que separa melhor as duas classes de entradas. Uma vez que a máquina de vetores de suporte tenha sido treinada, ela é capaz de avaliar novas entradas em relação ao hiperplano de separação e classificá-lo em uma das duas categorias.


Uma máquina de vetores de suporte é essencialmente uma máquina de entrada / saída. Um usuário pode inserir uma entrada e, com base no modelo desenvolvido por meio de treinamento, retornará uma saída. O número de entradas para qualquer dada máquina de vetores de suporte teoricamente varia de um a infinito, no entanto, em termos práticos, a capacidade de computação limita o número de entradas que podem ser usadas. Se, por exemplo, N entradas forem usadas para uma determinada máquina de vetores de suporte (o valor inteiro de N pode variar de um a infinito), a máquina de vetores de suporte deve mapear cada conjunto de entradas no espaço N-dimensional e encontrar um (N-1 hiper-plano que melhor separa os dados de treinamento.


Figura 1. Support Vector Machines são máquinas de entrada / saída.


A melhor maneira de conceituar como uma máquina de vetores de suporte funciona é considerando o caso bidimensional. Suponha que queremos criar uma máquina de vetores de suporte que tenha duas entradas e retorne uma única saída que classifique o ponto de dados como pertencente a uma das duas categorias. Podemos visualizá-lo plotando-o em um gráfico bidimensional, como o gráfico abaixo.


Figura 2. Esquerda: Entradas da máquina de vetor de suporte 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: Entradas da máquina de vetor de suporte 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 de separação.


Neste exemplo, os cruzamentos azuis indicam pontos de dados que pertencem à categoria 1 e os círculos vermelhos que representam pontos de dados que pertencem à categoria 2. Cada um dos pontos de dados individuais possui um valor de entrada único 1 (representado por sua posição no eixo x ) e um valor único de entrada 2 (representado por sua posição no eixo y) e todos esses pontos foram mapeados para o espaço bidimensional.


Uma máquina de vetores de suporte é capaz de classificar dados criando um modelo desses pontos no espaço bidimensional. A máquina de vetores de suporte observa os dados no espaço bidimensional e usa um algoritmo de regressão para encontrar um hiperplano de 1 dimensão (também conhecido como linha) que separa com mais precisão os dados em suas duas categorias. Essa linha de separação é então usada pela máquina de vetores de suporte para classificar novos pontos de dados na categoria 1 ou na categoria 2.


A animação abaixo ilustra o processo de treinamento de uma nova máquina de vetores de suporte. O algoritmo começará fazendo uma tentativa aleatória de encontrar um hiperplano de separação e, em seguida, melhorará iterativamente a precisão do hiperplano. Como você pode ver, o algoritmo começa de forma bastante agressiva, mas depois diminui à medida que começa a se aproximar da solução de desejos.


Figura 4. Uma animação mostrando um treinamento de máquina de vetores de suporte. O hiperplano converge progressivamente na geometria ideal para separar as duas classes de dados.


O cenário bidimensional apresentado acima nos permite visualizar o processo de uma máquina de vetores de suporte, porém só é capaz de classificar um ponto de dados usando duas entradas. E se quisermos usar mais entradas? Felizmente, o algoritmo de máquina de vetores de suporte nos permite fazer o mesmo em dimensões mais altas, embora se torne muito mais difícil de conceituar.


Considere isso, você deseja criar uma máquina de vetores de suporte que consuma 20 entradas e possa classificar qualquer ponto de dados usando essas entradas na categoria 1 ou na categoria 2. Para fazer isso, a máquina de vetores de suporte precisa modelar os dados no espaço de 20 dimensões e use um algoritmo de regressão para encontrar um hiperplano de 19 dimensões que separa os pontos de dados em duas categorias. Isso fica extremamente difícil de visualizar, pois é difícil para nós compreendermos qualquer coisa acima de 3 dimensões, no entanto, tudo o que você precisa saber é que funciona exatamente da mesma maneira que para o caso bidimensional.


Como funcionam as máquinas de vetor de suporte? Exemplo: É um Schnick?


Imagine este cenário hipotético, você é um pesquisador que está investigando um animal raro encontrado apenas nas profundezas do Ártico chamado Shnicks. Dado o afastamento destes animais, apenas um pequeno punhado 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 por um punhado de pesquisadores que viram um. Nestes trabalhos, os autores descrevem certas características sobre os Schnicks que encontraram, ou seja, altura, peso, número de pernas, etc. Mas todas essas características variam entre os trabalhos de pesquisa sem padrão discernível.


Como podemos usar esses dados para identificar um novo animal como um schnick?


Uma possível solução para nosso problema é usar uma máquina de vetores de suporte para identificar os padrões nos dados e criar uma estrutura que possa ser usada para classificar os animais como schnick ou não schnick. O primeiro passo é criar um conjunto de dados que possam ser usados ​​para treinar sua máquina de vetores de suporte para identificar schnicks. Os dados de treinamento são um conjunto de entradas e saídas correspondentes para a máquina de vetores de suporte para analisar e extrair um padrão.


Portanto, devemos decidir quais entradas serão usadas e quantas serão usadas. Teoricamente, podemos ter quantas entradas quisermos, mas isso pode levar a lentidão no treinamento (quanto mais entradas você tiver, mais tempo levará a máquina de vetores de suporte para extrair padrões). Além disso, você deseja escolher valores de entrada que tenderão a ser relativamente consistentes em todos os schnicks. Por exemplo, altura ou peso do animal seria um bom exemplo de uma entrada porque você esperaria que isso fosse relativamente consistente em todos os schnicks. No entanto, a idade média de um animal seria uma má escolha de insumo, porque você esperaria que a idade dos animais identificados variaria consideravelmente.


Por esse motivo, as seguintes entradas foram escolhidas:


Altura Peso O número de pernas O número de olhos O ​​comprimento dos braços do animal A velocidade média dos animais A freqüência dos animais que se acasalam chamam.


Com as entradas escolhidas, podemos começar a compilar nossos dados de treinamento. Dados de treinamento efetivos para uma máquina de vetores 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 documentos de pesquisa do cientista que identificaram com sucesso um schnick e listaram suas propriedades. Portanto, podemos ler esses documentos de pesquisa e extrair os dados em cada uma das entradas e alocar uma saída de verdadeiro ou falso para cada um dos exemplos. Os dados de treinamento, neste caso, podem ser semelhantes à tabela abaixo.


Tabela 1. Tabela de exemplo de observações schnick.


Depois de reunir os dados para todas as 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 vetores de suporte criará um modelo no espaço de sete dimensões que pode ser usado para classificar cada um dos exemplos de treinamento em verdadeiro ou falso. A máquina de vetores de suporte continuará a fazer isso até que tenha um modelo que represente com precisão os dados de treinamento (dentro da tolerância de erro especificada). Quando o treinamento estiver concluído, esse modelo poderá ser usado para classificar novos pontos de dados como verdadeiros ou falsos.


A máquina de vetores de suporte funciona realmente?


Usando o cenário Schnick, escrevi um script que testa como uma máquina de vetores de suporte pode realmente identificar novos schnicks. Para fazer isso, usei a biblioteca de função “Ferramenta de Aprendizado de Máquina de Vetor de Suporte” que pode ser baixada do Market.


Para modelar esse cenário efetivamente, 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 máquinas de vetores de suporte. O primeiro passo é criar uma função que seja capaz de obter as sete entradas para qualquer animal 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 de vetores 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 as entradas e saídas de treinamento. Entradas neste caso serão geradas através da criação de números aleatórios dentro de um intervalo definido para cada um dos sete valores de entrada. Então, 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 vetores de suporte usando a 'Ferramenta de Aprendizagem de Máquina de Vetor de Suporte' disponível no Market. Uma vez criada uma nova máquina de vetores de suporte, é necessário passar as entradas e saídas de treinamento para ela e executar o treinamento.


Agora temos uma máquina de vetores 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 ela 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 vetores 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 vetores de suporte se comporta sob diferentes condições.


Por que a máquina de vetores de suporte é tão útil?


O benefício de usar uma máquina de vetores de suporte para extrair um padrão complexo dos dados é que não é necessário um entendimento prévio do comportamento dos dados. Uma máquina de vetores de suporte é capaz de analisar os dados e extrair seus únicos conhecimentos e relacionamentos. Desta forma, funciona como uma caixa preta recebendo entradas e gerando uma saída que pode ser muito útil para encontrar padrões nos dados que são muito complexos e não óbvios.


Uma das melhores características das máquinas de vetores de suporte é que elas são capazes de lidar com erros e ruído nos dados muito bem. Eles geralmente conseguem ver o padrão subjacente dentro dos dados e filtram outliers de dados e outras complexidades. Considere o seguinte cenário, ao realizar sua pesquisa sobre Schnicks, você se depara com vários trabalhos de pesquisa que descrevem Schnicks com características massivamente diferentes (como um schnick de 200kg e 15000mm de altura).


Erros como esse podem levar a distorções em seu modelo do que é um Schnick, o que poderia fazer com que você cometa um erro ao classificar novas descobertas de Schnick. O benefício da máquina de vetores de suporte é que ela desenvolverá um modelo que esteja de acordo com o padrão subjacente, oposto a um modelo que se encaixa em todos os pontos de dados de treinamento. Isso é feito permitindo-se um certo nível de erro no modelo para permitir que a máquina de vetores de suporte ignore qualquer erro nos dados.


No caso da máquina de vetores de suporte Schnick, se permitirmos uma tolerância de erro de 5%, o treinamento tentará apenas desenvolver um modelo que corresponda a 95% dos dados de treinamento. Isso pode ser útil porque permite que o treinamento ignore a pequena porcentagem de outliers.


Podemos investigar ainda mais essa propriedade da máquina de vetores de suporte 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 por variáveis ​​aleatórias.


Essa função nos permite introduzir erros deliberados em nossos dados de treinamento. Usando esses dados preenchidos com erros, podemos criar e treinar 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 registro de especialistas. Dentro de um conjunto de dados de treinamento com 5000 pontos de treinamento, conseguimos introduzir 500 erros aleatórios. Ao comparar o desempenho dessa máquina de vetores de suporte preenchida por erros com a original, o desempenho é reduzido apenas em & lt; 1%. Isso ocorre porque a máquina de vetores de suporte é capaz de ignorar os valores discrepantes no conjunto de dados durante o treinamento e ainda é capaz de produzir um modelo impressionantemente preciso dos dados verdadeiros. Isso sugere que as máquinas de vetores de suporte podem ser uma ferramenta mais útil na extração de padrões complexos e insights de conjuntos de dados ruidosos.


Figura 5. O log do especialista resultante após a execução do script "Schnick" no MetaTrader 5.


Uma versão completa do código acima pode ser baixada do Code Base, entretanto este script só pode ser executado no seu terminal se você comprou uma versão completa da ferramenta Support Vector Machine Learning do Market. Se você tiver apenas uma versão de demonstração desta 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 demo 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 do código podem ser baixadas seguindo os links abaixo:


Versão Completa - Usando um Script que é implementado no terminal MetaTrader 5 (requer uma versão comprada da Ferramenta de Aprendizagem de Máquina de Vetor de Suporte)


Versão de Demonstração - Usando um Expert Advisor que é implementado no testador de estratégia do MetaTrader 5 (requer apenas uma versão demo da Ferramenta de Aprendizado de Máquina de Vetor de Suporte)


Como as máquinas de vetores de suporte podem ser usadas no mercado?


É certo que o exemplo de Schnick discutido acima é bastante simples, no entanto, existem algumas semelhanças que podem ser traçadas entre este exemplo e usando as máquinas de vetores de suporte para análise técnica de mercado.


A análise técnica é fundamentalmente sobre o uso de dados históricos de mercado para prever movimentos futuros de preços. Da mesma forma, dentro do exemplo do schnick, estávamos usando as observações feitas por cientistas do passado para prever se um novo animal é um schnick ou não. Além disso, o mercado está repleto de ruído, erros e erros estatísticos que tornam o uso de uma máquina de vetores de suporte um conceito interessante.


A base para um número significativo de abordagens de negociação de análise técnica envolve as seguintes etapas:


Monitorando vários indicadores Identificando quais condições para cada indicador se correlacionam com um comércio potencialmente bem-sucedido Observe cada um dos indicadores e avalie quando todos (ou a maioria) estão sinalizando uma negociação.


É possível adotar uma abordagem semelhante para usar máquinas de vetores de suporte para sinalizar novos negócios de maneira semelhante. A ferramenta de aprendizado de máquina de vetor de suporte foi desenvolvida com isso em mente. Uma descrição completa de como usar essa ferramenta pode ser encontrada no Market, então só vou dar uma visão geral. O processo para usar essa ferramenta é o seguinte:


Figura 6. O diagrama de blocos mostrando o processo para implementar a ferramenta de máquina de vetores de suporte em um Expert Advisor.


Antes de poder usar a Ferramenta de Aprendizado de Máquina de Vetor de Suporte, é importante primeiro entender como as entradas e saídas de treinamento são geradas.


Como as Entradas de Treinamento são Geradas?


Portanto, os indicadores que você deseja usar como entradas já foram inicializados, bem como sua nova máquina de vetores de suporte. A próxima etapa é passar as alças do indicador para sua nova máquina de vetores de suporte e instruí-la 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 para a máquina de vetores de suporte. Isso é feito passando um array inteiro contendo as alças. As outras duas entradas para essa função são o valor de deslocamento e o número de pontos de dados.


O valor de deslocamento denota o deslocamento entre a barra atual e a barra inicial 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 vetores de suporte para usar somente 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 N de 8 dirão à máquina de vetores de suporte para usar somente as barras capturadas no quadrado azul para gerar entradas e saídas de treinamento.


Uma vez que a função setIndicatorHandles () tenha sido chamada, é possível chamar a função genInputs (). Essa função usará as alças do indicador para passar para gerar uma matriz de dados de entrada a serem usados ​​para treinamento.


Figura 7. Gráfico de velas que ilustra os valores de Offset e N.


Como as saídas de treinamento são geradas?


As saídas de treinamento são geradas pela simulação de negociações hipotéticas com base em dados históricos de preços e na determinação de se essa negociação teria sido bem-sucedida ou malsucedida. 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 malsucedido.


A primeira variável é OP_TRADE. O valor disso pode ser COMPRA ou VENDA e corresponderá a negociações hipotéticas de compra ou venda. Se o valor deste for BUY, então, ao gerar os outputs, ele irá apenas olhar para o sucesso potencial de negociações de compra hipotéticas. Alternativamente, se o valor disso for VENDER, então, ao gerar as saídas, ele apenas examinará o sucesso potencial de negociações de venda hipotéticas.


Os próximos valores usados ​​são 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 da negociação. Essa variável é medida em horas e garantirá que somente negociações concluídas dentro dessa duração máxima serão consideradas bem-sucedidas. A razão para incluir esta variável é evitar as transações de sinalização de máquinas de vetor de suporte em um mercado lateral lento.


Considerações a serem feitas ao escolher entradas.


É importante colocar algum pensamento na seleção de entrada ao implementar máquinas de vetores de suporte em sua negociação. Similar ao exemplo de Schnick, é importante escolher uma entrada que seria esperada ter similar entre incidências de diferença. Por exemplo, você pode se sentir tentado a usar uma média móvel como entrada, mas como o preço médio de longo prazo tende a mudar drasticamente com o tempo, uma média móvel isolada 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 de seis meses atrás.


Suponha que estamos negociando EURUSD e usando uma máquina de vetores de suporte com uma entrada de média móvel para sinalizar negociações de 'compra'. Digamos que o preço atual é de 1,10, no entanto, está gerando dados de treinamento de seis meses atrás, quando o preço era 0,55. Ao treinar a máquina de vetores de suporte, o padrão encontrado pode levar apenas a uma negociação sendo sinalizada quando o preço estiver em torno de 0,55, já que esses são os únicos dados que ele conhece. Portanto, sua máquina de vetores de suporte nunca pode sinalizar uma negociação até que o preço caia para 0.55.


Em vez disso, uma entrada melhor para usar na máquina de vetores de suporte pode ser um MACD ou um oscilador semelhante, porque o valor do MACD é independente do nível médio de preço e apenas sinaliza o movimento relativo. Eu recomendo que você experimente 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 descobrir em sua própria experiência de negociação que um MACD só é útil quando você tem as cinco últimas barras para olhar, pois isso mostrará uma tendência. Uma única barra do MACD pode ser inútil em isolamento, a menos que você possa dizer se está indo para cima ou para baixo. Portanto, pode ser necessário passar as últimas barras do indicador MACD para a máquina de vetores de suporte. Há duas maneiras possíveis de fazer isso:


Você pode criar um novo indicador personalizado que use as cinco barras anteriores do indicador MACD para calcular uma tendência como um único valor. Esse indicador personalizado pode ser transmitido para a máquina de vetores de suporte como uma única entrada ou.


Você pode usar as cinco barras anteriores do indicador MACD na máquina de vetores 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 de vetores de suporte. Deve-se notar que a opção 2 tenderá a causar tempos de execução mais longos para o seu Expert Advisor. Quanto mais entradas você tiver, mais tempo levará para treinar com sucesso.


Implementando Support Vector Machines e Expert Advisor.


Eu preparei um Expert Advisor que é um exemplo de como alguém poderia potencialmente usar máquinas de vetores de suporte em sua própria negociação (uma cópia deste pode ser baixada seguindo este link mql5 / en / code / 1229). Espero que o Expert Advisor permita que você experimente um pouco com as máquinas de vetores de suporte. Eu recomendo que você copie / altere / modifique o Expert Advisor para se adequar ao seu próprio estilo de negociação. O EA funciona da seguinte maneira:


Duas novas máquinas de vetores de suporte são criadas usando a biblioteca svMachineTool. Uma é configurada para sinalizar novas negociações 'Comprar' e a outra é configurada para sinalizar novas negociações 'Venda'.


Sete indicadores padrão são inicializados com cada uma de suas alças armazenadas em uma matriz de inteiros (Nota: qualquer combinação de indicadores pode ser usada como entradas, elas precisam ser passadas para o SVM em uma matriz de inteiros inteiros).


A matriz de identificadores de indicador é passada para as novas máquinas de vetores de suporte.


Utilizando o conjunto 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 no treinamento das máquinas de vetores de suporte.


Uma vez que todas as entradas e saídas tenham sido geradas, ambas as máquinas de vetores de suporte são treinadas.


As máquinas de vetores de suporte treinadas são usadas no EA para sinalizar novas negociações de 'compra' e 'venda'. Quando uma nova transação de 'compra' ou 'venda' é sinalizada, a negociação é aberta juntamente com ordens manuais de Stop Loss e Take Profit.


A inicialização e o treinamento da máquina de vetores de suporte são executados dentro da função onInit (). Para sua referência, este segmento do EA do svTrader foi incluído abaixo com notas.


Suporte Avançado Negociação de Máquina de Vetor.


Capacidade adicional foi construída na ferramenta de aprendizado de máquina de vetor de suporte para os usuários mais avançados. A ferramenta permite que os usuários passem seus próprios dados de entrada e dados de saída personalizados (como no exemplo da Schnick). Isso permite que você projete seus próprios critérios personalizados para as entradas e saídas da máquina de vetores de suporte e passe manualmente esses dados para treiná-los. Isso abre a oportunidade de usar máquinas de vetores de suporte em qualquer aspecto de sua negociação.


Não é apenas possível usar máquinas de vetores de suporte para sinalizar novos negócios, mas também pode ser usado para sinalizar o fechamento de negociações, gerenciamento de dinheiro, novos indicadores avançados etc. No entanto, para garantir que você não receba erros, é importante entender como essas entradas e saídas devem ser estruturadas.


Entradas: As entradas são passadas para o SVM como uma matriz unidimensional de valores duplos. Por favor, note que qualquer entrada que você criar deve ser passada como um valor duplo. Boolean, integer, etc. devem ser todos convertidos em um valor duplo antes de serem passados ​​para a máquina de vetores de suporte. As entradas são necessárias no seguinte formato. Por exemplo, suponha que estamos passando 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 passar um valor para o número de entradas. No caso, N_Inputs = 3.


Saídas: as saídas são passadas 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 passados. Seguindo o exemplo acima, digamos que temos 5 pontos de treinamento. Nesse 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 seus arrays corresponda aos valores que você passar. Se eles não corresponderem, será gerado um erro para notificá-lo da discrepância. Por exemplo, se tivermos passado em N_Inputs = 3 e as entradas forem uma matriz de tamanho 16, será gerado um erro (uma vez que, um valor de N_inputs de 3 significará que o comprimento de qualquer array de entrada precisará ser um múltiplo de 3). Da mesma forma, certifique-se de que o número de conjuntos de entradas e o número de saídas transmitidas sejam iguais. Novamente, se você tiver N_Inputs = 3, 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 treinamento. Por exemplo, se você passar 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, a diferenciação entre o caso verdadeiro e o caso falso não é suficiente. Isso tenderá a levar o treinamento SVM muito rápido, mas a solução final é muito ruim. Um conjunto de treinamento mais diversificado freqüentemente levará a um SVM mais afetivo.


Indicador de Máquina de Vetor de Suporte - indicador para MetaTrader 5.


O processo adotado por este indicador é o seguinte:


Selecione quais indicadores devem ser usados ​​como entradas para a máquina de vetores de suporte. Coletar dados históricos de indicadores e preços para o símbolo atual. Use esses dados históricos para determinar quais operações seriam bem-sucedidas se tivessem sido tomadas. Alimente esses dados para a máquina de vetores de suporte e use-a para treinamento. Use a máquina de vetores de suporte treinada para sinalizar futuros negócios.


Esse indicador usa a Biblioteca de Aprendizado de Máquina de Vetor de Suporte disponível no mercado de metadados para obter a funcionalidade de máquina de vetor de suporte.


Quando o indicador personalizado é anexado primeiro ao gráfico, ele preenche o gráfico com negociações históricas de compra / venda que seriam bem-sucedidas. São esses pontos de dados que são usados ​​para treinar a máquina de vetores de suporte e, em seguida, em qualquer barra, o indicador usa o modelo produzido pela máquina de vetores de suporte treinada para prever quaisquer negociações futuras.


Este é um indicador simples usado para demonstrar como as máquinas de vetores de suporte podem auxiliar na sinalização de negociações. Eu recomendo que você otimize as entradas usadas para a máquina de vetores de suporte para maximizar seus resultados. Alguns exemplos de componentes que você pode modificar são:


Negociação Cambial com Máquinas de Vetores de Suporte.


Christian Ullrich Detlef Seese Stephan Chalup.


Este artigo analisa e examina a capacidade geral dos modelos SVM (Support Vector Machine) de prever e comercializar corretamente as direções diárias da taxa de câmbio do EUR. Sete modelos com várias funções do kernel são considerados. Cada modelo SVM é comparado com as técnicas tradicionais de previsão, a fim de verificar seu valor potencial como previsão fora da amostra e ferramenta de negociação quantitativa. Verifica-se que as SVMs hiperbólicas têm um bom desempenho em termos de precisão de previsão e resultados de negociação por meio de uma estratégia simulada. Isso apoia a ideia de que as SVMs são sistemas de aprendizado promissores para lidar com tarefas de classificação não linear no campo de aplicações de séries temporais financeiras.


Visualizar.


Referências.


Informações sobre direitos autorais.


Autores e Afiliações.


Christian Ullrich 1 Detlef Seese 1 Stephan Chalup 2 1. AIFB Universidade de Karlsruhe Karlsruhe Alemanha 2. Escola de Engenharia Elétrica & amp; Universidade da Ciência da Computação de Newcastle Callaghan Australia.


Sobre este papel.


Recomendações personalizadas.


Cite o papel.


Gerente de referência de papéis. RIS RefWorks Zotero.


.BIB BibTeX JabRef Mendeley.


Download instantâneo Legível em todos os dispositivos Possui-o para sempre Imposto sobre vendas local incluído, se aplicável.


Cite o papel.


Gerente de referência de papéis. RIS RefWorks Zotero.


.BIB BibTeX JabRef Mendeley.


Mais de 10 milhões de documentos científicos ao seu alcance.


Switch Edition.


&cópia de; 2017 Springer International Publishing AG. Parte da natureza de Springer.


Negociação com Support Vector Machines (SVM)


Finalmente todas as estrelas se alinharam e eu posso dedicar algum tempo para o backtesting de novos sistemas de negociação, e o Support Vector Machines (SVM) é o novo “brinquedo” que vai me manter ocupado por um tempo.


As SVMs são uma ferramenta bem conhecida da área de Aprendizado de Máquina supervisionado e são usadas para classificação e regressão. Para mais detalhes, consulte a literatura.


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


Seguindo nossa experiência com modelos ARMA + GARCH, começaremos tentando prever retornos, em vez de preços. Da mesma forma, em nossos primeiros testes, usaremos apenas os retornos dos cinco dias anteriores como os recursos que determinam o retorno de um determinado dia. Vamos começar com a 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 amostras M. Nós também temos respostas M.


Dada uma linha de valores de recurso, a matriz da esquerda, o SVM é treinado para produzir o valor de resposta. Em nosso exemplo específico, temos cinco colunas (recursos), cada coluna correspondendo aos retornos com um atraso diferente (de 1 a 5). Nós 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, que é o retorno previsto. Por exemplo, após treinar o SVM nos 500 dias anteriores, usaremos os retornos para os dias 500, 499, 498, 497 e 496 (estes são os nossos como entrada para obter o retorno previsto para o dia 501.


De todos os pacotes disponíveis em R, decidi escolher o pacote e1071. Uma segunda escolha próxima foi o pacote kernlab, que ainda estou planejando experimentar no futuro.


Então eu tentei algumas estratégias. Primeiro, tentei algo muito semelhante à abordagem ARMA + GARCH - os retornos defasados ​​dos cinco dias anteriores. I was quite surprised to see this strategy performing better than the ARMA+GARCH (this is the home land of the ARMA+GARCH and I would have been quite happy just with comparable performance)!


Next, I tried to the same five features, but trying to select the best subset. The selection was done using a greedy approach, starting with 0 features, and interactively adding the feature which minimizes the error best. This approach improved things further.


Finally, I tried a different approach with about a dozen features. The features included returns over different period of time (1-day, 2-day, 5-day, etc), some statistics (mean, median, sd, etc) and volume. I used the same greedy approach to select features. This final system showed a very good performance as well, but it took a hell of a time to run.


Time to end this post, the back-testing results have to wait. Until then you can play with the full source code yourself. Here is an example of using it:


Comentários estão fechados.


Recent popular posts.


Most visited articles of the week.


Jobs para usuários de R.


Is powered by WordPress using a bavotasan design.


Direitos autorais & copy; 2017 R-blogueiros. Todos os direitos reservados. Terms and Conditions for this website.


Support Vector Machines: A Guide for Beginners.


Support Vector Machines: A Guide for Beginners.


In this guide I want to introduce you to an extremely powerful machine learning technique known as the Support Vector Machine (SVM). It is one of the best "out of the box" supervised classification techniques. As such, it is an important tool for both the quantitative trading researcher and data scientist.


I feel it is important for a quant researcher or data scientist to be comfortable with both the theoretical aspects and practical usage of the techniques in their toolkit. Hence this article will form the first part in a series of articles that discuss support vector machines. This article specifically will cover the theory of maximal margin classifiers , support vector classifiers and support vector machines . Subsequent articles will make use of the Python scikit-learn library to demonstrate some examples of the aforementioned theoretical techniques on actual data.


Motivation for Support Vector Machines.


The problem to be solved in this article is one of supervised binary classification . That is, we wish to categorise new unseen objects into two separate groups based on their properties and a set of known examples, which are already categorised. A good example of such a system is classifying a set of new documents into positive or negative sentiment groups, based on other documents which have already been classified as positive or negative. Similarly, we could classify new emails into spam or non-spam, based on a large corpus of documents that have already been marked as spam or non-spam by humans. SVMs are highly applicable to such situations.


A Support Vector Machine models the situation by creating a feature space , which is a finite-dimensional vector space, each dimension of which represents a "feature" of a particular object. In the context of spam or document classification, each "feature" is the prevalence or importance of a particular word.


The goal of the SVM is to train a model that assigns new unseen objects into a particular category. It achieves this by creating a linear partition of the feature space into two categories. Based on the features in the new unseen objects (e. g. documents/emails), it places an object "above" or "below" the separation plane, leading to a categorisation (e. g. spam or non-spam). This makes it an example of a non-probabilistic linear classifier. It is non-probabilistic, because the features in the new objects fully determine its location in feature space and there is no stochastic element involved.


However, much of the benefit of SVMs comes from the fact that they are not restricted to being linear classifiers. Utilising a technique known as the kernel trick they can become much more flexible by introducing various types of non-linear decision boundaries.


Formally, in mathematical language, SVMs construct linear separating hyperplanes in high-dimensional vector spaces. Data points are viewed as $(\vec , y)$ tuples, $\vec = (x_1, \ldots, x_p)$ where the $x_j$ are the feature values and $y$ is the classification (usually given as $+1$ or $-1$). Optimal classification occurs when such hyperplanes provide maximal distance to the nearest training data points. Intuitively, this makes sense, as if the points are well separated, the classification between two groups is much clearer.


However, if in a feature space some of the sets are not linearly separable (i. e. they overlap!), then it is necessary to perform a mapping of the original feature space to a higher-dimensional space, in which the separation between the groups is clear, or at least clearer. However, this has the consequence of making the separation boundary in the original space potentially non-linear.


In this article we will proceed by considering the advantages and disadvantages of SVMs as a classification technique, then defining the concept of an optimal linear separating hyperplane , which motivates a simple type of linear classifier known as a maximal margin classifier (MMC). We will then show that maximal margin classifiers are not often applicable to many "real world" situations and as such need modification, in the form of a support vector classifier (SVC). We will then relax the restriction of linearity and consider non-linear classifiers, namely support vector machines , which use kernel functions to improve computational efficiency.


Advantages and Disadvantages of SVMs.


As a classification technique, the SVM has many advantages, many of which are due to its computational efficiency on large datasets. The Scikit-Learn team have summarised the main advantages and disadvantages here but I have repeated and elaborated on them for completeness:


Vantagens


High-Dimensionality - The SVM is an effective tool in high-dimensional spaces, which is particularly applicable to document classification and sentiment analysis where the dimensionality can be extremely large ($\geq 10^6$). Memory Efficiency - Since only a subset of the training points are used in the actual decision process of assigning new members, only these points need to be stored in memory (and calculated upon) when making decisions. Versatility - Class separation is often highly non-linear. The ability to apply new kernels allows substantial flexibility for the decision boundaries, leading to greater classification performance.


Desvantagens


$p > n$ - In situations where the number of features for each object ($p$) exceeds the number of training data samples ($n$), SVMs can perform poorly. This can be seen intuitively, as if the high-dimensional feature space is much larger than the samples, then there are less effective support vectors on which to support the optimal linear hyperplanes, leading to poorer classification performance as new unseen samples are added. Non-Probabilistic - Since the classifier works by placing objects above and below a classifying hyperplane, there is no direct probabilistic interpretation for group membership. However, one potential metric to determine "effectiveness" of the classification is how far from the decision boundary the new point is.


Now that we've outlined the advantages and disadvantages, we're going to discuss the geometric objects and mathematical entities that will ultimately allow us to define the SVMs and how they work.


There are some fantastic references (both links and textbooks) that derive much of the mathematical detail of how SVMs work. In the following derivation I didn't want to "reinvent the wheel" too much, especially with regards notation and pedagogy, so I've formulated the following treatment based on the references provided at the end of the article, making strong use of James et al (2013), Hastie et al (2009) and the Wikibooks article on SVMs. I have made changes to the notation where appropriate and have adjusted the narrative to suit individuals interested in quantitative finance.


Linear Separating Hyperplanes.


The linear separating hyperplane is the key geometric entity that is at the heart of the SVM. Informally, if we have a high-dimensional feature space, then the linear hyperplane is an object one dimension lower than this space that divides the feature space into two regions.


This linear separating plane need not pass through the origin of our feature space, i. e. it does not need to include the zero vector as an entity within the plane. Such hyperplanes are known as affine .


If we consider a real-valued $p$-dimensional feature space, known mathematically as $\mathbb ^p$, then our linear separating hyperplane is an affine $p-1$ dimensional space embedded within it.


For the case of $p=2$ this hyperplane is simply a one-dimensional straight line, which lives in the larger two-dimensional plane, whereas for $p=3$ the hyerplane is a two-dimensional plane that lives in the larger three-dimensional feature space (see Fig 1 and Fig 2):


Figs 1 and 2: One - and two-dimensional hyperplanes.


If we consider an element of our $p$-dimensional feature space, i. e. $\vec =(x_1. x_p) \in \mathbb ^p$, then we can mathematically define an affine hyperplane by the following equation:


\begin b_0 + b_1 x_1 + . + b_p x_p = 0 \end.


$b_0 \neq 0$ gives us an affine plane (i. e. it does not pass through the origin). We can use a more succinct notation for this equation by introducing the summation sign:


\begin b_0 + \sum^ _ b_j x_j = 0 \end.


Notice however that this is nothing more than a multi-dimensional dot product (or, more generally, an inner product), and as such can be written even more succinctly as:


\begin \vec \cdot \vec + b_0 = 0 \end.


If an element $\vec \in \mathbb ^p$ satisfies this relation then it lives on the $p-1$-dimensional hyperplane. This hyperplane splits the $p$-dimensional feature space into two classification regions (see Fig 3):


Fig 3: Separation of $p$-dimensional space by a hyperplane.


Elements $\vec $ above the plane satisfy:


\begin \vec \cdot \vec + b_0 > 0 \end.


While those below it satisfy:


\begin \vec \cdot \vec + b_0 < 0 \end.


The key point here is that it is possible for us to determine which side of the plane any element $\vec $ will fall on by calculating the sign of the expression $\vec \cdot \vec + b_0$. This concept will form the basis of a supervised classification technique.


Classificação.


Continuing with our example of email spam filtering, we can think of our classification problem (say) as being provided with a thousand emails ($n=1000$), each of which is marked spam ($+1$) or non-spam ($-1$). In addition, each email has an associated set of keywords (i. e. separating the words on spacing) that provide features . Hence if we take the set of all possible keywords from all of the emails (and remove duplicates), we will be left with $p$ keywords in total.


If we translate this into a mathematical problem, the standard setup for a supervised classification procedure is to consider a set of $n$ training observations , $\vec _i$, each of which is a $p$-dimensional vector of features. Each training observation has an associated class label , $y_i \in \ $. Hence we can think of $n$ pairs of training observations $(\vec _i, y_i)$ representing the features and class labels (keyword lists and spam/non-spam). In addition to the training observations we can provide test observations , $\vec ^ = (x^ _1, . , x^ _p)$ that are later used to test the performance of the classifiers. In our spam example, these test observations would be new emails that have not yet been seen.


Our goal is to develop a classifier based on provided training observations that will correctly classify subsequent test observations using only their feature values. This translates into being able to classify an email as spam or non-spam solely based on the keywords contained within it.


We will initially suppose that it is possible, via a means yet to be determined, to construct a hyperplane that separates training data perfectly according to their class labels (see Figs 4 and 5). This would mean cleanly separating spam emails from non-spam emails solely by using specific keywords. The following diagram is only showing $p=2$, while for keyword lists we may have $p>10^6$. Hence Figs 4 and 5 are only representative of the problem.


Fig 4: Multiple separating hyperplanes; Fig 5: Perfect separation of class data.


This translates into a mathematical separating property of:


\begin \vec \cdot \vec _i + b_0 > 0,\enspace\text \enspace y_i = 1 \end.


\begin \vec \cdot \vec _i + b_0 < 0,\enspace\text \enspace y_i = -1 \end.


This basically states that if each training observation is above or below the separating hyperplane, according to the geometric equation which defines the plane, then its associated class label will be $+1$ or $-1$. Thus we have developed a simple classification process. We assign a test observation to a class depending upon which side of the hyperplane it is located on.


This can be formalised by considering the following function $f(\vec )$, with a test observation $\vec ^ =(x^ _1. x^ _p)$:


However, this tells us nothing about how we go about finding the $b_j$ components of $\vec $, as well as $b_0$, which are crucial in helping us determine the equation of the hyperplane separating the two regions. The next section discusses an approach for carrying this out, as well as introducing the concept of the maximal margin hyperplane and a classifier built on it, known as the maximal margin classifier .


Deriving the Classifier.


At this stage it is worth pointing out that separating hyperplanes are not unique, since it is possible to slightly translate or rotate such a plane without touching any training observations (see Fig 4).


So, not only do we need to know how to construct such a plane, but we also need to determine the most optimal . This motivates the concept of the maximal margin hyperplane (MMH), which is the separating hyperplane that is farthest from any training observations, and is thus "optimal".


How do we find the maximal margin hyperplane? Firstly, we compute the perpendicular distance from each training observation $\vec _i$ for a given separating hyperplane. The smallest perpendicular distance to a training observation from the hyperplane is known as the margin . The MMH is the separating hyperplane where the margin is the largest. This guarantees that it is the farthest minimum distance to a training observation.


The classification procedure is then just simply a case of determining which side a test observation falls on. This can be carried out using the above formula for $f(\vec ^ )$. Such a classifier is known as a maximimal margin classifier (MMC). Note however that finding the particular values that lead to the MMH is purely based on the training observations . That is, we still need to be aware of how the MMC performs on the test observations . We are implicitly making the assumption that a large margin in the training observations will provide a large margin on the test observations, but this may not be the case.


As always, we must be careful to avoid overfitting when the number of feature dimensions is large (e. g. in Natural Language Processing applications such as email spam classification). Overfitting here means that the MMH is a very good fit for the training data but can perform quite poorly when exposed to testing data . I discuss this issue in depth in the article on the bias-variance trade-off.


To reiterate, our goal now becomes finding an algorithm that can produce the $b_j$ values, which will fix the geometry of the hyperplane and hence allow determination of $f(\vec ^ )$ for any test observation.


If we consider Fig 6, we can see that the MMH is the mid-line of the widest "block" that we can insert between the two classes such that they are perfectly separated.


Fig 6: Maximal margin hyperplane with support vectors (A, B and C)


One of the key features of the MMC (and subsequently SVC and SVM) is that the location of the MMH only depends on the support vectors , which are the training observations that lie directly on the margin (but not hyperplane) boundary (see points A, B and C in Fig 6). This means that the location of the MMH is NOT dependent upon any other training observations.


Thus it can be immediately seen that a potential drawback of the MMC is that its MMH (and thus its classification performance) can be extremely sensitive to the support vector locations. However, it is also partially this feature that makes the SVM an attractive computational tool, as we only need to store the support vectors in memory once it has been "trained" (i. e. the $b_j$ values are fixed).


Constructing the Maximal Margin Classifier.


I feel it is instructive to fully outline the optimisation problem that needs to be solved in order to create the MMH (and thus the MMC itself). While I will outline the constraints of the optimisation problem, the algorithmic solution to this problem is beyond the scope of the article. Thankfully these optimisation routines are implemented in scikit-learn (actually, via the LIBSVM library). If you wish to read more about the solution to these algorithmic problems, take a look at Hastie et al (2009) and the Scikit-Learn page on Support Vector Machines.


The procedure for determining a maximal margin hyperplane for a maximal margin classifier is as follows. Given $n$ training observations $\vec _1, . \vec _n \in \mathbb ^p$ and $n$ class labels $y_1. y_n \in \ $, the MMH is the solution to the following optimisation procedure:


Maximise $M \in \mathbb $, by varying $b_1, . b_p$ such that:


\begin y_i \left( \vec \cdot \vec + b_0 \right) \geq M, \quad \forall i = 1. n \end.


Despite the complex looking constraints, they actually state that each observation must be on the correct side of the hyperplane and at least a distance $M$ from it. Since the goal of the procedure is to maximise $M$, this is precisely the condition we need to create the MMC!


Clearly, the case of perfect separability is an ideal one. Most "real world" datasets will not have such perfect separability via a linear hyperplane (see Fig 7). However, if there is no separability then we are unable to construct a MMC by the optimisation procedure above. So, how do we create a form of separating hyperplane?


Fig 7: No possibility of a true separating hyperplane.


Essentially we have to relax the requirement that a separating hyperplane will perfectly separate every training observation on the correct side of the line (i. e. guarantee that it is associated with its true class label), using what is called a soft margin . This motivates the concept of a support vector classifier (SVC).


Support Vector Classifiers.


As we alluded to above, one of the problems with MMC is that they can be extremely sensitive to the addition of new training observations. Consider Figs 8 and 9. In Fig 8 it can be seen that there exists a MMH perfectly separating the two classes. However, in Fig 9 if we add one point to the $+1$ class we see that the location of the MMH changes substantially. Hence in this situation the MMH has clearly been over-fit :


Figs 8 and 9: Addition of a single point dramatically changes the MMH line.


As we mentioned above also, we could consider a classifier based on a separating hyperplane that doesn't perfectly separate the two classes, but does have a greater robustness to the addition of new invididual observations and has a better classification on most of the training observations. This comes at the expense of some misclassification of a few training observations.


This is how a support vector classifier or soft margin classifier works. A SVC allows some observations to be on the incorrect side of the margin (or hyperplane), hence it provides a "soft" separation. The following figures 10 and 11 demonstrate observations being on the wrong side of the margin and the wrong side of the hyperplane respectively:


Figs 10 and 11: Observations on the wrong side of the margin and hyperplane, respectively.


As before, an observation is classified depending upon which side of the separating hyperplane it lies on, but some points may be misclassified.


It is instructive to see how the optimisation procedure differs from that described above for the MMC. We need to introduce new parameters, namely $n$ $\epsilon_i$ values (known as the slack values ) and a parameter $C$, known as the budget . We wish to maximise $M$, across $b_1, . b_p,\epsilon_1. \epsilon_n$ such that:


\begin y_i \left( \vec \cdot \vec + b_0 \right) \geq M (1 - \epsilon_i), \quad \forall i = 1. n \end.


\begin \epsilon_i \geq 0, \quad \sum^ _ \epsilon_i \leq C \end.


Where $C$, the budget, is a non-negative "tuning" parameter. $M$ still represents the margin and the slack variables $\epsilon_i$ allow the individual observations to be on the wrong side of the margin or hyperplane.


In essence the $\epsilon_i$ tell us where the $i$th observation is located relative to the margin and hyperplane. For $\epsilon_i=0$ it states that the $x_i$ training observation is on the correct side of the margin. For $\epsilon_i>0$ we have that $x_i$ is on the wrong side of the margin, while for $\epsilon_i>1$ we have that $x_i$ is on the wrong side of the hyperplane.


$C$ collectively controls how much the individual $\epsilon_i$ can be modified to violate the margin. $C=0$ implies that $\epsilon_i=0, \forall i$ and thus no violation of the margin is possible, in which case (for separable classes) we have the MMC situation.


For $C>0$ it means that no more than $C$ observations can violate the hyperplane. As $C$ increases the margin will widen. See Fig 12 and 13 for two differing values of $C$:


Figs 12 and 13: Different values of the tuning parameter $C$


How do we choose $C$ in practice? Generally this is done via cross-validation. In essence $C$ is the parameter that governs the bias-variance trade-off for the SVC. A small value of $C$ means a low bias, high variance situation. A large value of $C$ means a high bias, low variance situation.


As before, to classify a new test observation $x^ $ we simply calculate the sign of $f(\vec ^ )= \vec \cdot \vec ^ + b_0$.


This is all well and good for classes that are linearly (or nearly linearly) separated. However, what about separation boundaries that are non-linear? How do we deal with those situations? This is where we can extend the concept of support vector classifiers to support vector machines.


Suporte Vector Machines.


The motivation behind the extension of a SVC is to allow non-linear decision boundaries. This is the domain of the Support Vector Machine (SVM). Consider the following Figs 14 and 15. In such a situation a purely linear SVC will have extremely poor performance, simply because the data has no clear linear separation:


Figs 14 and 15: No clear linear separation between classes and thus poor SVC performance.


Hence SVCs can be useless in highly non-linear class boundary problems.


In order to motivate how an SVM works, we can consider a standard "trick" in linear regression, when considering non-linear situations. In particular a set of $p$ features $x_1, . , x_p$ can be transformed, say, into a set of $2p$ features $x_1, x^2_1, . x_p, x^2_p$. This allows us to apply a linear technique to a set of non-linear features.


While the decision boundary is linear in the new $2p$-dimensional feature space it is non-linear in the original $p$-dimensional space. We end up with a decision boundary given by $q(\vec )=0$ where $q$ is a quadratic polynomial function of the original features and hence is a non-linear solution.


This is clearly not restricted to quadratic polynomials. Higher dimensional polynomials, interaction terms and other functional forms, could all be considered. Although the drawback is that it dramatically increases the dimension of the feature space to the point that some algorithms can become untractable.


The major advantage of SVMs is that they allow a non-linear enlargening of the feature space, while still retaining a significant computational efficiency, using a process known as the "kernel trick", which will be outlined below shortly.


So what are SVMs? In essence they are an extension of SVCs that results from enlargening the feature space through the use of functions known as kernels . In order to understand kernels, we need to briefly discuss some aspects of the solution to the SVC optimisation problem outlined above.


While calculating the solution to the SVC optimisation problem, the algorithm only needs to make use of inner products between the observations and not the observations themselves. Recall that an inner product is defined for two $p$-dimensional vectors $u, v$ as:


\begin \langle \vec ,\vec \rangle = \sum^ _ u_j v_j \end.


Hence for two observations an inner product is defined as:


\begin \langle \vec _i,\vec _k \rangle = \sum^ _ x_ x_ \end.


While we won't dwell on the details (since they are beyond the scope of this article), it is possible to show that a linear support vector classifier for a particular observation $\vec $ can be represented as a linear combination of inner products:


\begin f(\vec ) = b_0 + \sum^ _ \alpha_i \langle \vec , \vec _i \rangle \end.


With $n$ $a_i$ coefficients, one for each of the training observations.


To estimate the $b_0$ and $a_i$ coefficients we only need to calculate $ = n(n-1)/2$ inner products between all pairs of training observations. In fact, we ONLY need to calculate the inner products for the subset of training observations that represent the support vectors . I will call this subset $\mathscr $. Isso significa que:


\begin a_i = 0 \enspace \text \enspace \vec _i \notin \mathscr \end.


This means we can rewrite the representation formula as:


\begin f(x) = b_0 + \sum_ > a_i \langle \vec , \vec _i \rangle \end.


This turns out to be a major advantage for computational efficiency.


This now motivates the extension to SVMs. If we consider the inner product $\langle \vec _i, \vec _k \rangle$ and replace it with a more general inner product "kernel" function $K=K(\vec _i, \vec _k)$, we can modify the SVC representation to use non-linear kernel functions and thus modify how we calculate "similarity" between two observations. For instance, to recover the SVC we just take $K$ to be as follows:


Since this kernel is linear in its features the SVC is known as the linear SVC. We can also consider polynomial kernels, of degree $d$:


This provides a significantly more flexible decision boundary and essentially amounts to fitting a SVC in a higher-dimensional feature space involving $d$-degree polynomials of the features (see Fig 16).


Fig 16: A $d$-degree polynomial kernel; Fig 17: A radial kernel.


Hence, the definition of a support vector machine is a support vector classifier with a non-linear kernel function.


We can also consider the popular radial kernel (see Fig 17):


\begin K(\vec _i, \vec _k) = \exp \left(-\gamma \sum^ _ (x_ - x_ )^2 \right), \quad \gamma > 0 \end.


So how do radial kernels work? They are clearly quite different from polynomial kernels. Essentially if our test observation $\vec ^ $ is far from a training observation $\vec _i$ in standard Euclidean distance then the sum $\sum^ _ (x^ _j - x_ )^2$ will be large and thus $K(\vec ^ ,\vec _i)$ will be very small. Hence this particular training observation $\vec _i$ will have almost no effect on where the test observation $\vec ^ $ is placed, via $f(\vec ^ )$.


Thus the radial kernel has extremely localised behaviour and only nearby training observations to $\vec ^ $ will have an impact on its class label.


While this article has been very theoretical, the next article on document classification using Scikit-Learn makes heavy use of SVMs in Python.


Biblographic Notes.


Originally, SVMs were invented by Vapnik (1996), while the current standard "soft margin" approach is due to Cortes (1995). My treatment of the material follows, and is strongly influenced by, the excellent statistical machine learning texts of James et al (2013) and Hastie et al (2009).


Referências.


A Quantcademy.


Participe do portal de associação da Quantcademy que atende à crescente comunidade de traders de quantificação de varejo e aprenda como aumentar a lucratividade de sua estratégia.


Negociação Algorítmica Bem Sucedida.


Como encontrar novas ideias de estratégia de negociação e avaliá-las objetivamente para o seu portfólio usando um mecanismo de backtesting personalizado no Python.


Comércio Algorítmico Avançado.


Como implementar estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas Bayesianas com R e Python.


How To Use A Support Vector Machine (SVM) In Daily Trading?


As a trader it is very important for you to enter the trade in the right direction. For example, you should be pretty sure the market is going to go up before you enter into a buy trade. If you enter a buy trade and market goes down, trade will end up hitting stop loss. If you have a method that can predict market direction with an accuracy above 70%, you can cut your overall risk of losing by 70%. In the last post I told you about R language and software and how you can use R in improving your trading system . R is a powerful statistical analysis software and is open source. There are more than 2000 R packages that are available to you that you can use to make your predictive models.


Our aim is to improve our trading system. The strategy is to combine your predictive statistical model with your naked trading model that is solely based on the technical analysis of price action. For example you spot a Gartley pattern on your chart and you have a buy signal. Your statistical predictive model tells you there is a 75% chance market will go down today. O que você deveria fazer? You should not enter into a buy trade. You will see by the end of the day you have saved yourself from a bad trade. In this post we will discuss how to forecast market direction using a Support Vector Machine (SVM). You can use a support vector machine on any time frame. Suppose you are planning to enter into a buy trade on H1 timeframe. Your SVM model predicts that next candle to be bearish. You can use this prediction to enter at a much better price in the next hour.


How To Use Support Vector Machine (SVM) In Predicting Market Direction On Any Timeframe?


You should download R software and RStudio software and install it before you continue with this post. Support Vector Machines are non-linear classifiers that use a kernel function to transform a non-linear classification problem into a linear classification problem. Watch the video below that explains what an SVM is:


Support Vector Machine is an important Machine Learning Algorithm. Now you don’t need to master how to do the modelling with an SVM. You should just have a broad understanding what is this algorithm and how you can use to cut your losses in your daily trading.


SV type: eps-svr (regression)


parameter : epsilon = 0.1 cost C = 5.


Gaussian Radial Basis kernel function.


Hyperparameter : sigma = 0.05.


Number of Support Vectors : 1884.


Objective Function Value : -3870.229.


Training error : 0.285461.


Cross validation error : 0.08664.


& gt; #calculate the time taken to make an SVM.


& gt; user system elapsed.


As you can see from the above calculations it took around 6.65 seconds for R to perform all the above calculations. The training error is 28% meaning the predictive accuracy of this SVM Model is 72%. We have used a radial basis function as the kernel. We need to do some tweaking and see if we can improve the predictive accuracy. The above calculations have been made using 5 lags of simple returns. With these 5 simple return lags we are getting a training error of 28%. Let’s repeat the calculations with 10 lags and see if we succeed in reducing the training.


As you can see above we did the calculations with 10 lags and were able to reduce the training error to 22% meaning we achieved a predictive accuracy of 78%. The time taken by R to do all the calculations is just 5.13 seconds which means we can also use our model on intraday timeframes like M15 and M30. We can trade binary options with this model on intraday timeframes of M15 and M30. Training error is always an overestimate. When we do out of sample testing, we will get an error that will be something between 22% to 28%. As long as we have a predictive accuracy above 70%, we can use this SVM Model in our daily trading. Now let’s do the calculations for the intraday timeframe of M15. This time we make the prediction for EURUSD.


These were the calculations for EURUSDM15 candles. As you can see R made the calculations pretty fast in 5 seconds. The training error is approximately 25% meaning we achieved a predictive accuracy of 75%. Now if we tweak the model more we can make the predictive accuracy better.


Isto é o que eu faço. I have this model make the prediction. As you have seen above this model hardly takes a few seconds to predict the next candle. Once I have the prediction, I use my candlestick trading system and see if it confirms with the prediction. When both the predictions confirm each other, I open the trade otherwise I skip the trade. This helps in reducing the losses.


You can see in the above calculations we reduced the number of lags from 10 to 5. We reduced the time of calculations by 1 second by training error went up to 30%. This is an indication that we should not try to reduce the number of lags. As you can see we can perform these calculations in just a few seconds. After this statistical modelling we know with at least 70% certainty the direction of the next candle. If the prediction is an up candle, we should avoid a sell trade. Use your knowledge of candlestick patterns and enter into a buy trade .


0 comentários.


Faça o download de um sistema simples de Forex GRÁTIS que duplique a conta todo mês com 3-4 baixo risco definido e esqueça negócios em H4 Timeframe e também pode negociar opções binárias em M5, M15 e M30 Timeframes!


Suas informações são 100% seguras conosco e nunca serão compartilhadas.


Direitos autorais & copy; 2015 · Forex. TradingNinja · Todos os direitos reservados.


Obter uma estratégia de opções binárias que tem 92% de taxa média de ganho GRÁTIS!

No comments:

Post a Comment