talib安装方式:pip install Ta-lib
Tushare数据获取请参考:金融量化分析基础环境搭建
数据获取代码
import tushare as ts
ts.set_token('Tushare的token')
pro = ts.pro_api()
#使用tushare旧版接口获取数据
def get_data(code, start, end):
df = pro.daily(ts_code=code, start_date=start, end_date=end)
df.index = pd.to_datetime(df.trade_date)
df=df[['open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount']]
df = df.rename(columns={"vol": "volume"})
df = df.iloc[::-1]
return df
1、布林线 (买卖指标),调用方式为:
upper, middle, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
根据历史数据画出一个通道,upper为上限,lower为下限,middle为平均位置。调用参数:
(1)close:收盘价。
(2)timeperiod:计算的周期,通常选择20天。
(3) nbdevup:上限价格相对于周期内标准偏差的倍数,取值越大,则上限越大,通道越宽。
(4)nbdevdn:下限价格相对于周期内标准偏差的倍数,取值越大,则下限越大,通道越宽。
(5)matype:平均值计算类型,0代表简单一定平均,还可以有加权平均等方式。
2、双指数平均线DEA,调用方式为:
output = talib.DEMA(close, timeperiod)
双指数平均线大幅度的改善了传统平均线的延迟效应,可以较早的显示出价格反转的可能性,这个指标不仅只是当投资人在使用葛兰碧移动平均线八大法则时,能够更快的获知价格突破或跌破的反转点,同时,将这个双指数用在MACD理论时,可用以替代传统的单指数EMA线上,而获得更早的买卖进出时点的讯号。
3、指数平均线,EMA,平均线的一种,调用方式为:
output = talib.DEMA(close, timeperiod)
4、HT_TRENDLINE希尔伯特瞬时变换,调用方式为:
output = talib.HT_TRENDLINE(close)
趋向类指标,其构造原理是仍然对价格收盘价进行算术平均,并根据计算结果来进行分析,用于判断价格未来走势的变动趋势。
5、KAMA 卡芙曼自适应移动平均线,调用方式为:
output = talib.KAMA(close, timeperiod)
6、MA 移动平均线,调用方式如下:
output = talib.MA(close_price_arr, 14)
7、MAMA MESA自适应移动平均线,调用方式如下:
8、MAVP 变周期移动平均线, 调用方式:
output = talib.MAVP(close, periods, minperiod=2, maxperiod=30, matype=0)
periods的维度需与close一致,也就是为每个价格设置不同的平均线周期。
9、MIDPOINT 阶段中点价格 ,调用方式如下:
output = talib.MIDPOINT(close, timeperiod)
10、MIDPRICE 阶段中点价格 ,调用方式如下:
output = talib.MIDPRICE(high, low, timeperiod)
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 7 22:45:25 2021
@author: Administrator
"""
import numpy as np
import talib as tl
import matplotlib.pyplot as plt
import pandas as pd
import tushare as ts
ts.set_token('自己申请的token')
pro = ts.pro_api()
#使用tushare旧版接口获取数据
def get_data(code, start, end):
df = pro.daily(ts_code=code, start_date=start, end_date=end)
df.index = pd.to_datetime(df.trade_date)
df=df[['open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount']]
df = df.rename(columns={"vol": "volume"})
df = df.iloc[::-1]
return df
if __name__ == '__main__':
#matplotlib作图
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
#Tushare数据获取
start_date = '20200701'
end_date = '20210701'
df = get_data('000001.SZ', start_date, end_date)
open_price_arr = df['open'].values
close_price_arr = df['close'].values
high_price_arr = df['high'].values
low_price_arr = df['low'].values
volume_arr = df['volume'].values
#1、BBANDS upper, middle, lower = BBANDS(input_arrays, 20, 2, 2) 布林线 (买卖指标)
# upper, middle, lower = tl.BBANDS(close_price_arr, 20, 2, 2, 0)
# plt.plot(close_price_arr)
# plt.plot(upper)
# plt.plot(middle)
# plt.plot(lower)
# plt.legend(['close', 'upper', 'middle', 'lower'])
# plt.show()
#2、DEMA dema = DEMA(close, timeperiod)
# output = tl.DEMA(close_price_arr, 14)
#3、EMA ,指数平均线 output = DEMA(close, timeperiod)
# output = tl.EMA(close_price_arr, 14)
#4、HT_TRENDLINE希尔伯特瞬时变换
# output = tl.HT_TRENDLINE(close_price_arr)
#5、KAMA 卡芙曼自适应移动平均线 output = tl.KAMA(close, timeperiod)
# output = tl.KAMA(close_price_arr, 14)
#6、MA 移动平均线 output = tl.MA(close, timeperiod)
# output = tl.MA(close_price_arr, 14)
#7、MAMA MESA自适应移动平均线 mama, fama = tl.MAMA(close)
# mama, fama = tl.MAMA(close_price_arr)
# plt.plot(close_price_arr)
# plt.plot(mama)
# plt.plot(fama)
# plt.legend(['close', 'mama', 'fama'])
# plt.show()
#8、MAVP 变周期移动平均线, MAVP(close, periods, minperiod=2, maxperiod=30, matype=0)
# close_price_arr = np.array([1,5,7,8], dtype=float)
# periods =np.array([2,3,3,2], dtype=float)
# output = tl.MAVP(close_price_arr, periods, maxperiod=3)
#9、MIDPOINT 阶段中点价格 mid = tl.MIDPOINT(close, timeperiod)
# output = tl.MIDPOINT(close_price_arr, 14)
#10、MIDPRICE 阶段中点价格 output = tl.MIDPRICE(high, low, 14)
# output = tl.MIDPRICE(high_price_arr, low_price_arr, 14)
# plt.plot(high_price_arr)
# plt.plot(low_price_arr)
# plt.plot(output)
# plt.legend(['high', 'low', 'output'])
# plt.show()
plt.plot(close_price_arr)
plt.plot(output)
plt.legend(['close', 'output'])
plt.show()