技术指标-MACD

博主: Simon Lin 创建于: Mar 16, 2019 更新于: Mar 16, 2019
分类: stock
标签: finance stock macd

本着不重复造轮子的原则,基本使用talib的库来实现各种股票的技术指标的运算。
MACD指标的教学也不做了,只做简单使用的说明

算法

EMA:移动平均值,参见技术指标MA的说明。
DIF:离差值,也就是MACD指标的快速线,talib的macd函数的macd值
DEA:DIF的EMA,也就是MACD指标的慢速线,talib的macd函数的macd_signal值
MACD:柱状图的高度。talib的macd函数的macd_hist的两倍

关于算法的说明:
1、计算移动平均值(EMA)
可以直接用EMA的公式计算,也可以用迭代方式计算
12日EMA的算式为
EMA(12)=前一日EMA(12)×11/13+今日收盘价×2/13
26日EMA的算式为
EMA(26)=前一日EMA(26)×25/27+今日收盘价×2/27
2、计算离差值(DIF)
DIF=今日EMA(12)-今日EMA(26)
3、计算DIF的9日EMA
根据离差值计算其9日的EMA,即离差平均值,是所求的MACD值。为了不与指标原名相混淆,此值又名DEA或DEM。
今日DEA(MACD)=前一日DEA×8/10+今日DIF×2/10。
计算出的DIF和DEA的数值均为正值或负值。
用(DIF-DEA)×2即为MACD柱状图。

注:部分交易软件上的MACD的值其实是为MACDHist,即柱状图上的图形高度的两倍

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#MACD具体计算:
#Dif 即MACD;Dea即MACDsignal;Dea-Dif=Macdhist
#手机软件上的macd即(Dea-Dif)*2
import numpy
import talib
from talib import MA_Type
#取一天
df=get_price(frequency='daily',fields=['close'], security='000300.XSHG', skip_paused=False, fq='pre',count=100,end_date='2018-11-26')
close = [float(x) for x in df['close']]

# 调用talib计算指数移动平均线的值
df['EMA12'] = talib.EMA(np.array(close), timeperiod=12)
df['EMA26'] = talib.EMA(np.array(close), timeperiod=26)
df['Dif']=df['EMA12']-df['EMA26']
dif = [float(x) for x in df['Dif']]
df['Dea'] = talib.EMA(np.array(dif), timeperiod=9)
df['Macd'] = df['Dif']-df['Dea']
# 调用talib计算MACD指标
df['MACD'],df['MACDsignal'],df['MACDhist'] = talib.MACD(np.array(close),
fastperiod=12, slowperiod=26, signalperiod=9)
df

本代码get_price函数使用了聚宽平台的函数,只要返回合适的格式,完全可以使用别的平台或者原始数据来代替。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
date	close	EMA12	EMA26	Dif	Dea	Macd	MACD	MACDsignal	MACDhist
2018-07-02 3407.96 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-03 3409.28 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-04 3363.75 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-05 3342.44 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-06 3365.12 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-09 3459.18 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-10 3467.52 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-11 3407.53 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-12 3481.06 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-13 3492.69 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-16 3472.09 NaN NaN NaN NaN NaN NaN NaN NaN
2018-07-17 3449.38 3426.500000 NaN NaN NaN NaN NaN NaN NaN
2018-07-18 3431.32 3427.241538 NaN NaN NaN NaN NaN NaN NaN
2018-07-19 3428.34 3427.410533 NaN NaN NaN NaN NaN NaN NaN
2018-07-20 3492.89 3437.484297 NaN NaN NaN NaN NaN NaN NaN
2018-07-23 3525.75 3451.063636 NaN NaN NaN NaN NaN NaN NaN
2018-07-24 3581.71 3471.163076 NaN NaN NaN NaN NaN NaN NaN
2018-07-25 3577.75 3487.561065 NaN NaN NaN NaN NaN NaN NaN
2018-07-26 3536.25 3495.051670 NaN NaN NaN NaN NaN NaN NaN
2018-07-27 3521.23 3499.079105 NaN NaN NaN NaN NaN NaN NaN
2018-07-30 3515.08 3501.540782 NaN NaN NaN NaN NaN NaN NaN
2018-07-31 3517.66 3504.020661 NaN NaN NaN NaN NaN NaN NaN
2018-08-01 3447.39 3495.308252 NaN NaN NaN NaN NaN NaN NaN
2018-08-02 3370.96 3476.177752 NaN NaN NaN NaN NaN NaN NaN
2018-08-03 3315.28 3451.424251 NaN NaN NaN NaN NaN NaN NaN
2018-08-06 3273.27 3424.015905 3448.187692 -24.171787 NaN NaN NaN NaN NaN
2018-08-07 3368.87 3415.531920 3442.312308 -26.780388 NaN NaN NaN NaN NaN
2018-08-08 3314.51 3399.990086 3432.845470 -32.855384 NaN NaN NaN NaN NaN
2018-08-09 3397.53 3399.611611 3430.229509 -30.617898 NaN NaN NaN NaN NaN
2018-08-10 3405.02 3400.443671 3428.362138 -27.918467 NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ...
2018-10-16 3100.97 3229.897668 3273.623361 -43.725694 -19.131793 -24.593901 -43.699105 -19.039405 -24.659700
2018-10-17 3118.25 3212.721103 3262.114223 -49.393120 -25.184058 -24.209062 -49.370622 -25.105648 -24.264974
2018-10-18 3044.39 3186.824010 3245.986503 -59.162493 -31.979745 -27.182748 -59.143456 -31.913210 -27.230246
2018-10-19 3134.95 3178.843393 3237.761577 -58.918184 -37.367433 -21.550751 -58.902075 -37.310983 -21.591093
2018-10-22 3270.27 3192.909025 3240.169608 -47.260583 -39.346063 -7.914520 -47.246953 -39.298177 -7.948776
2018-10-23 3183.43 3191.450714 3235.966674 -44.515961 -40.380042 -4.135918 -44.504428 -40.339427 -4.165001
2018-10-24 3188.20 3190.950604 3232.428402 -41.477798 -40.599594 -0.878205 -41.468040 -40.565150 -0.902890
2018-10-25 3194.31 3191.467434 3229.604817 -38.137383 -40.107151 1.969769 -38.129125 -40.077945 1.948819
2018-10-26 3173.64 3188.724752 3225.459275 -36.734523 -39.432626 2.698103 -36.727536 -39.407863 2.680327
2018-10-29 3076.89 3171.519405 3214.454143 -42.934738 -40.133048 -2.801690 -42.928826 -40.112056 -2.816770
2018-10-30 3110.26 3162.094882 3206.736059 -44.641177 -41.034674 -3.606503 -44.636175 -41.016879 -3.619295
2018-10-31 3153.82 3160.821823 3202.816351 -41.994528 -41.226645 -0.767883 -41.990295 -41.211562 -0.778732
2018-11-01 3177.03 3163.315389 3200.906251 -37.590862 -40.499488 2.908626 -37.587280 -40.486706 2.899426
2018-11-02 3290.25 3182.843790 3207.524306 -24.680516 -37.335694 12.655178 -24.677485 -37.324862 12.647377
2018-11-05 3262.84 3195.150899 3211.621765 -16.470865 -33.162728 16.691863 -16.468301 -33.153550 16.685249
2018-11-06 3243.15 3202.535376 3213.957190 -11.421813 -28.814545 17.392732 -11.419643 -28.806768 17.387125
2018-11-07 3221.91 3205.516088 3214.546287 -9.030199 -24.857676 15.827477 -9.028363 -24.851087 15.822724
2018-11-08 3212.77 3206.632074 3214.414710 -7.782636 -21.442668 13.660032 -7.781082 -21.437086 13.656004
2018-11-09 3167.44 3200.602524 3210.935102 -10.332577 -19.220650 8.888072 -10.331263 -19.215922 8.884659
2018-11-12 3205.14 3201.300598 3210.505835 -9.205237 -17.217567 8.012330 -9.204125 -17.213562 8.009437
2018-11-13 3237.38 3206.851275 3212.496514 -5.645239 -14.903102 9.257863 -5.644298 -14.899709 9.255412
2018-11-14 3204.94 3206.557233 3211.936772 -5.379540 -12.998389 7.618850 -5.378743 -12.995516 7.616773
2018-11-15 3242.37 3212.066889 3214.191085 -2.124196 -10.823551 8.699354 -2.123522 -10.821117 8.697595
2018-11-16 3257.67 3219.082752 3217.411746 1.671007 -8.324639 9.995646 1.671577 -8.322579 9.994155
2018-11-19 3294.60 3230.700790 3223.129394 7.571396 -5.145432 12.716828 7.571879 -5.143687 12.715566
2018-11-20 3218.41 3228.809900 3222.779809 6.030090 -2.910328 8.940418 6.030498 -2.908850 8.939348
2018-11-21 3226.49 3228.452992 3223.054638 5.398354 -1.248591 6.646945 5.398699 -1.247340 6.646039
2018-11-22 3214.43 3226.295609 3222.415776 3.879832 -0.222907 4.102739 3.880125 -0.221847 4.101972
2018-11-23 3143.48 3213.554746 3216.568682 -3.013936 -0.781113 -2.232823 -3.013689 -0.780215 -2.233473
2018-11-26 3141.24 3202.429400 3210.988779 -8.559379 -2.336766 -6.222613 -8.559170 -2.336006 -6.223163

验证

Dif,Dea,Macd三列是通过算法计算出来的值,MACD,MACDsignal,MACDhist是使用talib直接计算macd获取的值,可以看出,除了最开始的震荡期,后面的值还是非常接近的。与股票交易软件上的值也是一致的。


打赏 支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者