文章 "神经网络变得轻松(第十四部分):数据聚类"

 

新文章 神经网络变得轻松(第十四部分):数据聚类已发布:

我的上一篇文章已经发表一年多了。 这令我有了大量时间考虑修改思路和发展新方法。 在这篇新文章中,我想转移一下以前使用的监督学习方法。 这次我们将深入研究无监督学习算法。 特别是,我们将考虑一种聚类算法 — k-均值。

如您所见,无监督学习算法可用于解决各种问题。 但如何在交易中运用它们呢? 我们来思考一下。 图形分析方法几乎总是涉及某些图表形态:双顶/双底、头和肩、旗帜、各种谐波形态、等等。 甚而,还有许多由 1-3 根烛条组成的较小形态。 但是当我们试图用数学语言描述一个特定的形态时,我们必须处理大量的约定和冗余。 这令在算法交易中运用它们复杂化。 即使当交易者人工判定了形态,也有很多主观性。 这就是为什么在分析同一张图表时,不同的交易者从图表上识别出的形态,往往具有相反的预测走势方向。 好吧,也许这才是整个交易的底层规则。 有些境况下人盈利,其它则亏损。 在交易过程中,并未创造新的商品资料价值,且其中货币供应量保持不变。 它只能从一个钱包转移到另一个钱包。 那么,我们如何避免亏损呢?

头和肩形态

我们再次看看上面提到的图表形态。 是的,它们都有各自的变体。 但与此同时,每种形态都有自己的特定结构,它的辨识度与一般价格走势图表区别明显。 那么,如果我们采用无监督数据聚类算法,令模型识别特定时间周期内数据中所有可能的变化,那会怎么样呢。 由于我们采用无监督学习,因此不需要标记数据,而且时间周期可能相当长。 然而,不要忘记,历史时间周期的增加亦会令模型训练成本增加。

作者:Dmitriy Gizlyk

 
这篇文章正是我要找的。
 

你好,德米特里

我安装了所有的库,但是当我尝试运行这个 python 程序时,却出现了这个错误:


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

Traceback (most recent call last):

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

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

TypeError: 'NoneType' 对象不可下标


我正在使用以下源代码


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

# 数据聚类模型 #

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

# 导入库

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) for D in distance)

avgWithinSS = [sum(d) / data.shape[0] for d in dist]] # 绘制模型训练结果

# 绘制模型训练结果

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Loss dynamic')

# 显示生成的图表

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) for D in distance)

avgWithinSS = [sum(d) / data.shape[0] for dist 中的 d]] (np.min(D), axis=1)

# 绘制模型训练结果

plt.plot(R, avgWithinSS)

plt.xlabel('$Clasters$')

plt.title('Loss dynamic')

# 显示生成的图表

plt.show()


感谢帮助

罗杰里奥

您好,Rogerio。
您是否安装了
TA-Lib:技术分析库

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