Обсуждение статьи "Нейросети — это просто (Часть 14): Кластеризация данных"

 

Опубликована статья Нейросети — это просто (Часть 14): Кластеризация данных:

Должен признаться, что с момента публикации последней статьи прошло уже больше года. За столь длительное время можно многое переосмыслить, выработать новые подходы. И в новой статье я хотел бы немного отойти от используемого ранее метода обучения с учителем, и предложить немного окунуться в алгоритмы обучения без учителя. И, в частности, рассмотреть один из алгоритмов кластеризации — k-средних.

Как видите, алгоритмы обучения без учителя позволяют решать различные задачи. Но каким образом мы сможем использовать их в своей торговле? Давайте подумаем. При использовании методов графического анализа мы практически всегда говорим о тех или иных графических паттернах: двойная вершина / двойное дно, голова-плечи, флаг, различные гармонические паттерны и т.д. Есть и более мелкие свечные паттерны, состоящие из 1-3 свечей. И, практически всегда, при попытке описания того или иного паттерна математическим языком мы сталкиваемся с большим количеством условностей и допусков. Что усложняет их использование в алготрейдинге. Надо сказать, что и при определении паттернов трейдером-человеком много субъективизма. Именно поэтому, анализируя один и тот же график различные трейдеры находят на нём различные паттерны, часто имеющие противоположную направленность прогнозного движения. Да, я согласен, на этом и построена вся система торговли. Кто-то получил прибыль, а кто-то убыток. В процессе торговли новые товарно-материальные ценности не создавались, и денежная масса осталась неизменной. Она лишь перекочевала из одного кошелька в другой. Но как нам не остаться в убытке?

Паттерн Голова-Плечи

Давайте посмотрим ещё раз на упомянутые выше графические паттерны. Да, все они имеют свои допуски. Но вместе с тем, каждый паттерн имеет свою определённую структуру, которая выделяет его из общего графика движения цены. А что, если мы воспользуемся алгоритмами кластеризации данных без учителя и поручим модели выделить все возможные вариации данных на некотором временном отрезке. Так как мы используем обучение без учителя, то нам не надо производить разметку данных и временной отрезок может быть довольно большим. Разумеется, мы должны помнить, что с увеличением временного отрезка истории растут и затраты на обучение модели.

Автор: Dmitriy Gizlyk

 
Эта статья - то, что я искал.
 

Здравствуйте Дмитрий

Я установил все библиотеки, но когда я пытаюсь запустить эту программу на python, я получаю эту ошибку:


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

Traceback (последний последний вызов):

Файл "C:\Users\rogerio\sem título1.py", строка 20, in <module>.

rsi=tl.RSI(rates['close'])

TypeError: 'NoneType' object is not subscriptable


Я использую этот исходный код


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

# Модель кластеризации данных #

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

# Импорт библиотек

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


# Подключитесь к терминалу MetaTrader 5

if not mt5.initialize():

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

quit()

# Загрузка котировок

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

mt5.shutdown()

# Рассчитываем значения индикаторов

rsi=tl.RSI(rates['close'])

cci=tl.CCI(rates['high'],rates['low'],rates['close'])

macd,macdsignal,macdhist=tl.MACD(rates['close'])


# Группируем обучающую выборку

data=np.array([rates['close']-rates['open'],rates['high']-rates['close'],rates['close']-rates['low'],rsi,cci,macd,macdsignal,macdhist]).T

s=data.shape[0]

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


# Выполните кластеризацию с различным количеством кластеров

R=range(50,1000,50)

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

distance = (k.transform(data) for k in KM)

dist = (np.min(D, axis=1) для D в distance)

avgWithinSS = [sum(d) / data.shape[0] for d in dist]

# Отображение результатов обучения модели

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Динамика потерь')

# Отображение сгенерированных графиков

plt.show()


Спасибо за помощь

Роджерио

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

mt5.shutdown()

# Рассчитать значения индикатора

rsi=tl.RSI(rates['close'])

cci=tl.CCI(rates['high'],rates['low'],rates['close'])

macd,macdsignal,macdhist=tl.MACD(rates['close'])


# Сгруппируйте обучающую выборку

data=np.array([rates['close']-rates['open'],rates['high']-rates['close'],rates['close']-rates['low'],rsi,cci,macd,macdsignal,macdhist]).T

s=data.shape[0]

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


# Выполните кластеризацию с другим количеством кластеров

R=range(50,1000,50)

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

distance=(k.transform(data) for k in KM)

dist = (np.min(D, axis=1) для D в distance)

avgWithinSS = [sum(d) / data.shape[0] for d in dist]

# Отображение результатов обучения модели

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Динамика потерь')

# Отображение сгенерированных графиков

plt.show()


Спасибо за помощь

Рожерио

Здравствуйте, Роджерио.
У вас установлена
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