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 vetores 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, as cruzes azuis indicam os pontos de dados que pertencem à categoria 1 e os círculos vermelhos que representam os pontos de dados que pertencem à categoria 2. Cada um dos pontos de dados individuais possui um valor insumo 1 induzido (representado por sua posição no eixo x ) e um valor indevido de entrada 2 (representado pela 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 20 dimensional. 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 possa ser usado 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 ferramentas “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 de especialista resultante após a execução do script "Schnick" no 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 é implantado no terminal 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 é implantado no testador de 5 estratégias (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, por isso só darei uma rápida 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 (). Essa função permite que você passe as alças dos 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 das suas alças armazenadas em uma matriz de inteiros (Nota: qualquer combinação de indicadores pode ser usada como entradas, eles precisam apenas ser passados 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, verifique se o tamanho de suas matrizes corresponde aos valores que você passa. 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.
Ver conteúdo de qualquer maneira.
Ir para o conteúdo da minha região.
Já é cliente do FOREX? Conheça nosso novo serviço. Saber mais.
4
Dica o equilíbrio seu caminho com FOREX.
Beneficie-se da confiabilidade de um corretor confiável, spreads super-apertados, execuções comerciais excepcionais e ferramentas comerciais desnecessárias.
Ferramentas e análise.
Ao contrário da maioria das plataformas padrão, você terá acesso a notícias da Reuters totalmente integradas, pesquisa FOREX, Autochartist Trade Ideas, análise técnica da Central de Negociação e ferramentas de gerenciamento de contas.
Dados da conta em tempo real.
Nenhuma ponte de terceiros, sem sincronizações automáticas.
Consultores Especialistas
Nosso 4 fornece um ambiente otimizado para EA sem nenhuma ponte de terceiros ou sincronização automática, disponibilidade de lote micro (1.000) e aceita todos os EAs.
Hospedagem EA grátis.
Vá além da negociação tradicional com sistemas de negociação totalmente personalizáveis hospedados em um servidor profissional seguro, sem nenhum custo para os clientes qualificados. Saber mais.
Soluções móveis.
Acesse a plataforma de negociação 4 através do seu iPhone, iPad, Android, smartphone Windows e Pocket PC. Conecte-se em movimento e você terá todos os benefícios da negociação através de 4 com FOREX enquanto no seu celular.
Insira até 25 símbolos separados por vírgulas ou espaços na caixa de texto abaixo. Esses símbolos estarão disponíveis durante sua sessão para uso nas páginas aplicáveis.
Não sabe o símbolo das ações? Use a ferramenta de pesquisa de símbolo.
Alfabetize a ordem de classificação dos meus símbolos.
Pesquisa de símbolo.
Investir ficou mais fácil & # 8230;
Inscreva-se agora para se tornar um membro do NASDAQ e comece a receber notificações instantâneas quando ocorrerem eventos importantes que afetem os estoques que você segue.
Corretores de pesquisa antes de negociar.
Quer negociar FX?
Notícias para SVM.
Próximos ganhos.
Editar favoritos.
Insira até 25 símbolos separados por vírgulas ou espaços na caixa de texto abaixo. Esses símbolos estarão disponíveis durante sua sessão para uso nas páginas aplicáveis.
Personalize sua experiência NASDAQ.
Selecione a cor de fundo de sua escolha:
Selecione uma página de destino padrão para sua pesquisa de cotação:
Por favor, confirme sua seleção:
Você selecionou para alterar sua configuração padrão para a Pesquisa de cotação. Esta será agora sua página de destino padrão; a menos que você altere sua configuração novamente ou exclua seus cookies. Tem certeza de que deseja alterar suas configurações?
Desative seu bloqueador de anúncios (ou atualize suas configurações para garantir que o JavaScript e os cookies estejam ativados), para que possamos continuar a fornecer a você as notícias e os dados de mercado de primeira linha que você espera de nós.
Negociação com Support Vector Machines (SVM)
Finalmente todas as estrelas se alinharam e eu posso dedicar algum tempo para o back-testing 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. Fiquei bastante surpreso ao ver essa estratégia tendo um desempenho melhor do que o ARMA + GARCH (essa é a terra natal do ARMA + GARCH e eu ficaria muito feliz apenas com desempenho comparável)!
Em seguida, tentei os mesmos cinco recursos, mas tentando selecionar o melhor subconjunto. A seleção foi feita usando uma abordagem gananciosa, começando com 0 recursos e adicionando interativamente o recurso que minimiza o erro. Essa abordagem melhorou ainda mais as coisas.
Finalmente, tentei uma abordagem diferente 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 desempenho muito bom, mas levou um bom tempo para ser executado.
Hora de terminar este post, os resultados do teste de volta têm que esperar. Até lá você pode jogar com o código fonte completo. Aqui está um exemplo de usá-lo:
Suporte Vector Machine Learning Trader - especialista para 5.
O exemplo Expert Advisor abaixo ("svmTrader") foi escrito para mostrar um uso típico da ferramenta de aprendizado de máquina de vetor de suporte (uma cópia da ferramenta de aprendizado de máquina de vetor de suporte pode ser baixada do 5 Market). Este Expert Advisor funciona da seguinte maneira:
Duas novas máquinas de vetores de suporte são criadas usando a biblioteca svMachineTool. Um é configurado para sinalizar novas negociações de 'compra' e o outro é configurado para sinalizar novas negociações 'vender'.
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 entrada, eles precisam apenas ser passados para o svm em uma única matriz de 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 um novo sinal de negociação de compra ou venda é exibido, a negociação é aberta junto com as ordens de Stop Loss e Take Profit definidas manualmente.
Espero que o Expert Advisor permita que você experimente um pouco com a Ferramenta. Eu recomendo que você copie / altere / modifique o Expert Advisor para se adequar ao seu próprio estilo de negociação.
Silvercorp Metals Inc (SVM)
Últimos comentários Silvercorp Metals.
Bons fundamentos, ótima liderança. Lutou duro para os acionistas contra todos os ataques de vendedores a descoberto. Os shorts estão em modo de pânico agora. Obtenha seus certificados para proteção adicional nesses momentos. . (Consulte Mais informação)
Aug 11, 2017 09:04PM G · Resposta.
This stock will ride for the next 3 years and better easy $12. For next year And Bet on it . (Consulte Mais informação)
Mar 01, 2017 07:13PM G · Resposta.
Called the ball on this one, said to buy it at .65 went to 4.35 now with weak silver prices this is a great opportunity to pick up more . (Consulte Mais informação)
De toda a web.
A Fusion Media não aceitará qualquer responsabilidade por perdas ou danos como resultado da confiança nas informações contidas neste site, incluindo dados, cotações, gráficos e sinais de compra / venda. Por favor, esteja completamente informado sobre os riscos e custos associados à negociação dos mercados financeiros, é uma das formas de investimento mais arriscadas possíveis. A negociação de moeda na margem envolve alto risco e não é adequada para todos os investidores. Antes de decidir negociar divisas estrangeiras ou qualquer outro instrumento financeiro, você deve considerar cuidadosamente seus objetivos de investimento, nível de experiência e apetite a risco.
A Fusion Media gostaria de lembrar que os dados contidos neste site não são necessariamente em tempo real nem precisos. Todos os CFDs (ações, índices, futuros) e os preços de Forex não são fornecidos pelas bolsas, mas sim pelos formadores de mercado, e assim os preços podem não ser precisos e podem diferir do preço de mercado real, significando que os preços são indicativos e não apropriados para fins comerciais. Portanto, a Fusion Media não tem qualquer responsabilidade por quaisquer perdas comerciais que você possa incorrer como resultado do uso desses dados.
Melhores estratégias 4: Machine Learning.
Deep Blue foi o primeiro computador que ganhou um campeonato mundial de xadrez. Isso foi em 1996, e levou 20 anos até que outro programa, AlphaGo, pudesse derrotar o melhor jogador de Go humano. O Deep Blue era um sistema baseado em modelos com regras de xadrez hardwired. O AlphaGo é um sistema de mineração de dados, uma rede neural profunda treinada com milhares de jogos Go. Não melhorou hardware, mas um avanço no software foi essencial para a etapa de bater os melhores jogadores de xadrez para bater os melhores jogadores de Go.
Nesta quarta parte da minissérie, analisaremos a abordagem de mineração de dados para o desenvolvimento de estratégias de negociação. Este método não se preocupa com os mecanismos de mercado. Ele apenas verifica curvas de preços ou outras fontes de dados para padrões preditivos. Aprendizado de máquina ou & # 8220; Inteligência Artificial & # 8221; nem sempre está envolvido em estratégias de mineração de dados. Na verdade, o mais popular # 8211; e surpreendentemente rentável & # 8211; O método de mineração de dados funciona sem nenhuma rede neural sofisticada ou máquina de vetores de suporte.
Machine learning principles.
A learning algorithm is fed with data samples , normally derived in some way from historical prices. Each sample consists of n variables x 1 .. x n , commonly named predictors , features , signals , or simply input . These predictors can be the price returns of the last n bars, or a collection of classical indicators, or any other imaginable functions of the price curve (I’ve even seen the pixels of a price chart image used as predictors for a neural network!). Each sample also normally includes a target variable y , like the return of the next trade after taking the sample, or the next price movement. In the literature you can find y also named label or objective . In a training process , the algorithm learns to predict the target y from the predictors x 1 .. x n . The learned ‘memory’ is stored in a data structure named model that is specific to the algorithm (not to be confused with a financial model for model based strategies!). A machine learning model can be a function with prediction rules in C code, generated by the training process. Or it can be a set of connection weights of a neural network.
The predictors, features, or whatever you call them, must carry information sufficient to predict the target y with some accuracy. They m ust also often fulfill two formal requirements. First, all predictor values should be in the same range, like -1 .. +1 (for most R algorithms) or -100 .. +100 (for Zorro or TSSB algorithms). So you need to normalize them in some way before sending them to the machine. Second, the samples should be balanced , i. e. equally distributed over all values of the target variable. So there should be about as many winning as losing samples. If you do not observe these two requirements, you’ll wonder why you’re getting bad results from the machine learning algorithm.
Regression algorithms predict a numeric value, like the magnitude and sign of the next price move. Classification algorithms predict a qualitative sample class, for instance whether it’s preceding a win or a loss. Some algorithms, such as neural networks, decision trees, or support vector machines, can be run in both modes.
A few algorithms learn to divide samples into classes without needing any target y . That’s unsupervised learning , as opposed to supervised learning using a target. Somewhere inbetween is reinforcement learning , where the system trains itself by running simulations with the given features, and using the outcome as training target. AlphaZero, the successor of AlphaGo, used reinforcement learning by playing millions of Go games against itself. In finance there are few applications for unsupervised or reinforcement learning. 99% of machine learning strategies use supervised learning.
Whatever signals we’re using for predictors in finance, they will most likely contain much noise and little information, and will be nonstationary on top of it. Therefore financial prediction is one of the hardest tasks in machine learning. More complex algorithms do not necessarily achieve better results. The selection of the predictors is critical to the success. It is no good idea to use lots of predictors, since this simply causes overfitting and failure in out of sample operation. Therefore data mining strategies often apply a preselection algorithm that determines a small number of predictors out of a pool of many. The preselection can be based on correlation between predictors, on significance, on information content, or simply on prediction success with a test set. Practical experiments with feature selection can be found in a recent article on the Robot Wealth blog.
Here’s a list of the most popular data mining methods used in finance.
1. Indicator soup.
Most trading systems we’re programming for clients are not based on a financial model. The client just wanted trade signals from certain technical indicators, filtered with other technical indicators in combination with more technical indicators. When asked how this hodgepodge of indicators could be a profitable strategy, he normally answered: “Trust me. I’m trading it manually, and it works.”
It did indeed. At least sometimes. Although most of those systems did not pass a WFA test (and some not even a simple backtest), a surprisingly large number did. And those were also often profitable in real trading. The client had systematically experimented with technical indicators until he found a combination that worked in live trading with certain assets. This way of trial-and-error technical analysis is a classical data mining approach, just executed by a human and not by a machine. I can not really recommend this method – and a lot of luck, not to speak of money, is probably involved – but I can testify that it sometimes leads to profitable systems.
2. Candle patterns.
Not to be confused with those Japanese Candle Patterns that had their best-before date long, long ago. The modern equivalent is price action trading . You’re still looking at the open, high, low, and close of candles. You’re still hoping to find a pattern that predicts a price direction. But you’re now data mining contemporary price curves for collecting those patterns. There are software packages for that purpose. They search for patterns that are profitable by some user-defined criterion, and use them to build a specific pattern detection function. It could look like this one (from Zorro’s pattern analyzer):
This C function returns 1 when the signals match one of the patterns, otherwise 0. You can see from the lengthy code that this is not the fastest way to detect patterns. A better method, used by Zorro when the detection function needs not be exported, is sorting the signals by their magnitude and checking the sort order. An example of such a system can be found here.
Can price action trading really work? Just like the indicator soup, it’s not based on any rational financial model. One can at best imagine that sequences of price movements cause market participants to react in a certain way, this way establishing a temporary predictive pattern. However the number of patterns is quite limited when you only look at sequences of a few adjacent candles. The next step is comparing candles that are not adjacent, but arbitrarily selected within a longer time period. This way you’re getting an almost unlimited number of patterns – but at the cost of finally leaving the realm of the rational. It is hard to imagine how a price move can be predicted by some candle patterns from weeks ago.
Still, a lot effort is going into that. A fellow blogger, Daniel Fernandez, runs a subscription website (Asirikuy) specialized on data mining candle patterns. He refined pattern trading down to the smallest details, and if anyone would ever achieve any profit this way, it would be him. But to his subscribers’ disappointment, trading his patterns live (QuriQuant) produced very different results than his wonderful backtests. If profitable price action systems really exist, apparently no one has found them yet.
3. Linear regression.
The simple basis of many complex machine learning algorithms: Predict the target variable y by a linear combination of the predictors x 1 .. x n .
The coefficients a n are the model. They are calculated for minimizing the sum of squared differences between the true y values from the training samples and their predicted y from the above formula:
For normal distributed samples, the minimizing is possible with some matrix arithmetic, so no iterations are required. In the case n = 1 – with only one predictor variable x – the regression formula is reduced to.
which is simple linear regression , as opposed to multivariate linear regression where n > 1 Simple linear regression is available in most trading platforms, f. i. with the LinReg indicator in the TA-Lib. With y = price and x = time it’s often used as an alternative to a moving average. Multivariate linear regression is available in the R platform through the lm(..) function that comes with the standard installation. A variant is polynomial regression . Like simple regression it uses only one predictor variable x , but also its square and higher degrees, so that x n == x n :
With n = 2 or n = 3 , polynomial regression is often used to predict the next average price from the smoothed prices of the last bars. The polyfit function of MatLab, R, Zorro, and many other platforms can be used for polynomial regression.
4. Perceptron.
Often referred to as a neural network with only one neuron. In fact a perceptron is a regression function like above, but with a binary result, thus called logistic regression . It’s not regression though, it’s a classification algorithm. Zorro’s advise(PERCEPTRON, …) function generates C code that returns either 100 or -100, dependent on whether the predicted result is above a threshold or not:
You can see that the sig array is equivalent to the features x n in the regression formula, and the numeric factors are the coefficients a n .
5. N eural networks.
Linear or logistic regression can only solve linear problems. Many do not fall into this category – a famous example is predicting the output of a simple XOR function. And most likely also predicting prices or trade returns. An artificial neural network (ANN) can tackle nonlinear problems. It’s a bunch of perceptrons that are connected together in an array of layers . Any perceptron is a neuron of the net. Its output goes to the inputs of all neurons of the next layer, like this:
Like the perceptron, a neural network also learns by determining the coefficients that minimize the error between sample prediction and sample target. But this requires now an approximation process, normally with backpropagating the error from the output to the inputs, optimizing the weights on its way. This process imposes two restrictions. First, the neuron outputs must now be continuously differentiable functions instead of the simple perceptron threshold. Second, the network must not be too deep – it must not have too many ‘hidden layers’ of neurons between inputs and output. This second restriction limits the complexity of problems that a standard neural network can solve.
When using a neural network for predicting trades, you have a lot of parameters with which you can play around and, if you’re not careful, produce a lot of selection bias :
Number of hidden layers Number of neurons per hidden layer Number of backpropagation cycles, named epochs Learning rate, the step width of an epoch Momentum, an inertia factor for the weights adaption Activation function.
The activation function emulates the perceptron threshold. For the backpropagation you need a continuously differentiable function that generates a ‘soft’ step at a certain x value. Normally a sigmoid , tanh , or softmax function is used. Sometimes it’s also a linear function that just returns the weighted sum of all inputs. In this case the network can be used for regression, for predicting a numeric value instead of a binary outcome.
Neural networks are available in the standard R installation ( nnet , a single hidden layer network) and in many packages, for instance RSNNS and FCNN4R .
6. Deep learning.
Deep learning methods use neural networks with many hidden layers and thousands of neurons, which could not be effectively trained anymore by conventional backpropagation. Several methods became popular in the last years for training such huge networks. They usually pre-train the hidden neuron layers for achieving a more effective learning process. A Restricted Boltzmann Machine ( RBM ) is an unsupervised classification algorithm with a special network structure that has no connections between the hidden neurons. A Sparse Autoencoder ( SAE ) uses a conventional network structure, but pre-trains the hidden layers in a clever way by reproducing the input signals on the layer outputs with as few active connections as possible. Those methods allow very complex networks for tackling very complex learning tasks. Such as beating the world’s best human Go player.
Deep learning networks are available in the deepnet and darch R packages. Deepnet provides an autoencoder, Darch a restricted Boltzmann machine. I have not yet experimented with Darch, but here’s an example R script using the Deepnet autoencoder with 3 hidden layers for trade signals through Zorro’s neural() function:
7. Support vector machines.
Like a neural network, a support vector machine (SVM) is another extension of linear regression. When we look at the regression formula again,
we can interpret the features x n as coordinates of a n - dimensional feature space . Setting the target variable y to a fixed value determines a plane in that space, called a hyperplane since it has more than two (in fact, n-1 ) dimensions. The hyperplane separates the samples with y > o from the samples with y < 0 . The a n coefficients can be calculated in a way that the distances of the plane to the nearest samples – which are called the ‘support vectors’ of the plane, hence the algorithm name – is maximum. This way we have a binary classifier with optimal separation of winning and losing samples.
The problem: normally those samples are not linearly separable – they are scattered around irregularly in the feature space. No flat plane can be squeezed between winners and losers. If it could, we had simpler methods to calculate that plane, f. i. linear discriminant analysis . But for the common case we need the SVM trick: Adding more dimensions to the feature space. For this the SVM algorithm produces more features with a kernel function that combines any two existing predictors to a new feature. This is analogous to the step above from the simple regression to polynomial regression, where also more features are added by taking the sole predictor to the n-th power. The more dimensions you add, the easier it is to separate the samples with a flat hyperplane. This plane is then transformed back to the original n-dimensional space, getting wrinkled and crumpled on the way. By clever selecting the kernel function, the process can be performed without actually computing the transformation.
Like neural networks, SVMs can be used not only for classification, but also for regression. They also offer some parameters for optimizing and possibly overfitting the prediction process:
Kernel function. You normally use a RBF kernel (radial basis function, a symmetric kernel), but you also have the choice of other kernels, such as sigmoid, polynomial, and linear. Gamma, the width of the RBF kernel Cost parameter C, the ‘penalty’ for wrong classifications in the training samples.
An often used SVM is the libsvm library. It’s also available in R in the e1071 package. In the next and final part of this series I plan to describe a trading strategy using this SVM.
8. K-Nearest neighbor.
Compared with the heavy ANN and SVM stuff, that’s a nice simple algorithm with a unue property: It needs no training. So the samples are the model. You could use this algorithm for a trading system that learns permanently by simply adding more and more samples. The nearest neighbor algorithm computes the distances in feature space from the current feature values to the k nearest samples. A distance in n-dimensional space between two feature sets (x 1 .. x n ) and (y 1 .. y n ) is calculated just as in 2 dimensions:
The algorithm simply predicts the target from the average of the k target variables of the nearest samples, weighted by their inverse distances. It can be used for classification as well as for regression. Software tricks borrowed from computer graphics, such as an adaptive binary tree (ABT), can make the nearest neighbor search pretty fast. In my past life as computer game programmer, we used such methods in games for tasks like self-learning enemy intelligence. You can call the knn function in R for nearest neighbor prediction – or write a simple function in C for that purpose.
This is an approximation algorithm for unsupervised classification. It has some similarity, not only its name, to k-nearest neighbor. For classifying the samples, the algorithm first places k random points in the feature space. Then it assigns to any of those points all the samples with the smallest distances to it. The point is then moved to the mean of these nearest samples. This will generate a new samples assignment, since some samples are now closer to another point. The process is repeated until the assignment does not change anymore by moving the points, i. e. each point lies exactly at the mean of its nearest samples. We now have k classes of samples, each in the neighborhood of one of the k points.
This simple algorithm can produce surprisingly good results. In R, the kmeans function does the trick. An example of the k-means algorithm for classifying candle patterns can be found here: Unsupervised candlestick classification for fun and profit.
10. Naive Bayes.
This algorithm uses Bayes’ Theorem for classifying samples of non-numeric features (i. e. events ), such as the above mentioned candle patterns . Suppose that an event X (for instance, that the Open of the previous bar is below the Open of the current bar) appears in 80% of all winning samples. What is then the probability that a sample is winning when it contains event X ? It’s not 0.8 as you might think. The probability can be calculated with Bayes’ Theorem:
P(Y|X) is the probability that event Y (f. i. winning) occurs in all samples containing event X (in our example, Open(1) < Open(0) ). According to the formula, it is equal to the probability of X occurring in all winning samples (here, 0.8), multiplied by the probability of Y in all samples (around 0.5 when you were following my above advice of balanced samples) and divided by the probability of X in all samples.
If we are naive and assume that all events X are independent of each other, we can calculate the overall probability that a sample is winning by simply multiplying the probabilities P (X|winning) for every event X . This way we end up with this formula:
with a scaling factor s . For the formula to work, the features should be selected in a way that they are as independent as possible, which imposes an obstacle for using Naive Bayes in trading. For instance, the two events Close(1) < Close(0) and Open(1) < Open(0) are most likely not independent of each other. Numerical predictors can be converted to events by dividing the number into separate ranges.
The Naive Bayes algorithm is available in the ubuitous e1071 R package.
11. Decision and regression trees.
Those trees predict an outcome or a numeric value based on a series of yes/no decisions, in a structure like the branches of a tree. Any decision is either the presence of an event or not (in case of non-numerical features) or a comparison of a feature value with a fixed threshold. A typical tree function, generated by Zorro’s tree builder, looks like this:
How is such a tree produced from a set of samples? There are several methods; Zorro uses the Shannon i nformation entropy , which already had an appearance on this blog in the Scalping article. At first it checks one of the features, let’s say x 1 . It places a hyperplane with the plane formula x 1 = t into the feature space. This hyperplane separates the samples with x 1 > t from the samples with x 1 < t . The dividing threshold t is selected so that the information gain – the difference of information entropy of the whole space, to the sum of information entropies of the two divided sub-spaces – is maximum. This is the case when the samples in the subspaces are more similar to each other than the samples in the whole space.
This process is then repeated with the next feature x 2 and two hyperplanes splitting the two subspaces. Each split is equivalent to a comparison of a feature with a threshold. By repeated splitting, we soon get a huge tree with thousands of threshold comparisons. Then the process is run backwards by pruning the tree and removing all decisions that do not lead to substantial information gain. Finally we end up with a relatively small tree as in the code above.
Decision trees have a wide range of applications. They can produce excellent predictions superior to those of neural networks or support vector machines. But they are not a one-fits-all solution, since their splitting planes are always parallel to the axes of the feature space. This somewhat limits their predictions. They can be used not only for classification, but also for regression, for instance by returning the percentage of samples contributing to a certain branch of the tree. Zorro’s tree is a regression tree. The best known classification tree algorithm is C5.0 , available in the C50 package for R.
For improving the prediction even further or overcoming the parallel-axis-limitation, an ensemble of trees can be used, called a random forest . The prediction is then generated by averaging or voting the predictions from the single trees. Random forests are available in R packages randomForest , ranger and Rborist .
Conclusão.
There are many different data mining and machine learning methods at your disposal. The critical question: what is better, a model-based or a machine learning strategy? There is no doubt that machine learning has a lot of advantages. You don’t need to care about market microstructure, economy, trader psychology, or similar soft stuff. You can concentrate on pure mathematics. Machine learning is a much more elegant, more attractive way to generate trade systems. It has all advantages on its side but one. Despite all the enthusiastic threads on trader forums, it tends to mysteriously fail in live trading.
Every second week a new paper about trading with machine learning methods is published (a few can be found below). Please take all those publications with a grain of salt. According to some papers, phantastic win rates in the range of 70%, 80%, or even 85% have been achieved. Although win rate is not the only relevant criterion – you can lose even with a high win rate – 85% accuracy in predicting trades is normally equivalent to a profit factor above 5. With such a system the involved scientists should be billionaires meanwhile. Unfortunately I never managed to reproduce those win rates with the described method, and didn’t even come close. So maybe a lot of selection bias went into the results. Or maybe I’m just too stupid.
Compared with model based strategies, I’ve seen not many successful machine learning systems so far. And from what one hears about the algorithmic methods by successful hedge funds, machine learning seems still rarely to be used. But maybe this will change in the future with the availability of more processing power and the upcoming of new algorithms for deep learning.
Classification using deep neural networks: Dixon. et. al.2016 Predicting price direction using ANN & SVM: Kara. et. al.2011 Empirical comparison of learning algorithms: Caruana. et. al.2006 Mining stock market tendency using GA & SVM: Yu. Wang. Lai.2005.
The next part of this series will deal with the practical development of a machine learning strategy.
Machine Learning and Its Application in Forex Markets [WORKING MODEL]
In the last post we covered Machine learning (ML) concept in brief. In this post we explain some more ML terms, and then frame rules for a forex strategy using the SVM algorithm in R.
To use ML in trading, we start with historical data (stock price/forex data) and add indicators to build a model in R/Python/Java. We then select the right Machine learning algorithm to make the predictions.
First, let’s look at some of the terms related to ML.
Machine Learning algorithms – There are many ML algorithms (list of algorithms) designed to learn and make predictions on the data. ML algorithms can be either used to predict a category (tackle classification problem) or to predict the direction and magnitude (tackle regression problem).
Predict the price of a stock in 3 months from now, on the basis of company’s past quarterly results. Predict whether Fed will hike its benchmark interest rate.
Indicators/Features – Indicators can include Technical indicators (EMA, BBANDS, MACD, etc.), Fundamental indicators, or/and Macroeconomic indicators.
Exemplo 1 e # 8211; RSI(14), Price – SMA(50) , and CCI(30). We can use these three indicators, to build our model, and then use an appropriate ML algorithm to predict future values.
Exemplo 2 e # 8211; RSI(14), RSI(5), RSI(10), Price – SMA(50), Price – SMA(10), CCI(30), CCI(15), CCI(5)
In this example we have selected 8 indicators. Some of these indicators may be irrelevant for our model. In order to select the right subset of indicators we make use of feature selection technues.
Feature selection – It is the process of selecting a subset of relevant features for use in the model. Feature selection technues are put into 3 broad categories: Filter methods, Wrapper based methods and embedded methods. To select the right subset we basically make use of a ML algorithm in some combination. The selected features are known as predictors in machine learning.
Support Vector Machine (SVM) – SVM is a well-known algorithm for supervised Machine Learning, and is used to solve both for classification and regression problem.
A SVM algorithm works on the given labeled data points, and separates them via a boundary or a Hyperplane. SVM tries to maximize the margin around the separating hyperplane. Support vectors are the data points that lie closest to the decision surface.
Framing rules for a forex strategy using SVM in R – Given our understanding of features and SVM, let us start with the code in R. We have selected the EUR/USD currency pair with a 1 hour time frame dating back to 2010. Indicators used here are MACD (12, 26, 9), and Parabolic SAR with default settings of (0.02, 0.2).
First, we load the necessary libraries in R, and then read the EUR/USD data. We then compute MACD and Parabolic SAR using their respective functions available in the “TTR” package. To compute the trend, we subtract the closing EUR/USD price from the SAR value for each data point. We lag the indicator values to avoid look-ahead bias. We also create an Up/down class based on the price change.
Thereafter we merge the indicators and the class into one data frame called model data. The model data is then divided into training, and test data.
We then use the SVM function from the “e1071” package and train the data. We make predictions using the predict function and also plot the pattern. We are getting an accuracy of 53% here.
From the plot we see two distinct areas, an upper larger area in red where the algorithm made short predictions, and the lower smaller area in blue where it went long.
SAR indicator trails price as the trend extends over time. SAR is below prices when prices are rising and above prices when prices are falling. SAR stops and reverses when the price trend reverses and breaks above or below it. We are interested in the crossover of Price and SAR, and hence are taking trend measure as the difference between price and SAR in the code. Similarly, we are using the MACD Histogram values, which is the difference between the MACD Line and Signal Line values.
Looking at the plot we frame our two rules and test these over the test data.
Short rule = (Price–SAR) > -0.0025 & (Price – SAR) < 0.0100 & MACD > -0.0010 & MACD < 0,0010.
Long rule = (Price–SAR) > -0.0150 & (Price – SAR) < -0.0050 & MACD > -0.0005.
We are getting 54% accuracy for our short trades and an accuracy of 50% for our long trades. The SVM algorithm seems to be doing a good job here. We stop at this point, and in our next post on Machine learning we will see how framed rules like the ones devised above can be coded and backtested to check the viability of a trading strategy.
Machine learning is covered in the Executive Programme in Algorithmic Trading (EPAT) course conducted by QuantInsti. To know more about EPAT check the EPAT course page or feel free to contact our team at contact@quantinsti for queries on EPAT.
Комментариев нет:
Отправить комментарий