量化投资学习【TA-LIB】之MACD

    移动平滑异同平均线(Moving Average Convergence Divergence,简称MACD指标)策略。MACD是查拉尔·阿佩尔(Geral Appel)于1979年提出的,由一快及一慢指数移动平均(EMA)之间的差计算出来。“快”指短时期的EMA,而“慢”则指长时期的EMA,最常用的是12及26日EMA。
  MACD指标是运用快速(短期)和慢速(长期)移动平均线及其聚合与分离的征兆,加以双重平滑运算,是一种趋向类指标。根据移动平均线原理发展出来的MACD,一则去除了移动平均线频繁发出假信号的缺陷,二则保留了移动平均线的效果,因此,MACD指标具有均线趋势性、稳重性、安定性等特点,是用来研判买卖股票的时机,预测股票价格涨跌的技术分析指标 。

  Talib提供了MACD函数,我在研究中实验了MACD的用法,并自己进行了编程,对比了结果,与同花顺交易软件中的指标走势一致。使用Talib中的MACD进行了策略回测。


Talib使用之一——MACD

In [1]:
import talib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
In [2]:
df = get_price('000001.XSHE', start_date='2015-04-01', end_date='2015-11-10', frequency='daily')
#剔除停盘数据
df[df['volume']==0]=np.nan
df= df.dropna()

计算方法:

12日EMA的计算:EMA12 = 前一日EMA12 X 11/13 + 今日收盘 X 2/13

26日EMA的计算:EMA26 = 前一日EMA26 X 25/27 + 今日收盘 X 2/27

差离值(DIF)的计算: DIF = EMA12 - EMA26,即为talib-MACD返回值macd

根据差离值计算其9日的EMA,即离差平均值,是所求的DEA值。今日DEA = (前一日DEA X 8/10 + 今日DIF X 2/10),即为talib-MACD返回值signal

DIF与它自己的移动平均之间差距的大小一般BAR=(DIF-DEA)2,即为MACD柱状图。但是talib中MACD的计算是bar = (dif-dea)1

买卖原则为:

DIF-DEA均为正,买入信号参考。

DIF-DEA均为负,卖出信号参考。

In [3]:
talib.MACD?
In [14]:
def myMACD(price, fastperiod=12, slowperiod=26, signalperiod=9):
    ewma12 = pd.ewma(price,span=fastperiod)
    ewma60 = pd.ewma(price,span=slowperiod)
    dif = ewma12-ewma60
    dea = pd.ewma(dif,span=signalperiod)
    bar = (dif-dea) #有些地方的bar = (dif-dea)*2,但是talib中MACD的计算是bar = (dif-dea)*1
    return dif,dea,bar
In [5]:
macd, signal, hist = talib.MACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
In [12]:
mydif,mydea,mybar = myMACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
In [15]:
fig = plt.figure(figsize=[18,5])
plt.plot(df.index,macd,label='macd dif')
plt.plot(df.index,signal,label='signal dea')
plt.plot(df.index,hist,label='hist bar')
plt.plot(df.index,mydif,label='my dif')
plt.plot(df.index,mydea,label='my dea')
plt.plot(df.index,mybar,label='my bar')
plt.legend(loc='best')
Out[15]:

1.可以看出Talib中的MACD对前33个初始值是未定义的,使用时需注意。

2.可以自己编程,将初始值赋值为计算的第一天价格,得到曲线,由于初始值赋值不同在一段时间后,自己定义的macd函数和Talib提供的MACD函数值一致,说明两种计算方法一致。


3.基础数据是否充足,建议三倍以上,比如MACD算26期基础数据需要26*3期
In [14]:
macd
Out[14]:
array([        nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,  0.07244685,  0.06376001,
        0.09451807,  0.14386392,  0.18248117,  0.1994892 ,  0.13236456,
        0.06390662,  0.05581102,  0.03846191,  0.02921732,  0.06471837,
        0.08621101,  0.18104186,  0.22854704,  0.23923005,  0.22891925,
        0.22062538,  0.16454755,  0.09640057,  0.04908996, -0.01645641,
       -0.12745193, -0.18743472, -0.21873252, -0.26070393, -0.37836582,
       -0.48299134, -0.48128208, -0.52391691, -0.56491096, -0.64483609,
       -0.63549155, -0.55950376, -0.61006029, -0.55736172, -0.46185873,
       -0.41527537, -0.41951604, -0.44119159, -0.4515506 , -0.4369709 ,
       -0.43811819, -0.43641742, -0.4341001 , -0.41537171, -0.4190988 ,
       -0.49222858, -0.52955557, -0.55436099, -0.59460044, -0.61137379,
       -0.58085292, -0.54713027, -0.53601275, -0.52598036, -0.50574438,
       -0.45939717, -0.42423172, -0.41338436, -0.40017478, -0.37968095,
       -0.36727489, -0.37490804, -0.37980685, -0.39367564, -0.44392981,
       -0.56998161, -0.73324177, -0.81689868, -0.80213531, -0.77903426,
       -0.73291196, -0.64853795, -0.55350375, -0.54852249, -0.5295939 ,
       -0.50075134, -0.47643593, -0.45913541, -0.44752805, -0.45726555,
       -0.43335886, -0.42006035, -0.4016634 , -0.38187475, -0.35085088,
       -0.34328687, -0.33265083, -0.33329039, -0.33158873, -0.33844255,
       -0.33118052, -0.30496463, -0.26499531, -0.20433564, -0.16245886,
       -0.13976384, -0.1052334 , -0.07219407, -0.04309267, -0.01501502,
       -0.00082295,  0.0190805 ,  0.04562501,  0.06989066,  0.08491485,
        0.07896611,  0.08058501,  0.06338517,  0.04200768,  0.07583435,
        0.13178591,  0.19964784,  0.29441546,  0.35015175])

你可能感兴趣的:(Python_量化投资)