欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → 【zzc_python】talib常用指标范例

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有8224人关注过本帖树形打印复制链接

主题:【zzc_python】talib常用指标范例

帅哥哟,离线,有人找我吗?
yukizzc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
【zzc_python】talib常用指标范例  发帖心情 Post By:2019/11/27 10:15:45 [只看该作者]

技术指标大家都知道,类似macd、布林带这些在软件中使用非常方便直接一个函数就能完成了。但是在python中大家可能找不到类似的函数
不过好在python的轮子非常多,在金融领域就有这样一个标准库叫TAlib集成了几乎所有你会使用到的那些基于k线分析的指标。
TAlib官网是全英的,另外他的函数列表可以看这个链接http://www.ta-lib.org/function.html。只有简单的说明

我这边会把一些平时可能用的多的指标在金字塔python下去进行复现并加上说明。
1、所有本贴列出的函数我都在金字塔图表上给进行对比,但因为计算机浮点计算误差的问题在python上得到的结果会和你图上看到的有小数位上的差异。
2、具体一些指标的算法还请参考pel里面都有现成的我就不赘述。

注意事项(踩过的坑)
一、Talib里面所有均线参数如果为1就会报错
c = np.arange(0,10,0.2)
a = talib.SMA(c,timeperiod=1)
解决方法是如果参数为1,就不求平均直接用原始数据
[此贴子已经被作者于2019/12/11 10:01:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:30:30 [只看该作者]

MACD
#num表示偏移量,-1就是当前最新,-2就是昨天的数值
num = -2
#获取数据,注意数据量我选择了200,主要是ema算法特殊性
close = history_bars('SQRB00',200,'1d','close',include_now=True) 
#参数:fastperiod和slowperiod是ema快线和慢线的对应周期,signalperiod是快慢线差值dea的周期
#返回值:三个返回值具体看图表上的指标,注意talib中返回的macd是(DIF-DEA),而国内软件都会乘以2,所以我们在使用时候需要自己*2来使得数值一样
dif, dea, macd = talib.MACD(close,fastperiod=12,slowperiod=26,signalperiod=9)
print((close[num],dif[num],dea[num],2*macd[num]))
[此贴子已经被作者于2019/11/27 10:40:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:32:48 [只看该作者]

均线类
#num表示偏移量,-1就是当前最新,-2就是昨天的数值
num = -2
close = history_bars('RB00',200,'1d','close',include_now=True)  
#ma简单移动平均
sma = talib.SMA(close,10)
print(sma[num])
#ema指数移动指标
ema = talib.EMA(close,10)
print(ema[num])
#wma加权移动平均
wma = talib.WMA(close,10)
print(wma[num])
[此贴子已经被作者于2019/11/27 10:40:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:35:11 [只看该作者]

布林带
#num表示偏移量,-1就是当前最新,-2就是昨天的数值
num = -2
close = history_bars('RB00',200,'1d','close',include_now=True)  
#timeperiod表示均线的周期,nbdevup表示上轨几个标准差,nbdevdn表示下跪几个标准差,matype=0表示用ma计算均线,matype=1表示用ema计算均线
#注意:talib中计算的标准差算法用的是stdp总体标准差,然国内软件里用的是std样本标准差。区别就是前者除以样本总数,后者除以样本总数 - 1
#所以如果想要自己实现和图表一样的布林线值只能自己写了,其中std的算法参考我后面的例子
upper, mid, lower = talib.BBANDS(close,timeperiod=26,nbdevup=2,nbdevdn=2,matype=0)
print((mid[num],upper[num],lower[num]))

#这里给出两种标准差的python实现,如果想自己实现国内的那种标准差就用std这个。
close2 = history_bars('RB00',26,'1d','close',include_now=True)  
mean = np.array(close).mean()
stdp = np.sqrt((1/(len(close)))*np.sum((np.array(close) - mean)**2))
std = np.sqrt((1/(len(close)-1))*np.sum((np.array(close) - mean)**2))
print((stdp,std))
[此贴子已经被作者于2019/11/27 12:30:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:36:09 [只看该作者]

SAR

#talib里的sar算出来的值和图表上看数值的差异不小,不过好在我对比了好几个软件数值上都差的蛮多的,这里python算来的序列数据从趋势涨跌来看还是吻合的。
#建议使用前自己对比下再
num = -1
# 在context中保存全局变量
high = history_bars('RB00',100,'1d','high',include_now=True)  
low = history_bars('RB00',100,'1d','low',include_now=True) 
#acceleration表示步长,maximum表示极限值
sar = talib.SAR(high,low,acceleration=0.02, maximum=0.2)
print(sar)
[此贴子已经被作者于2019/11/27 15:03:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:42:01 [只看该作者]

RSI强弱指标
num = -1
close = history_bars('RB00',100,'1d','close',include_now=True)   
#就一个周期参数就行了
rsi = talib.RSI(close,timeperiod=6)
print(rsi[num])

威廉指标

num = -1
close = history_bars('RB00',100,'1d','close',include_now=True) 
high = history_bars('RB00',100,'1d','high',include_now=True)  
low = history_bars('RB00',100,'1d','low',include_now=True)   
will = talib.WILLR(high,low,close,timeperiod=14)
print(will[num])

TRIX三重指数平均

num = -1
close = history_bars('RB00',100,'1d','close',include_now=True) 
trix = talib.TRIX(close,timeperiod=12)
print(trix[num])

TR真实波幅

num = -1
close = history_bars('RB00',100,'1d','close',include_now=True) 
high = history_bars('RB00',100,'1d','high',include_now=True)  
low = history_bars('RB00',100,'1d','low',include_now=True)   
tr = talib.TRANGE(high,low,close)
print(tr)
#tr的均值就是我们常用的atr指标。talib自带的有atr不过计算出来的值和图表不对,所以我这里计算tr然后均值得到的就一样了
print(talib.SMA(tr,14))

[此贴子已经被作者于2019/11/27 22:20:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:43:09 [只看该作者]

KDJ
num = -1
close = history_bars('RB00',100,'1d','close',include_now=True) 
high = history_bars('RB00',100,'1d','high',include_now=True)  
low = history_bars('RB00',100,'1d','low',include_now=True)  
#talib中算法matype=0用的是简单平均,国内软件都用的是sma计算,所以会有出入
k,d = talib.STOCH(high,low,close,fastk_period=9,slowk_period=3,slowk_matype=0,slowd_period=3,slowd_matype=0)
print(k)
print(d)

[此贴子已经被作者于2019/11/28 13:16:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:44:55 [只看该作者]

预留

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/11/27 10:48:49 [只看该作者]

预留

 回到顶部