python 股票指标库talib_Talib金融库的使用

在这里我们使用掘金量化平台获取数据以及后续的一些基础操作,除了调用最基本的包之外,与掘金量化数据库进行通讯必须使用对应的账号密码,这些只需要直接创建空策略,基本信息以及配置就都设置好了。

我们只需额外加上我们另外要调用的包即可import numpy as np

import talib

这里注意,Talib 的安装是以下命令:

pip install Ta-Lib

一、数据获取与滑动平均值的计算data = history_n(symbol="SZSE.399006", frequency="1d", count=100, end_time="2019-11-27", fields="close",

fill_missing="last", adjust=ADJUST_PREV, df=True)

close = np.asarray(data["close"].values)

ma3 = talib.MA(close, timeperiod=3)

print(ma3)

history_n():获取历史信息df=True:获得一个pandas类型的返回值

frequency:对应的时间周期。比如 “1d” 表示按天,“3600s” 表示按小时

data["close"].values:均线计算值

talib.MA:计算滑动平均值,timeperiod 为设定的时间周期(前 timeperiod-1个数据的值为 nan,即不计算,如果想要考虑进去的话,可以使用np.nan_to_num(ma3) 将 nan 转为0,或者直接 mask 筛掉)

二、EMA

中文为:指数平均数指标,也叫EXPMA指标,是一种趋势类指标,是以指数式递减加权的移动平均。

$$

\text {EMA}=\alpha \times \text{Price}_{\text N}+(1-\alpha)\times\text{Price_(N-1)}

$$

其中,$\alpha$ 为平滑指数,一般取作 $\frac 2 {N+1}$

代码的话和上面基本类似data = history_n(symbol="SZSE.399006", frequency="1d", count=300, end_time="2019-11-27", fields="close",

fill_missing="last", adjust=ADJUST_PREV, df=True)

close = np.asarray(data["close"].values)

ema = talib.EMA(close)

ema = np.nan_to_num(ema)

print(ema)

这里有一点需要注意,计算出的前29个值都是nan,这是因为 EMA 的默认的时间周期为30

三、MACD

MACD:指数平滑移动平均线,用于对股票趋势分析。

MACD 的意义

和双移动平均线基本相同,由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势。当 MACD 从负数转向正数时,是买的信号。当 MACD 从正数转向负数时,是卖的信号。当 MACD 以大角度变化时,表示快的移动平均线和慢的移动平均线的差距非常迅速地拉开,代表一个市场大趋势的转变。data = history_n(symbol="SZSE.399006", frequency="1d", count=300, end_time="2019-11-27", fields="close",

fill_missing="last", adjust=ADJUST_PREV, df=True)

close = np.asarray(data["close"].values)

macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)

macd = np.nan_to_num(macd)

print(macd)

这里简单介绍一下MACD函数。MACD函数的默认值分别为 fastperiod=12, slowperiod=26, signalperiod=9。这里分别是快速(一般选12日)移动平均值与慢速(一般选26日)移动平均值。

以这两个数值作为测量两者(快速与慢速线)间的 “差离值” 的依据。所谓 “差离值”(DIF),即12日EMA数值减去26日EMA数值。因此,在持续的涨势中,12日EMA在26日EMA之上。其间的正差离值(+DIF)会愈来愈大。反之在跌势中,差离值可能变负(-DIF),也愈来愈大。至于行情开始回转,正或负差离值要缩小到一定的程度,才真正是行情反转的信号。MACD的反转信号界定为 “差离值” 的9日移动平均值(9日EMA)。

从返回值来看,signal 与 hist 分别为MACD的参数辅助量

我们可以用matplotlib输出看一下:plt.plot(macd, "r")

plt.show()

这段时间姑且可以算有涨有跌

但是,MACD的值只能用于反应不同时间周期内的买卖趋势情况,并不直接代表涨跌快慢,这时我们可以通过其它方法进行计算,这里借助的是 np.diff,返回相邻数之间的对应差值data = history_n(symbol="SZSE.002310",frequency="1d",count=300, end_time="2019-11-27",fields="close",fill_missing="last",adjust=ADJUST_PREV,df=True)

lose = np.asarray(data["close"].values)

acd, signal, hist = talib.MACD(close)

acd = np.nan_to_num(macd)

acd_gradient = np.diff(macd)

lt.plot(macd_gradient[33:], "r")

lt.show()

对于国内常用的金融指标,Talib并没有实现,这里给出几个

1、SMA_CNdef SMA_CN(close, timeperiod):

return reduce(lambda x, y: ((timeperiod - 1) * x + y) / timeperiod, close)

2、RSI_CNdef RSI_CN(close, timeperiod):

diff = map(lambda x, y: x - y, close[1:], close[:-1])

diffGt0 = map(lambda x: 0 if x < 0 else x, diff)

diffABS = map(lambda x: abs(x), diff)

diff = np.array(diff)

diffGt0 = np.array(diffGt0)

diffABS = np.array(diffABS)

diff = np.append(diff[0], diff)

diffGto = np.append(diffGt0[0], diffGt0)

diffABs = np.append(diffABS[0], diffABS)

rsi = map(lambda x: SMA_CN(diffGt0[: x], timeperiod) / SMA_CN(diffABS[x],

timeperiod) * 100, range(1, len(diffGt0) + 1))

return np.array(rsi)

3、KDJ_CNdef KDJ_CN(high, low, close, fastk_period, slowk_period, fastd_period):

kValue, dValue = talib.STOCHF(high, low, close, fastk_period, fastd_period=1, fastd_matype=0)

kvalue = np.arraymap(lambda x: SMA_CN(kValue[:x], slowk_period), range(1, len(kValue) + 1))

dvalue = np.array(map(lambda x: SMA_CN(kValue[:x], fastd_period), range(1, len(kValue) + 1)))

jvalue = 3 * kValue - 2 * dvalue

func = lambda arr: np.array([0 if x < 0 else (100 if x > 100 else x) for x in arr])

kvalue = func(kValue)

dvalue = func(dvaluMACD_CNe)

jvalue = func(jvalue)

return kvalue, dvalue, jvalue

4、MACD_CNdef MACD_CN(close, fastperiod=12, slowperiod=26, signalperiod=9):

macdDIFF, macdDEA, macd = talib.MACDEXT(close, fastperiod=fastperiod, fastmatype=1, slowperiod=slowperiod,

slowmatype=1, signalperiod=signalperiod, signalmatype=1)

macd = macd * 2

return macdDIFF, macdDEA, macd

四、Talib常用函数

1、平均趋向指数ADX和累积派发线AD

AD(累积派发线)是一种平衡交易量指标,以当日的收盘价位来估算成交流量,用于估算一段时间内该证券累积的资金流量。它通常与ADX一起使用,利用多空趋向的变化差离与总和判定平均趋势,ADX数值不能显示趋势的发展方向。但是如果趋势存在,ADX可以衡量趋势的强度。

ADX与AD的函数如下:def ADX(high, low, close, *args, **kwargs)

def AD(high, low, close, *args, **kwargs)

这两个函数中默认的 timeperiod 为14

AD为资金趋势函数,向上的 A/D 表明买方占优势,而向下的 A/D 表明卖方占优势。AD与价格的背离可视为买卖信号,即底背离考虑买入,顶背离考虑卖出

2、ADOSC(Chaikin A/D Oscillator Chaikin)震荡指标

ADOSC将资金流动情况与价格行为相对比,检测市场中资金流入和流出的情况。其函数如下:def ADOSC(high, low, close volume, *args, **kwargs):

3、ATR(Average True Range,平均真实波幅)

ATR 主要用来衡量价格的波动。因此,这一技术指标并不能直接反映价格走向及其趋势的稳定性,而只是表明价格波动的程度。def ADOSC (high, low, close, volume, *args, **kwargs):

4、BV(On Balance Volume,能量潮)

OBV 通过统计成交量变动的趋势推测股价趋势。它以某日为基期,逐日累计每日上市股票总成交量,若隔日指数或股票上涨,则基期 OBV 加上本日成交量为本OBV。若隔日指数或股票下跌,则基期 OBV 减去本日成交量为本日 OBV。函数如下:def OBV (real, volume):

五、图像形态识别

Talib提供了蜡烛图(K线图)的图像识别方法

1、函数名:CDL2CROWS

名称:Two Crows(两只乌鸦)

简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌。

函数:def CDL2CROWS(open,high,low, close)

2、函数名:CDL3BLACKCROWS

名称:Three Black Crows(三只乌鸦)

简介:三日K线模式,连续三根阴线,每日收盘价都下跌且接近最低价,每日开盘价都在上根K线实体内,预示股价下跌。

函数:def CD3BLACKCROWS(open,high,low,close)

3、函数名:CDL3INSIDE

名称:Three Inside Up/own(三内部上涨和下跌)

简介:三日K线模式,母子信号+长K线,以三内部上涨为例,K线为阴阳阳,第三天收盘价高于第一天开盘价,第二天K线在第一天K线内部,预示着股价上涨。

函数:def CDL3INSIDE(open,high,low,close)

4、函数名:CDL3LINESTRIKE

名称:Three-Line-Strike(三线打击)

简介:四日K线模式,前三根阳线,每日收盘价都比前一日高,开盘价在前一日实体内,第四日市场高开,收盘价低于第一日开盘价,预示股价下跌。

函数:def CDL3LINESTRIKE(open,high,low,close)

5、函数名:CDL3OUTSIDE

名称:Three Outside Up/down(三外部上涨和下跌)

简介:三日K线模式,与三内部上涨和下跌类似,K线为阴阳阳,但第一日与第二日的K线形态相反,以三外部上涨为例,第一日线在第二日K线内部,预示着股价上涨。

函数:def CDL3OUTSIDE(open,high,low,close)

6、函数名:CDL3STARSINSOUTH

名称:Three Stars In The South(南方三星)

简介:三日K线模式,与大敌当前相反,三日K线皆阴,第一日有长下影线,第二日与第一日类似,K线整体小于第一日,第三日无下影线实体信号,成交价格都在第一日振幅之内,预示下跌趋势反转,股价上升。

函数:def CDL3STARSINSOUTH(open,high,low,close)

7、函数名:CDL3WHITESOLDIERS

名称:Three Advancing White Soldiers(三个白兵)

简介:三日K线模式,三日K线皆阳,每日收盘价变高且接近最高价,开盘价在前一日实体上半部,预示股价上升。

函数:def CDL3WHITESOLDIERS(open,high,low,close)

8、函数名:CDLABANDONEDBABY

名称:Abandoned Baby(弃婴)

简介:三日K线模式,第二日价格跳空且收十字星(开盘价与收盘价接近,最高价与最低价相差不大),预示趋势反转,发生在顶部下跌,底部上涨。

函数:def CDLABANDONEDBABY(open, high,low,close,penetration=0)

9、函数名:CDLADVANCEBLOCK

名称:Advance Block(大敌当前)

简介:三日K线模式,三日都收阳,每日收盘价都比前一日高,开盘价都在前一日实体以内,实体变短,上影线变长。

函数:def CDLADVANCEBLOCK(open,high,low,close)

10、函数名:CDLBELTHOLD

名称:Belt-hold(捉腰带线)

简介:两日K线模式,下跌趋势中,第一日阴线,第二日开盘价为最低价,阳线,收盘价接近最高价,预示价格上涨。

函数:def CDLBELTHOLD(open,high,low,close)

11、函数名:CDLBREAKAWAY

名称:Breakaway(脱离)

简介:五日K线模式,以看涨脱离为例,下跌趋势中,第一日长阴线,第二日跳空阴线,延续趋势开始震荡,第五日长阳线,收盘价在第一天收盘价与第二天开盘价之间,预示价格上涨。

函数:def CDLBREAKAWAY(open,high,low,close)

12、函数名:CDLCLOSINGMARUBOZU

名称:Closing Marubozu(收盘缺影线)

简介:一日K线模式,以阳线为例,最低价低于开盘价,收盘价等于最高价,预示着趋

势持续。

函数:def CDLCLOSINGMARUBOZU(open,high,low,close)

13、函数名:CDLCONCEALBABYSWALL

名称:Concealing Baby Swallow(藏婴吞没)

简介:四日K线模式,下跌趋势中,前两日阴线无影线,第三日开盘、收盘价皆低于第二日,且第三日呈现倒锤头,第四日开盘价高于前一日最高价,收盘价低于前一日最低价,预示着底部反转。

函数:def CDLCONCEALBABYSWALL(open,high,low,close)

14、函数名:CDLCOUNTERATTACK

名称:Counterattack(反击线)

简介:二日K线模式,与分离线类似。

函数:def CDLCOUNTERATTACK(open,high,low,close)

15、函数名:CDLDARKCLOUDCOVER

名称:Dark Cloud Cover(乌云压顶)

简介:二日K线模式,第一日为长阳,第二日开盘价高于前一日最高价,收盘价处于前一日实体中部以下,预示着股价下跌。

函数:def CDLDARKCLOUDCOVER(open,high,low, close, penetration=0)

16、函数名:CDLDOJI

名称:Dj(十字)

简介:一日K线模式,开盘价与收盘价基本相同。

函数:def CDLDOJI(open,high,low,close)

17、函数名:CDLDOJISTAR

名称:Doji Star(十字星)

简介:一日K线模式,开盘价与收盘价基本相同,上下影线不会很长,预示着当前趋势反转。

函数:def CDLDOJISTAR(open,high,low,close)

18、函数名:CDLDRAGONFLYDOJI

名称:Dragonfly Doji(蜻蜓十字/T形十字)

简介:一日K线模式,开盘后价格一路走低,之后收复,收盘价与开盘价相同,预示趋势反转。

函数:def CDLDRAGONFLYDOJI(open,high,low,close)

19、函数名:CDLENGULFING

名称:Engulfing Pattern(吞噬模式)

简介:两日K线模式,分多头吞噬和空头吞噬,以多头吞噬为例,第一日为阴线,第二日为阳线,第一日的开盘价和收盘价在第二日开盘价和收盘价之内,但不能完全相同。

函数:def CDLENGULFING(open,high,low, close)

20、函数名:CDLEVENINGDOJISTAR

名称:Evening Doji Star(十字暮星)

简介:三日K线模式,基本模式为暮星,第二日收盘价和开盘价相同,预示顶部反转。

函数:def CDLEVENINGDOJISTAR(open,high,low,close,penetration=0)

21、函数名:CDLEVENINGSTAR

名称:Evening Star(暮星)

简介:三日K线模式,与晨星相反,上升趋势中,第一日为阳线,第二日价格振幅较小,第三日为阴线,预示顶部反转。

函数:def CDLEVENINGSTAR(open,high,low, close,penetration=0)

22、函数名:CDLGAPSIDESIDEWHITE

名称:Up/own-gap side-side-by- white lines(向上/下跳空并列阳线)

简介:二日K线模式,上升趋势向上跳空,下跌趋势向下跳空,第一日与第二日有相同的开盘价,实体长度差不多,则趋势持续。

函数:def CDLGAPSIDESIDEWHITE(open,high,low,close)

23、函数名:CDLGRAVESTONEDOJI

名称:Gravestone Doji(墓碑十字/倒T十字)

简介:一日K线模式,开盘价与收盘价相同,上影线长,无下影线,预示底部反转。

函数:def CDLGRAVESTONEDOJI(open,high,low,close)

24、函数名:CDLHAMMER

名称:Hammer(锤头)

简介:一日K线模式,实体较短,无上影线,下影线大于实体长度两倍,处于下跌趋势

底部,预示反转。

函数:def CDLHAMMER(open,high,low,close)

25、函数名:CDLHANGINGMAN

名称:Hanging Man(上吊线)

简介:一日K线模式,形状与锤子类似,处于上升趋势的顶部,预示着趋势反转。

函数:def CDLHANGINGMAN(open,high,low,close)

26、函数名:CDLHARAMI

名称:Harami Pattern(母子线)

简介:二日K线模式,分多头母子与空头母子,两者相反,以多头母子为例,在下跌趋势中,第一日K线长阴,第二日开盘价和收盘价在第一日价格振幅之内,为阳线,预示趋势反转,股价上升。

函数:def CDLHARAMI(open,high,low,close)

27、函数名:CDLHARAMICROSS

名称:Harami Cross Pattern(十字孕线)

简介:二日K线模式,与母子线类似,若第二日K线是十字线,便称为十字孕线,预示着趋势反转。

函数:def CDLHARAMICROSS(open,high,low,close)

28、函数名:CDLHIGHWAVE

名称:High- Wave Candle(风高浪大线)

简介:三日K线模式,具有极长的上/下影线与短的实体,预示着趋势反转。

函数:def CDLHIGHWAVE(open,high,low,close)

29、函数名:CDLHIKKAKE

名称:Hikkake Pattern(陷阱)

简介:三日K线模式,与母子线类似,第二日价格在前一日实体范围内,第三日收盘价高于前两日,反转失败,趋势继续。

函数:def CDLHIKKAKE(open,high,low,close)

30、函数名:CDLHIKKAKEMOD

名称:Modified Hikkake Pattern(修正陷阱)

简介:三日K线模式,与陷阱类似,上升趋势中,第三日跳空高开;下跌趋势中,第三日跳空低开,反转失败,趋势继续。

函数:def CDLHIKKAKEMOD(open,high,low,close)

31、函数名:CDLHOMINGPIGEON

名称:Homing Pigeon(家鸽)

简介:二日K线模式,与母子线类似,不同的是二日K线颜色相同,第二日最高价、最低价都在第一日实体之内,预示着趋势反转。

函数:def CDLHOMINGPIGEON(open,high,low,close)

32、函数名:CDLIDENTICAL3CROWS

名称:Identical Three Crows(三胞胎乌鸦)

简介:三日K线模式,上涨趋势中,三日都为阴线,长度大致相等,每日开盘价等于前一日收盘价,收盘价接近当日最低价,预示价格下跌。

函数:def CDLIDENTICAL3CROWS(open,high,low,close)

33、函数名:CDLINNECK

名称:In-Neck Pattern(颈内线)

简介:二日K线模式,下跌趋势中,第一日为长阴线,第二日开盘价较低,收盘价略高于第一日收盘价,阳线,实体较短,预示着下跌继续。

函数:def CDLINNECK(open,high,low,close)

34、函数名:CDLINVERTEDHAMMER

名称:Inverted Hammer(倒锤头)

简介:一日K线模式,上影线较长,长度为实体的2倍以上,无下影线,在下跌趋势底部,预示着趋势反转。

函数:def CDLINVERTEDHAMMER(open,high,low,close)

35、函数名:CDLKICKING

名称:Kicking(反冲形态)

简介:二日K线模式,与分离线类似,两日K线为秃线,颜色相反,存在跳空缺口。

函数:def CDLKICKING(open,high,low,close)

36、函数名:CDLKICKINGBYLENGTH

名称:Kicking-ull/bear determined by the longer marubozu(由较长缺影线决定的反冲形态)

简介:二日K线模式,与反冲形态类似,较长缺影线决定价格的涨跌。

函数:def CDLKICKINGBYLENGTH(open,high,low,close)

37、函数名:CDLSTALLEDPATTERN

名称:Stalled Pattern(停顿形态)

简介:三日K线模式,上涨趋势中,第二日为长阳线,第三日开盘于前一日收盘价附近,短阳线,预示着上涨结束。

函数:def CDLSTALLEDPATTERN(open,high,low,close)

38、函数名:CDLSTICKSANDWICH

名称:Stick Sandwich(条形三明治)

简介:三日K线模式,第一日为长阴线,第二日为阳线,开盘价高于前一日收盘价,第三日开盘价高于前两日最高价,收盘价与第一日收盘价相同。

函数:def CDLSTICKSANDWICH(open,high,low,close)

39、函数名:CDLTAKURI

名称:Takuri(Dragonfly Doji with very long lower shadow,探水竿)

简介:一日K线模式,大致与蜻蜓十字相同,下影线长度长。

函数:def CDLTAKURI(open,high,low, close)

40、函数名:CDLTASUKIGAP

名称:Tasuki Gap(跳空并列阴阳线)

简介:三日K线模式,分上涨和下跌,以上升为例,前两日为阳线,第二日跳空,第三日为阴线,收盘价于缺口中,上升趋势持续。

函数:def CDLTASUKIGAP(open,high,low, close)

41、函数名:CDLTHRUSTING

名称:Thrusting Pattern(插入)

简介:二日K线模式,与颈上线类似,下跌趋势中,第一日为长阴线,第二日开盘价跳空,收盘价略低于前一日实体中部,与颈上线相比实体较长,预示着趋势持续。

函数:def CDLTHRUSTING(open,high,low,close)

42、函数名:CDLTRISTAR

名称:Tristar Pattern(三星)

简介:三日K线模式,由三个十字组成,第二日的十字必须高于或者低于第一日和第三日,预示着反转。

函数:def CDLTRISTAR(open,high,low,close)

43、函数名:CDLUNIQUERIVER

名称:Unique3 River(奇特三河床)

简介:三日K线模式,下跌趋势中,第一日为长阴线,第二日为锤头,最低价创新低,第三日开盘价低于第二日收盘价,收阳线,收盘价不高于第二日收盘价,预示着反转,第二日下影线越长可能性越大。

函数:def CDLUNIQUE3RIVER(open,high,low,close)

44、函数名:CDLUPSIDEGAP2CROWS

名称:Upside Gap Two Crows(向上跳空的两只乌鸦)

简介:三日K线模式,第一日为阳线,第二日跳空以高于第一日最高价开盘,收阴线第三日开盘价高于第二日,收阴线,与第一日比仍有缺口。

函数:def CDLUPSIDEGAP2CROWS(open,high,low,close)

45、函数名: CDLXSIDEGAP3METHODS

名称:Upside/Downside Gap Three Methods(上升/下降跳空三法)

简介:五日K线模式,以上升跳空三法为例,上涨趋势中,第一日为长阳线,第二日为短阳线,第三日为跳空阳线,第四日为阴线,开盘价与收盘价于前两日实体内,第五日为长阳线,收盘价高于第一日收盘价,预示股价上升。

函数:def CDLXSIDEGAP3METHODS(open,high,low,close)

例:data = history_n(symbol="SZSE.399006",frequency="1d",count=100,end_time="2018-12-31",fields="high,low,close,open,volume",fill_missing="last",adjust=ADJUST_PREV,df=True)

close = np.asarray(data["close"].values)

open = np.asarray(data["open"].values)

high = np.asarray(data["high"].values)

low = np.asarray(data["low"].values)

volume = np.asarray(data["volume"].values).astype(np.double)

cdl2crows = talib.CDL2CROWS(high,low,close,volume)

print(cdl2crows)

上述代码段实现了对两只乌鸦的图形的查找,如果出现,则输出100,否则输出为0

参考:《python量化交易实战》

你可能感兴趣的:(python,股票指标库talib)