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