在这里我们使用掘金量化平台获取数据以及后续的一些基础操作,除了调用最基本的包之外,与掘金量化数据库进行通讯必须使用对应的账号密码,这些只需要直接创建空策略,基本信息以及配置就都设置好了。
我们只需额外加上我们另外要调用的包即可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量化交易实战》