Reconhecimento de Padrões no Mercado Financeiro

8

Qual modelo de aprendizado de máquina ou aprendizado profundo ( deve ser supervisionado ) será o mais adequado para reconhecer padrões nos mercados financeiros?

O que quero dizer com reconhecimento de padrões no mercado financeiro: A imagem a seguir mostra como um padrão de amostra (isto é, cabeça e ombro) se parece:

Imagem 1:

Protótipo do padrão de cabeça e ombro

E a imagem a seguir mostra como ele realmente se forma em eventos de gráfico real:

Imagem 2:

Cabeça e Ombro em eventos gráficos reais

O que estou tentando fazer é: qualquer padrão semelhante à imagem 1 pode ser definido como padrão de cabeça e ombro, mas em um gráfico (gráfico de preços) não será tão claramente quanto a imagem 1. A imagem 2 é a amostra de cabeça e ombro Formulário de padrão no gráfico (gráfico de preços). Como parece na Imagem 2, não pode ser identificado como Padrão de Cabeça e Ombro por algoritmos ou análises normais (porque existem muitos altos e baixos formando muita estrutura, que podem facilmente enganar muitos ombros ou cabeça ou quaisquer outras estruturas). Espero treinar a máquina para reconhecer o padrão de cabeça e ombro quando um padrão semelhante (como na Figura 2) é formado.

Obrigado pelo seu tempo.

Deixe-me saber se estou tomando o caminho errado. Eu só tenho conhecimento para iniciantes em Machine Learning.

Suraj Neupane
fonte
11
Então você quer um classificador binário (de baixa vs. alta)? Entre
Emre
Minha intenção era reconhecer o padrão acima no gráfico. Os dados usados ​​no gráfico podem ser qualquer tipo de dado (por exemplo, dados do mercado de ações). Eu deveria ter usado uma imagem mais limpa do gráfico.
Suraj Neupane
@SurajNeupane A questão é um pouco incerta, por favor, elabore mais. com base no que você mencionou, acho que você pode criar recursos em uma janela móvel e tratá-lo como um problema de classificação supervisionado.
precisa saber é
Peço desculpas se eu te enganar. Eu elaborei mais sobre o assunto. Deixe-me saber se ainda não está claro, vou pensar em outra maneira de explicar.
Suraj Neupane

Respostas:

1

Estas são algumas sugestões que podem ser úteis.

  1. Os dados na curva são mais irregulares que as estradas do meu país. Então eu acho que você deve começar suavizando a curva. Existem muitos filtros de suavização, desde a suavização mediana mais simples aos modelos de regressão local, como LOESS . Existem alguns parâmetros para ajustar. Veja o exemplo.
  2. Encontrando o máximo local. O numpy do Python tem uma implementação para isso e isso deve ajudar.

Minha idéia é basicamente suavizar até você ter a cabeça e os ombros, ou seja, três máximos.

Aviso : A suavização, embora reduz a quantidade de ruído (não no sentido literal do ruído) na curva, tende a mudar a curva de sua posição original para representá-la.

Uma implementação de exemplo de Python será como

from statsmodels.nonparametric.smoothers_lowess import lowess
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
sample_points =  np.array([1,2.3,3.5,3,4.5,5,2.25,33.3,5,6.7,7.3,56.0,70.1,4.2,5.4,6.2,4.4,100,2.9,45,10,3.4,4.8,50,2.3,3.45,5.5,6.7,7.9,8.7,6.1])
for i in np.arange(0,0.5,0.05):
    # i in the loop is the percentage of data points we are inputing for the loess regression. Wiki atricle explains it, I guess
    filtered = lowess(sample_points,range(len(sample_points)), is_sorted=True, frac=i, it=0)
    maxima = argrelextrema(filtered[:,1], np.greater)
    if len(maxima[0]) == 3:
        plt.plot(filtered[:,1])
        plt.show()

Espero que isso dê a direção de onde você pode precisar de alguma verificação.

Kiritee Gak
fonte
sample_points = np.array([1,2.3,3.5,3,4.5,5,2.25,33.3,5,6.7,7.3,56.0,70.1,4.2,5.4,6.2,4.4,100,2.9,45,10,3.4,4.8,50,2.3,3.45,5.5,6.7,7.9,8.7,6.1]) plt.plot(lowess(sample_points,range(len(sample_points)), is_sorted=True, frac=0.2, it=0),'b-'); plt.show(); Isso está muito próximo do padrão. Eu queria treinar esse padrão para que, quando ele realmente aparecer no gráfico, seja reconhecido. Isso é possível ?
Suraj Neupane
@SurajNeupane Sim, isso pode ser feito pelo Dynamic Time Warping. Mas como não há um padrão específico em quando o ombro esquerdo e direito e eles podem ocorrer a qualquer momento da curva, sugeri encontrar o máximo após o alisamento.
Kiritee Gak
5

Você deve procurar um classificador com base na distância Dynamic Time Warping (DTW) . DTW é um método que calcula uma combinação ideal entre duas seqüências dadas (por exemplo, séries temporais). Ele foi usado em uma configuração de aprendizado supervisionado, em particular foi relatado que obteve resultados de última geração, quando usado em um classificador de vizinho mais próximo.

Dani Mesejo
fonte
2

Você já viu essa tese ? O autor usa o DTW para identificar uma coleção de padrões de gráficos.

Ray Ng
fonte
0

Parece que você pode imitar o padrão usando porcentagens. Qual a altura em que os dois ombros estão dentro do pico? (Cabeça) os dois ombros devem estar nivelados? Perfeito ou dê uma ligeira diferença, que diferença é essa? Encontrar a resposta pode vir depois de estudar gráficos para ver quais eram as porcentagens de padrões de sucesso. Então imitando isso.

Jonathan Holloway
fonte