Talib技术因子详解(一)

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()

猜你喜欢

转载自blog.csdn.net/suiyingy/article/details/118559472