【量化】股市技术分析利器之TA-Lib(二)
作者:未来大佬
来源: 恒生LIGHT云社区
上篇文章 【量化】股市技术分析利器之TA-Lib(一) ,主要介绍了Ta-lib的基础知识与绘制布林线,本文将着重介绍TA-Lib中强大的价格转换、周期指标、波动率指标函数、数学运算、统计函数和数学转换及其应用实例。
1、Price Transform 价格转换
TA-Lib模块中提供的价格转换函数有四个,主要用于计算开盘价、收盘价、最高价、最低价之间的均值,具体如下表所示。
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
AVGPRICE | Average Price | 平均价格函数 | AVGPRICE(open,high,low,close) |
MEDPRICE | Median Price | 中位数价格 | MEDPRICE(high,low) |
TYPPRICE | Typical Price | 代表性价格 | TYPPRICE(high,low,close) |
WCLPRICE | Weighted Close Price | 加权收盘价 | WCLPRICE(high,low,close) |
下面使用演示这些函数的调用,并且绘图
首先我们还是使用恒有数作为数据源(主页: https://udata.hs.net/home,使用方法:https://developer.hs.net/thread/1502),获取数据后保存到文件
import talib
import hs_udata as hs
import datetime
import time
import talib
import pandas as pd
import openpyxl#获取一段时间的股票日行情数据
def Get_stock_quote_daily(stocklist,datelist):#单次获取股票代码数量stock_num = 500#变量初始化data_i = []for Date_i in datelist['trading_date'].to_list():#开始计时t1 = time.time()#对股票列表进行循环for i in range(0,len(stocklist),stock_num):list_i=','.join(stocklist[i:i+stock_num])#获取日行情数据,接口说明见 https://udata.hs.net/datas/332/#adjust_way枚举值为:0-不复权,1-前复权,2-后复权,此处取前复权data_i.append(hs.stock_quote_daily(en_prod_code=list_i,trading_date=Date_i,adjust_way = 1))t2 = time.time()# 结束计时#打印耗时print("{0}日行情数据,耗时为:{1}秒".format(Date_i,round(t2-t1,4)))#拼接各段行情数据data = pd.concat(data_i, ignore_index=True)return dataif __name__ == '__main__':#设置Token,注册后,获取并替换tokenhs.set_token(token='SXt-DJbOiOxA5C-GXyzwaTehKvr41T564D8AQ1cgw5ZRW-gZTB_KIerid4U9Oy3S')#获取股票列表stocklist = ['600570.SH']#下载2021-01-01~2021-11-23 的股票日行情数据start='2021-01-01'end ='2021-11-23'#获取时间区间内,secu_market=83-沪深证券交易所交易日列表datelist = hs.trading_calendar(secu_market='83',start_date=start,end_date=end,if_trading_day='1',fields='trading_date')#调用函数data = Get_stock_quote_daily(stocklist,datelist)#导出Excel文件,方便后续本地快速调试data.to_excel('股票日行情{0}-{1}.xlsx'.format(start, end))print('下载数据条数为:{0}'.format(len(data)))print(data.head())
将获取到的数据筛选出开盘价,收盘价等数据,存为df,后续测试都是基于该df进行。
import pandas as pddef dealData():# 获取上证指数收盘价、最高、最低价格data = pd.read_excel("股票日行情2021-01-01-2021-11-23.xlsx")# 剔除非交易日data = data.loc[data.turnover_status == '交易']# 选取日期、高开低收价格、成交量数据df = data[['trading_date', 'open_price', 'high_price', 'low_price', 'close_price', 'business_amount']]# 更换列名,为后面函数变量做准备df = df.rename(columns={'trading_date': 'Date', 'open_price': 'Open', 'close_price': 'Close', 'high_price': 'High','low_price': 'Low', 'business_amount': 'Volume'})# 设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。df.set_index('Date', inplace=True)# 将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。df.index = pd.DatetimeIndex(df.index)df = df.sort_index(ascending=True)return df
使用函数并绘图示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 正常显示画图时出现的中文和负号
from pylab import mpl
# 引入TA-Lib库
import talib as tampl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = Falsedef doTest(df):# 开盘价,最高价,最低价,收盘价的均值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['2020-01-04':, ['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()
2、Cycle Indicator Functions周期指标函数
希尔伯特变换(Hilbert Transform)是积分变换中的一种,在信号处理领域得到了广泛的应用,而在工程中常用于窄带数字信号的处理。金融市场的波动是非周期、不规律的,但只要存在波动,就可以通过希尔伯特变换寻找其“周期性”。对于股价走势,一般可将其分解为:长期趋势、中短期周期性波动和噪声。在去除长期趋势的情况下,可以利用希尔伯特变换对中短期的周期性波动进行分析。关于希尔伯特变换原理及其在短线择时中的应用可参考广发证券金融工程专题报告《希尔伯特变换下的短线择时策略》
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
HT_DC PERIOD | Hilbert Transform-Dominant Cycle Period | 主导周期 | HT_DCPERIOD(close) , 计算价格的周期位置,用作择时的依据。 |
HT_DC PHASE | Hilbert Transform-Dominant Cycle Phase | 主导循环阶段 | HT_DCPHASE(close) |
HT_PHASOR | Hilbert Transform一PhasorComponents | 相位构成 | inphase,quadrature=HT_PHASOR(close) , 分解为同相分量和正交分量 |
HT_SINE | Hilbert Transform-SineWave | 正弦波 | sine,leadsine=HT_SINE(close) |
HT_TREND MODE | Hilbert Transform-Trend vs CycleMode | 趋势与周期模式 | HT_TRENDMODE(close) |
使用函数并绘图示例
def doTest(df):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'] = 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)plt.show()
3、Volatility Indicator Functions 波动率指标
当前交易日最高价与最低价差值,前一交易日收盘价与当前交易日最高价间的差值,前一交易日收盘价与当前交易日最低价的差值,这三者中的最大值为真实波幅。即真实波动幅度 = max(最大值,昨日收盘价) − min(最小值,昨日收盘价),平均真实波动幅度等于真实波动幅度的N日指数移动平均数。波动幅度可以显示出交易者的期望和热情。波动幅度的急剧增加表示交易者在当天可能准备持续买进或卖出股票,波动幅度的减少则表示交易者对股市没有太大的兴趣。波动率指标可用于衡量价格的波动情况,辅助判断趋势改变的可能性,市场的交易氛围,也可以利用波动性指标来帮助止损止盈。
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
ATR | Average True Range | 平均真实波动幅度 | ATR(high, low, close, timeperiod=14) |
NATR | Normalized Average True Range | 归一化的平均真实波动 幅度 | NATR(high, low, close, timeperiod=14) |
TRANGE | True Range | 真实波动幅度 | TRANGE(high, low, close) |
使用函数并绘图示例
def doTest(df):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[['Close', 'atr', 'natr', 'trange']].plot(figsize=(20, 18), subplots=True, layout=(4, 2))plt.subplots_adjust(wspace=0, hspace=0.2)plt.show()
4、Math Operator Functions数学运算
TA-Lib提供了向量(数组)的加减乘除、在某个周期内求和、最大最小值及其索引等计算函数,注意与Numpy和Pandas数学运算函数的联系与区别,TA-Lib的向量计算功能类似于pandas的moving window(移动窗口),得到的是一个新的序列(不是某个值)
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
ADD | Vector Arithmetic Add | 向量加法运算 | ADD(high, low) |
SUB | Vector Arithmetic Substraction | 向量减法运算 | SUB(high, low) |
MULT | Vector Arithmetic Mult | 向量乘法运算 | MULT(high, low) |
DIV | Vector Arithmetic Div | 向量除法运算 | DIV(high, low) |
SUM | Summation | 周期内求和 | SUM(close, timeperiod=30) |
MAX | Highest value over a specified period | 周期内最大值 | MAX(close, timeperiod=30) |
MAXINDEX | Index of highest value over a specified period | 周期内最大值的索引 | MAXINDEX(close, timeperiod=30) |
MIN | Lowest value over a specified period | 周期内最小值 | MIN(close, timeperiod=30) |
MININDEX | Index of lowest value over a specified period | 周期内最小值的索引 | MININDEX(close, timeperiod=30) |
MINMAX | Lowest and hi ghest values over a specified period | 周期内最小值和最大值 | min,max=MINMAX(close, timeperiod=30) |
MINMAXINDEX | Indexes of lowest and highest values over a specified period | 周期内最小值和最大值索引 | minidx,maxidx =MINMAXINDEX(close, timeperiod=30) |
使用函数并绘图示例
def doTest(df):# 最高价与最低价之和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)plt.show()
5、Statistic Functions 统计学函数
TA-Lib提供了常用的基础统计学函数,基于时间序列移动窗口进行计算。注意TA-Lib的beta,示例中是求某只股票的最高价与最低价序列的移动beta值,默认时间周期为5日,而资本资产定价中一般是分析某只股票相对于市场(大盘指数)的波动情况。
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
BETA | Beta Coefficient - Capital Asset Pricing Model (CAPM) | 资本资产定价模型里的系数 | BETA(high, 1ow, timeperiod=5), 求两个序列的移动beta值(回归分析) |
CORREL | Pearson's Correlation Coefficient (r) | 皮尔逊相关系数 | CORREL (high, 1ow, timeperiod=30) |
LINEARREG | Linear Regression | 线性回归 | LINEARREG(close, timeperiod=14), 收盘价序列对时间t的线性回归,并输出预测值 |
LINEARREG_ A NGLE | Linear Regression Angle | 线性回归斜率的正切角 度 | LINEARREG_ ANGLE(close, timeperiod=14) 收盘价序列对时间t回归斜率的正切角度 |
LINEARREG_ I NTERCEPT | Linear Regression Intercept | 线性回归截距 | LINEARREG INTERCEPT(close, timeperiod=14) |
LINEARREG_ S LOPE | Linear Regression S1ope | 线性回归斜率 | LINEARREG_ SLOPE(close, timeperiod=14) |
STDDEV | Standard Deviation | 标准差 | STDDEV(close, timeperiod=5, nbdev=1), 默认每5个收盘价计算标准差 |
TSF | Time Series Forecast | 时间序列预测 | TSF (close, timeperiod=14) |
VAR | Variance | 方差 | VAR(close, timeperiod=5, nbdev=1l) |
函数使用并绘图示例
def doTest(df):# 收盘价对时间t的线性回归预测值df['linearreg'] = ta.LINEARREG(df.Close, timeperiod=14)# 时间序列预测值df['tsf'] = ta.TSF(df.Close, timeperiod=14)# 画图df.loc['2021-01-04':, ['Close', 'linearreg', 'tsf']].plot(figsize=(12, 6))plt.show()
def doTest2(df):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)plt.show()
6、Math Transform Functions数学转换函数
TA-Lib提供了三角函数(正余弦、正余切、双曲)、取整、对数、平方根等数学转换函数,均是基于时间序列的向量变换。三角函数的应用比较复杂,可结合傅里叶变换和小波分析进行学习,此处不再详细展开。
函数名 | 英文全称 | 中文名称 | 实例 |
---|---|---|---|
SIN | Vector Trigonometric Sin | 正弦函数 | SIN(close) |
COS | Vector Trigonometric Cos | 余弦函数 | COS(close) |
TAN | Vector Trigonometric Tan | 正切函数 | TAN(close) |
ASIN | Vector Trigonometric ASin | 反正弦函数 | ASIN(close) |
ACOS | Vector Trigonometric ACos | 反余弦函数 | ACOS(close) |
ATAN | Vector Trigonometric ATan | 反正切函数 | ATAN(close) |
SINH | Vector Trigonometric Sinh | 双曲正弦函数 | SINH(close) |
COSH | Vector Trigonometric Cosh | 双曲余弦函数 | COSH(close) |
TANH | Vector Trigonometric Tanh | 双曲正切函数 | CEIL (close) |
CEIL | Vector Ceil | 向上取整数 | DIV(high, low) |
FLOOR | Vector Floor | 向下取整数 | FLOOR(close) |
EXP | Vector Arithmetic Exp | 指数曲线 | EXP(close) |
LN | Vector Log Natural | 自然对数 | LN(close) |
LOG10 | Vector Log 10 | 10为底对数 | LOG10(close) |
SQRT | Vector Square Root | 平方根 | SQRT(close) |
函数使用并绘图示例
def doTest(df):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)plt.show()
【量化】股市技术分析利器之TA-Lib(二)相关推荐
- 显示lib包_【手把手教你】股市技术分析利器之TA-Lib(一)
市场有自己的时间观念.股票投资就如同任何人类互动一样,耐心是一项美德.--罗伯特·D·爱德华<股市趋势技术分析> 引言 TA-Lib,全称"Technical Analysis ...
- 【量化】股市技术分析利器之TA-Lib(一)
作者:未来大佬 来源: 恒生LIGHT云社区 1.TA-Lib简介 TA-Lib,全称"Technical Analysis Library", 即技术分析库,是Python金融量 ...
- python 股票指标库talib_【手把手教你】股市技术分析利器之TA-Lib(一)
市场有自己的时间观念.股票投资就如同任何人类互动一样,耐心是一项美德.--罗伯特·D·爱德华<股市趋势技术分析> 引言 TA-Lib,全称"Technical Analysis ...
- 列举几个股市技术分析的公众号名称
以下是几个比较知名的股市技术分析公众号名称: 财经狂人 股市大师 股海导航 炒股大师 股票狙击手 投资观察家 股市智囊团 投资圈 股市冷眼 财经预言家 这些公众号通常提供股票行情分析.投资策略等信息, ...
- linux 汇编 perf,性能分析利器之perf浅析
作为服务器后台开发,不仅仅要写业务逻辑,后台意味着高并发,稳定性,当你写了很多逻辑,发现性能有问题的时候,也要学会性能分析,进行性能优化, 也许你会接触很多性能分析工具:valgrind,gperft ...
- python 计算股市技术分析PSY指标
PSY,心理线,百度百科链接: https://baike.baidu.com/item/PSY%E6%8C%87%E6%A0%87/3083493?fr=aladdin 价格上涨可以通过两种方式判定 ...
- 学术工具-文献引文分析利器之 HistCite
HistCite使用及其以 HistCite 源程序为核心的精简易用免安装版本HistCite Pro 详见官方链接:https://zhuanlan.zhihu.com/p/20902898 对开发 ...
- 小项目实战分享 | 用Python实现股票技术分析指标
大家好,我是王某人. 股票是很多人感兴趣的,我用Python实现了股市技术分析中常见的指标,如:MA,MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等,这些指标在通达信.同花顺等软件上都能 ...
- 【量化投资实训】基于MATLAB实验二.布林线BOLL
1.2布林线(BOLL) 1.2.1什么是布林线? 布林线(Boll)指标是股市技术分析的常用工具之一,通过计算股价的"标准差",再求股价的"信赖区间". 该指 ...
最新文章
- 全球首个开源图像识别系统上线!
- 函数计算新功能-----支持C#函数
- vue后台增删改查_Vue 原生实现商城购物车增删改查
- python *args和**kwargs以及序列解包
- LeakCanary上传 leak trace 到服务器
- Qt4_写FTP客户端
- 【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表
- python实现嵌套列表按指定位置元素排序、按子列表长度、子列表之和、绝对值和、最大/最小值排序
- jquery.nicescroll.min.js滚动条插件的用法
- 送示波器?送各色示波器设计!
- MUI框架-01-介绍-准备-创建项目
- PLC编程语言汇总,留言告诉我你会哪一个?
- Python爬虫实现爬取糗事百科段子 (26行代码简单实现)
- 在Python中安装meta模块
- 五年级3月30日——4月3日课程表
- 随想002:设计规范
- VUE不兼容显卡问题
- 阿里云ACP云计算备考经验
- exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException
- DRAWIP一种绘制流程图的软件