你好,德米特里
我安装了所有的库,但是当我尝试运行这个 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()
感谢帮助
罗杰里奥
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.org
- ta-lib.org
新文章 神经网络变得轻松(第十四部分):数据聚类已发布:
我的上一篇文章已经发表一年多了。 这令我有了大量时间考虑修改思路和发展新方法。 在这篇新文章中,我想转移一下以前使用的监督学习方法。 这次我们将深入研究无监督学习算法。 特别是,我们将考虑一种聚类算法 — k-均值。
如您所见,无监督学习算法可用于解决各种问题。 但如何在交易中运用它们呢? 我们来思考一下。 图形分析方法几乎总是涉及某些图表形态:双顶/双底、头和肩、旗帜、各种谐波形态、等等。 甚而,还有许多由 1-3 根烛条组成的较小形态。 但是当我们试图用数学语言描述一个特定的形态时,我们必须处理大量的约定和冗余。 这令在算法交易中运用它们复杂化。 即使当交易者人工判定了形态,也有很多主观性。 这就是为什么在分析同一张图表时,不同的交易者从图表上识别出的形态,往往具有相反的预测走势方向。 好吧,也许这才是整个交易的底层规则。 有些境况下人盈利,其它则亏损。 在交易过程中,并未创造新的商品资料价值,且其中货币供应量保持不变。 它只能从一个钱包转移到另一个钱包。 那么,我们如何避免亏损呢?
我们再次看看上面提到的图表形态。 是的,它们都有各自的变体。 但与此同时,每种形态都有自己的特定结构,它的辨识度与一般价格走势图表区别明显。 那么,如果我们采用无监督数据聚类算法,令模型识别特定时间周期内数据中所有可能的变化,那会怎么样呢。 由于我们采用无监督学习,因此不需要标记数据,而且时间周期可能相当长。 然而,不要忘记,历史时间周期的增加亦会令模型训练成本增加。
作者:Dmitriy Gizlyk