Discusión sobre el artículo "Redes neuronales: así de sencillo (Parte 14): Clusterización de datos"

 

Artículo publicado Redes neuronales: así de sencillo (Parte 14): Clusterización de datos:

Lo confieso: ha pasado más de un año desde que publiqué el último artículo. En tanto tiempo, me ha sido posible repensar mucho, desarrollar nuevos enfoques. Y en este nuevo artículo, me gustaría alejarme un poco del método anteriormente usado de aprendizaje supervisado, y sugerir una pequeña inmersión en los algoritmos de aprendizaje no supervisado. En particular, vamos a analizar uno de los algoritmos de clusterización, las k-medias.

Como podemos ver, los algoritmos de aprendizaje no supervisado permiten resolver diferentes problemas. Sin embargo, ¿cómo podemos utilizarlos en nuestro comercio? Vamos a pensar en ello. Al usar técnicas de análisis gráfico, casi siempre se habla de uno u otro patrón gráfico: pico doble/valle doble, cabeza y hombros, bandera, diversos patrones armónicos, etc. También hay patrones de velas más pequeños que contienen de 1 a 3 velas. Y, casi siempre, a la hora de intentar describir un patrón en términos matemáticos, nos enfrentamos a un gran número de convenciones y suposiciones. Esto complica su uso en el trading algorítmico. Hay que decir que también existe mucha subjetividad en la determinación de los patrones por parte del tráder humano. Por eso, al analizar el mismo gráfico, diferentes tráders encuentran en él patrones distintos, a menudo con la dirección opuesta del movimiento previsto. Sí, estoy de acuerdo, en eso se basa todo el sistema comercial. Algunos logran beneficios, y otros, pérdidas. Durante el comercio, no se crean nuevos valores, y la oferta monetaria se mantiene sin cambios. Solo ha pasado de un bolsillo a otro. Pero, ¿cómo no quedarnos con la boca abierta?

Patrón cabeza-hombros

Volvamos a ver los patrones gráficos que hemos mencionados anteriormente. Sí, todos tienen su nivel de tolerancia. Pero al mismo tiempo, cada patrón posee su propia estructura específica que lo distingue del gráfico general de movimiento de precios. ¿Qué pasaría si usáramos algoritmos de clusterización de datos no supervisados y ordenáramos al modelo que identificara todas las posibles variaciones de los datos durante un cierto periodo de tiempo? Como utilizamos el aprendizaje no supervisado, no necesitamos marcar los datos y el periodo de tiempo puede ser bastante largo. Obviamente, deberemos recordar que, a medida que aumenta el horizonte temporal de la historia, también lo hacen los costes de entrenamiento del modelo.

Autor: Dmitriy Gizlyk

 
Este artículo es lo que estaba buscando.
 

Hola Dmitriy

Instale todas las librerias pero cuando intento ejecutar este rograma python me da este error:


runfile('C:/Usuarios/rogerio/ título1.py', wdir='C:/Usuarios/rogerio')

Traceback (most recent call last):

File "C:/Users/rogerio/ título1.py", line 20, in <module>.

rsi=tl.RSI(tipos['cierre'])

TypeError: El objeto 'NoneType' no es subscriptible


Estoy usando este código fuente


# -------------------------------------------------------#

# Modelo de agrupación de datos #

# -------------------------------------------------------#

# Bibliotecas de importación

import numpy as np

import matplotlib.pyplot as plt

import MetaTrader5 as mt5

from talib import abstract as tl

import sklearn.cluster as cluster

from datetime import datetime as dt


# Conectar al terminal MetaTrader 5

if not mt5.initialize():

print("initialize() failed, error code =",mt5.last_error())

quit()

# Descarga de cotizaciones

rates=mt5.copy_rates_range('EURUSD',mt5.TIMEFRAME_H1,dt(2006,1,1),dt(2022,1,1))

mt5.shutdown()

# Calcular los valores de los indicadores

rsi=tl.RSI(tipos['cierre'])

cci=tl.CCI(tipos['alto'],tipos['bajo'],tipos['cierre'])

macd,macdsignal,macdhist=tl.MACD(tipos['cierre'])


# Agrupar la muestra de entrenamiento

data=np.array([tipos['cierre']-tipos['apertura'],tipos['alto']-tipos['cierre'],tipos['cierre']-tipos['bajo'],rsi,cci,macd,macdsignal,macdhist]).T

s=datos.forma[0]

data=np.hstack([data[40+k:s-20+k] for k in range(0,20)])


# Realizar el clustering con un número diferente de clusters

R=rango(50,1000,50)

KM = (cluster.KMeans(n_clusters=k).fit(data) for k in R)

distancia=(k.transformar(datos) para k en KM)

dist = (np.min(D, axis=1) for D in distance)

avgWithinSS = [suma(d) / datos.forma[0] para d en distancia].

# Trazado de los resultados de entrenamiento del modelo

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Dinámica de pérdidas')

# Mostrar los gráficos generados

plt.show()


Gracias por la ayuda

Rogerio

 
MrRogerioNeri .copy_rates_range('EURUSD',mt5.TIMEFRAME_H1,dt(2006,1,1),dt(2022,1,1))

mt5.shutdown()

# Calcular los valores de los indicadores

rsi=tl.RSI(tipos['cierre'])

cci=tl.CCI(tipos['alto'],tipos['bajo'],tipos['cierre'])

macd,macdsignal,macdhist=tl.MACD(tipos['cierre'])


# Agrupar la muestra de entrenamiento

data=np.array([tipos['cierre']-tipos['apertura'],tipos['alto']-tipos['cierre'],tipos['cierre']-tipos['bajo'],rsi,cci,macd,macdsignal,macdhist]).T

s=datos.shape[0]

data=np.hstack([data[40+k:s-20+k] for k in range(0,20)])


# Realizar el clustering con un número diferente de clusters

R=rango(50,1000,50)

KM = (cluster.KMeans(n_clusters=k).fit(data) for k in R)

distancia=(k.transformar(datos) para k en KM)

dist = (np.min(D, axis=1) for D in distance)

avgWithinSS = [suma(d) / datos.forma[0] para d en distancia].

# Trazar los resultados de entrenamiento del modelo

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Dinámica de pérdidas')

# Visualizar los gráficos generados

plt.show()


Gracias por la ayuda

Rogerio

Hola Rogerio.
¿Tienes instalado
TA-Lib : Technical Analysis Library?

TA-Lib : Technical Analysis Library - Home
  • TA-LIB.org
  • ta-lib.org
Technical analysis open-source software library to process financial data. Provides RSI, MACD, Stochastic, moving average... Works with Excel, C/C++, Java, Perl, Python and .NET