百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

【手把手教你】股市技术分析利器之TA-Lib(二)

toyiye 2024-06-21 12:40 22 浏览 0 评论

不进行研究的投资,就像打扑克从来不看牌一样,必然失败——彼得·林奇

引言

TA-Lib,全称“Technical Analysis Library”, 即技术分析库,是Python金融量化的高级库,涵盖了150多种股票、期货交易软件中常用的技术分析指标,如MACD、RSI、KDJ、动量指标、布林带等等。TA-Lib可分为10个子板块:Overlap Studies(重叠指标),Momentum Indicators(动量指标),Volume Indicators(交易量指标),Cycle Indicators(周期指标),Price Transform(价格变换),Volatility Indicators(波动率指标),Pattern Recognition(模式识别),Statistic Functions(统计函数),Math Transform(数学变换)和Math Operators(数学运算),见下图。【手把手教你】股市技术分析利器之TA-Lib(一),主要探讨了重叠指标的相关原理与Python实现,本文将着重介绍TA-Lib中强大的数学运算、数学变换、统计函数、价格变换、周期指标和波动率指标函数及其应用实例。

安装与使用

安装:在cmd上使用“pip install talib”命令一般会报错,正确安装方法是,进入https://www.lfd.uci.edu/~gohlke/pythonlibs/,下拉选择TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl(win系统64位,python3.7版本,根据自己系统和python版本选择相应的安装包),将下载包放在当前工作路径中,然后在Anaconda Prompt(或windows的cmd)里面输入命令:pip install TA_Lib-0.4.17-cp27-cp27m-win_amd64.whl。

使用:import talib as ta

01 Price Transform 价格转换

TA-Lib模块中提供的价格转换函数有四个,主要用于计算开盘价、收盘价、最高价、最低价之间的均值,具体如下表所示。

#先引入后面可能用到的包(package)
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline 
#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#引入TA-Lib库
import talib as ta
#获取交易数据用于示例分析
import tushare as ts
def get_data(code,start='2015-01-01'):
 df=ts.get_k_data(code,start)
 df.index=pd.to_datetime(df.date)
 df=df.sort_index()
 return df
#获取上证指数收盘价、最高、最低价格
df=get_data('sh')[['open','close','high','low']]
#开盘价,最高价,最低价,收盘价的均值
df['average']=ta.AVGPRICE(df.open,df.high,df.low,df.close)
#最高价,最低价的均值
df['median']=ta.MEDPRICE(df.high,df.low)
#最高价,最低价,收盘价的均值
df['typical']=ta.TYPPRICE(df.high,df.low,df.close)
#最高价,最低价,收盘价的加权
df['weight']=ta.WCLPRICE(df.high,df.low,df.close)
df.head()
df.loc['2019-01-08':,['close','average','median','typical','weight']].plot(figsize=(12,6))
ax = plt.gca() 
ax.spines['right'].set_color('none') 
ax.spines['top'].set_color('none') 
plt.title('上证指数及其价格转换',fontsize=15)
plt.xlabel('')
plt.show()


02 Cycle Indicator Functions周期指标函数

希尔伯特变换(Hilbert Transform)是积分变换中的一种,在信号处理领域得到了广泛的应用,而在工程中常用于窄带数字信号的处理。金融市场的波动是非周期、不规律的,但只要存在波动,就可以通过希尔伯特变换寻找其“周期性”。对于股价走势,一般可将其分解为:长期趋势、中短期周期性波动和噪声。在去除长期趋势的情况下,可以利用希尔伯特变换对中短期的周期性波动进行分析。关于希尔伯特变换原理及其在短线择时中的应用可参考广发证券金融工程专题报告《希尔伯特变换下的短线择时策略》(公众号Python金融量化后台回复:“希尔伯特”,获取免费下载地址)

df=get_data('sh')[['open','close','high','low']]
df['dcperiod']=ta.HT_DCPERIOD(df.close)
df['dcphase']=ta.HT_DCPHASE(df.close)
df['inhpase'],df['quadrature']=ta.HT_PHASOR(df.close)
df['sine'],df['leadsine']=sine, leadsine = ta.HT_SINE(df.close)
df['trendmode']=ta.HT_TRENDMODE(df.close)
#将上述函数计算得到的结果进行可视化
df[['close','dcperiod','dcphase','inhpase','quadrature','sine','leadsine','trendmode']].plot(figsize=(20,18),
 subplots = True,layout=(4, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)

上证指数走势及其周期变换

03 Volatility Indicator Functions 波动率指标函数

当前交易日最高价与最低价差值,前一交易日收盘价与当前交易日最高价间的差值,前一交易日收盘价与当前交易日最低价的差值,这三者中的最大值为真实波幅。即真实波动幅度 = max(最大值,昨日收盘价) ? min(最小值,昨日收盘价),平均真实波动幅度等于真实波动幅度的N日指数移动平均数。波动幅度可以显示出交易者的期望和热情。波动幅度的急剧增加表示交易者在当天可能准备持续买进或卖出股票,波动幅度的减少则表示交易者对股市没有太大的兴趣。波动率指标可用于衡量价格的波动情况,辅助判断趋势改变的可能性,市场的交易氛围,也可以利用波动性指标来帮助止损止盈

df=get_data('sh')[['open','close','high','low']]
df['atr']=ta.ATR(df.high, df.low, df.close, timeperiod=14)
df['natr']=ta.NATR(df.high, df.low, df.close, timeperiod=14)
df['trange']=ta.TRANGE(df.high, df.low, df.close)
df.tail()

上证指数走势及波动率指标

04 Math Operator Functions数学运算

TA-Lib提供了向量(数组)的加减乘除、在某个周期内求和、最大最小值及其索引等计算函数,注意与Numpy和Pandas数学运算函数的联系与区别,TA-Lib的向量计算功能类似于pandas的moving window(移动窗口),得到的是一个新的序列(不是某个值),具体如下表所示。

df=get_data('sh')[['open','close','high','low']]
#最高价与最低价之和
df['add']=ta.ADD(df.high,df.low)
#最高价与最低价之差
df['sub']=ta.SUB(df.high,df.low)
#最高价与最低价之乘
df['mult']=ta.MULT(df.high,df.low)
#最高价与最低价之除
df['div']=ta.DIV(df.high,df.low)
#收盘价的每30日移动求和
df['sum']=ta.SUM(df.close, timeperiod=30)
#收盘价的每30日内的最大最小值
df['min'], df['max'] = ta.MINMAX(df.close, timeperiod=30)
#收盘价的每30日内的最大最小值对应的索引值(第N行)
df['minidx'], df['maxidx'] = ta.MINMAXINDEX(df.close, timeperiod=30)
df.tail()
#将上述函数计算得到的结果进行可视化
df[['close','add','sub','mult','div','sum','min','max']].plot(figsize=(20,18),
 subplots = True,
 layout=(4, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)

上证指数走势及数学运算

05 Statistic Functions 统计学函数

TA-Lib提供了常用的基础统计学函数,基于时间序列移动窗口进行计算。注意TA-Lib的beta,示例中是求某只股票的最高价与最低价序列的移动beta值,默认时间周期为5日,而资本资产定价中一般是分析某只股票相对于市场(大盘指数)的波动情况。具体指标如下表所示。

df=get_data('sh')[['open','close','high','low']]
#收盘价对时间t的线性回归预测值
df['linearreg']=ta.LINEARREG(df.close, timeperiod=14)
#时间序列预测值
df['tsf']=ta.TSF(df.close, timeperiod=14)
#画图
df.loc['2018-08-01':,['close','linearreg','tsf']].plot(figsize=(12,6))

df['beta']=ta.BETA(df.high,df.low,timeperiod=5)
df['correl']=ta.CORREL(df.high, df.low, timeperiod=30)
df['stdev']=ta.STDDEV(df.close, timeperiod=5, nbdev=1)
#将上述函数计算得到的结果进行可视化
df[['close','beta','correl','stdev']].plot(figsize=(18,8),
 subplots = True,layout=(2, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)

06 Math Transform Functions数学转换函数

TA-Lib提供了三角函数(正余弦、正余切、双曲)、取整、对数、平方根等数学转换函数,均是基于时间序列的向量变换。三角函数的应用比较复杂,可结合傅里叶变换和小波分析进行学习,此处不再详细展开。具体指标如下表所示。

df=get_data('sh')[['open','close','high','low']]
df['sin']=ta.SIN(df.close)
df['cos']=ta.COS(df.close)
df['ln']=ta.LN(df.close)
#将上述函数计算得到的结果进行可视化
df[['close','sin','cos','ln']].plot(figsize=(18,8),
 subplots = True,layout=(2, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)

关于Python金融量化

专注于分享Python在金融领域的应用。加入知识星球,免费获取30多g的量化投资学习视频、公众号文章Python完整源码,与博主直接交流经济金融前沿分析框架等。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码