TA-Lib学习研究笔记——Overlap Studies(二)
1. Overlap Studies 指标
['BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA']
2.数据准备
get_data函数参数(代码,起始时间,终止时间)
返回dataframe 变量df ,column如下:
ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount
以000002代码测试,2021年的数据,程序示例:
import numpy as np
import talib as tlb
import matplotlib.pyplot as plt
import pandas as pd
from sqlalchemy import create_engine
if __name__ == '__main__':
#matplotlib作图设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
#数据获取
start_date = '2021-01-01'
end_date = '2022-01-01'
df = get_data('000002', start_date, end_date)
3.指标学习测试
(1)BBANDS
函数名:BBANDS
名称: 布林线指标
简介:其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。
语法:
upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
参数:
(1)close:收盘价。
(2)timeperiod:计算的周期。
(3) nbdevup:上限价格相对于周期内标准偏差的倍数,取值越大,则上限越大,通道越宽。
(4)nbdevdn:下限价格相对于周期内标准偏差的倍数,取值越大,则下限越大,通道越宽。
(5)matype:平均值计算类型,0代表简单一定平均,还可以有加权平均等方式。
df['upper'], df['middle'], df['lower'] = tlb.BBANDS(df['close'], timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
# 做图
df[['close','upper','middle','lower']].plot(title='布林线')
plt.grid() #启用网格
plt.legend(['close', 'upper', 'middle', 'lower']) # 设置图示
plt.show()
执行效果:
(2)DEMA双指数平均线
函数名:DEMA
名称: 双移动平均线
简介:两条移动平均线来产生趋势信号,较长期者用来识别趋势,较短期者用来选择时机。正是两条平均线及价格三者的相互作用,才共同产生了趋势信号。
output = talib.DEMA(close, timeperiod)
df['DEMA'] = tlb.DEMA(df['close'], timeperiod=20)
# 做图
df[['close','DEMA']].plot(title='双移动平均线')
plt.grid() #启用网格
plt.legend(['close','DEMA']) # 设置图示
plt.show()
(3)EMA
函数名:EMA Exponential Moving Average
名称: 指数平均数
简介:是一种趋向类指标,其构造原理是仍然对价格收盘价进行算术平均,并根据计算结果来进行分析,用于判断价格未来走势的变动趋势。
real = EMA(close, timeperiod=20)
df['EMA'] = tlb.EMA(df['close'], timeperiod=20)
# 做图
df[['close','EMA']].plot(title='指数平均数')
plt.grid() #启用网格
plt.legend(['close','EMA']) # 设置图示
plt.show()
(4)HT_TRENDLINE
函数名:HT_TRENDLINE
名称: 希尔伯特瞬时变换
简介:是一种趋向类指标,其构造原理是仍然对价格收盘价进行算术平均,并根据计算结果来进行分析,用于判断价格未来走势的变动趋势。
real = HT_TRENDLINE(close)
df['HT_TRENDLINE'] = tlb.HT_TRENDLINE(df['close'])
# 做图
df[['close','HT_TRENDLINE']].plot(title='希尔伯特瞬时变换')
plt.grid() #启用网格
plt.legend(['close','HT_TRENDLINE']) # 设置图示
plt.show()
(5)KAMA
名称:KAMA Kaufman Adaptive Moving Average 考夫曼自适应移动平均线
简介:短期均线贴近价格走势,灵敏度高,但会有很多噪声,产生虚假信号;长期均线在判断趋势上一般比较准确,但是长期均线有着严重滞后的问题。我们想得到这样的均线,当价格沿一个方向快速移动时,短期的移动平均线是最合适的;当价格在横盘的过程中,长期移动平均线是合适的。
语法:
real = KAMA(close, timeperiod=30)
df['KAMA'] = tlb.KAMA(df['close'], timeperiod=30)
# 做图
df[['close','KAMA']].plot(title='考夫曼自适应移动平均线')
plt.grid() #启用网格
plt.legend(['close','KAMA']) # 设置图示
plt.show()
(6)MA
函数名:MA - Moving average 移动平均线
名称: 移动平均线
简介:移动平均线,Moving Average,简称MA,原本的意思是移动平均,由于将其制作成线形,所以一般称之为移动平均线,简称均线。它是将某一段时间的收盘价之和除以该周期。 比如日线MA5指5天内的收盘价除以5 。
语法:
real = MA(close, timeperiod=30, matype=0)
df['MA5'] = tlb.MA(df['close'], timeperiod=5, matype=0)
df['MA10'] = tlb.MA(df['close'], timeperiod=10, matype=0)
df['MA30'] = tlb.MA(df['close'], timeperiod=30, matype=0)
# 做图
df[['close','MA5','MA10','MA30']].plot(title='移动平均线')
plt.grid() #启用网格
plt.legend(['close','MA5','MA10','MA30']) # 设置图示
plt.show()
(7)MAMA
MAMA是MESA自适应移动平均线,全称为MESA Adaptive Moving Average。它是根据价格的移动平均线和自适应移动平均线来计算的,它的设计初衷是能够更好地适应不同市场的变化。
指标作用
MAMA指标使用了一种称为Hilbert变换的数学方法来计算价格的移动平均线。这种方法可以将价格的周期性变化进行平滑处理,减少了滞后性,使得MAMA指标能够更快地响应市场的变化。
MAMA指标由两条线组成:MAMA线和FAMA线。MAMA线是根据价格的移动平均线计算得出的,它可以显示价格的趋势方向。FAMA线是根据MAMA线计算得出的,它可以显示价格的趋势变化的速度。
MAMA指标的应用主要有两个方面:
- 确定趋势:当MAMA线向上穿过FAMA线时,可以视为买入信号,表示价格可能会上涨;当MAMA线向下穿过FAMA线时,可以视为卖出信号,表示价格可能会下跌。
- 确定超买超卖:当MAMA线超过了价格的最高点时,可以视为超买信号,表示价格可能会回调;当MAMA线低于价格的最低点时,可以视为超卖信号,表示价格可能会反弹。
语法:
mama, fama = MAMA(close)
df['mama'], df['fama'] = tlb.MAMA(df['close'])
# 做图
df[['close','mama','fama']].plot(title='自适应移动平均线')
plt.grid() #启用网格
plt.legend(['close','mama','fama']) # 设置图示
plt.show()
(8)MAVP
Moving average with variable period,计算带有可变周期的移动平均线。
语法:
下面是 MAVP 函数的参数说明:
- close: 必需参数,表示收盘价序列的数组或 pandas Series。
- periods: 必需参数,表示要进行移动平均的周期值。它是一个包含多个周期值的数组。
- minperiod: 可选参数,表示移动平均线计算的最小周期。默认值为 2。
- maxperiod: 可选参数,表示移动平均线计算的最大周期。默认值为 30。
- matype: 可选参数,表示移动平均线的类型。可以选择以下类型:
0: 简单移动平均线(SMA)
1: 加权移动平均线(WMA)
2: 指数移动平均线(EMA)
3: 光滑移动平均线(SMA with offset)默认值为 0。
real = MAVP(close, periods, minperiod=2, maxperiod=30, matype=0)
注意:periods参数必须是numpy.array ,类型必须是float ,长度与close的一致。
测试了多次,才搞明白了periods参数。开始总是报不是浮点数,periods用浮点数,报错:Exception: input array lengths are different 。
原因就是close和periods长度必须一致。
#periods 必须是numpy.array ,类型必须是float ,长度与close的一致。测试用赋值都是5,一周的交易日
length = len(df['close'])
value = 5
periods = np.full(length, value, dtype=float)
df['MAVP'] = tlb.MAVP(df['close'], periods, minperiod=5, maxperiod=10, matype=0)
# 做图
df[['close','MAVP']].plot(title='变周期移动平均线')
plt.grid() #启用网格
plt.legend(['close','MAVP']) # 设置图示
plt.show()
(9)MIDPOINT - MidPoint over period
MIDPOINT函数用于计算指定期间内的中点值
语法:
real = MIDPOINT(close, timeperiod=14)
示例:
df['MIDPOINT'] = tlb.MIDPOINT(df['close'], timeperiod=14)
# 做图
df[['close','MIDPOINT']].plot(title='MidPoint over period')
plt.grid() #启用网格
plt.legend(['close','MIDPOINT']) # 设置图示
plt.show()
(10)MIDPRICE
MIDPRICE - Midpoint Price over period
在TA-Lib中,MIDPRICE函数用于计算指定期间内的中间价格。它基于最高价、最低价来计算一个期间内的中间价格。
参数:
- high:一个包含最高价序列的数组或指标。
- low:一个包含最低价序列的数组或指标。
- timePeriod:期间长度,表示要计算中间价格的期间数。
语法:
real = MIDPRICE(high, low, timeperiod=14)
示例:
df['MIDPRICE'] = tlb.MIDPRICE(df['high'], df['low'],timeperiod=14)
# 做图
df[['high','low','MIDPRICE']].plot(title='Midpoint Price over period')
plt.grid() #启用网格
plt.legend(['high','low','MIDPRICE']) # 设置图示
plt.show()