量化交易——传统技术分析平滑异同移动平均线MACD的原理及实现
来源:互联网 发布:php 数组的写法 编辑:程序博客网 时间:2024/05/22 07:57
指数平滑异同移动平均线MACD
MACD是股票交易中常见的一个技术分析工具,同时也是一个我认为分析可执行度高并且效果优秀的一种手段。其是于1970年代由Gerald Appel提出,它主要是利用了双指数移动平均线,即是求得一条快速的指数移动平均线EMA12和一条慢的指数移动平均线EMA26,再进行相减得到差离值DIF。进而将得到的DIF取9日加权移动平均DEA,最后得到MACD。MACD指标由一组曲线和柱形图构成,它反映的是股票价格变化额趋势周期等特征,通过这些特征便可以很好的挖掘出股票买卖交易的最佳时机。
实现
分析过程可以参考前面的博文,量化交易——传统技术分析相对强弱指数RSI的原理及实现,这里不细讲。
相关代码:
import numpy as npimport mathimport randomimport jsonimport matplotlib.pyplot as pltimport syssys.setrecursionlimit(10000)#date|open|high|low|close|volume|adjsuted def get_stock_hist(num): s_his=np.genfromtxt('C:/Users/Haipeng/Desktop/python/Korea/Korea_{:03d}.csv'.format(num), delimiter=',') s_hi=s_his[1:][:] days=s_hi.shape[0] this_stock = [] for i in range(1,days,1): this_day = [i] for k in range(1,7): this_day.append(s_hi[i][k]) this_stock.append(this_day) print 'Maximum date is ',len(this_stock) return this_stockdef get_price(D, p_tpe): if p_tpe=='close': pos=4; elif p_tpe=='open': pos=1; elif p_tpe=='high': pos=2; elif p_tpe=='low': pos=3; else: pos=5 price=stock_hist[D-1][pos]; return pricedef get_ma(D, N): p_used=np.zeros(N); for i in range(1,N+1,1): p_used[i-1]=stock_hist[(D-1)-(i-1)][4]; ma=np.mean(p_used); return madef get_mar(fro,to,N): ma = [] for i in range(fro,to+1): ma.append(get_ma(i,N)) return ma#Date\Open\High\Low\Closedef get_tuples(fro,to): res =[] for d in range(fro,to+1): tmp = [] tmp.append(d) tmp.append(get_price(d,'open')) tmp.append(get_price(d,'high')) tmp.append(get_price(d,'low')) tmp.append(get_price(d,'close')) res.append(tmp) return resdef get_volume(fro,to): res = [] for d in range(fro,to+1): num = 1 try: if get_price(d,'close')<get_price(d-1,'close'): num = -1 except: pass res.append(num*get_price(d,'volume')) return res # MACDdef get_MACD(D): EMA12 = 0 EMA26 = 0 DEM = 0 DIF = 0 for i in range(1,D): if i==1: EMA12 = get_price(i+1,'close')*2.0/13+(1-2.0/13)*get_price(i,'close') EMA26 = get_price(i+1,'close')*2.0/27+(1-2.0/27)*get_price(i,'close') DIF = EMA12 - EMA26 DEM = DIF*2.0/10 else: EMA12 = get_price(i+1,'close')*2.0/13+(1-2.0/13)*EMA12 EMA26 = get_price(i+1,'close')*2.0/27+(1-2.0/27)*EMA26 DIF = EMA12 - EMA26 DEM = DIF*2.0/10+DEM*(1-2.0/10) OSC = DIF-DEM return [DIF,DEM,OSC]def get_DIF_DEM_OSC(fro,to): res = [[],[],[]] for d in range(fro,to+1): tmp = get_MACD(d) res[0].append(tmp[0]) res[1].append(tmp[1]) res[2].append(tmp[2]) return res
绘制k线图及MACD指标
画图代码:
def plot_MACD(fro,to): volume = get_volume(fro,to) tmp = get_DIF_DEM_OSC(fro,to) DIF = tmp[0] DEM = tmp[1] OSC = tmp[2] ma5 = get_mar(fro,to,5) ma10 = get_mar(fro,to,10) ma20 = get_mar(fro,to,20) tuples = get_tuples(fro,to) date = [d for d in range(fro,to+1)] fig = plt.figure(figsize=(8,5)) p1 = plt.subplot2grid((5,4),(0,0),rowspan=3,colspan=4,axisbg='k') p1.set_title("Moving Average Convergence / Divergence(MACD)") p1.set_ylabel("Price") p1.plot(date,ma5,'m') p1.plot(date,ma10,'b') p1.plot(date,ma20,'y') p1.legend(('MA5','MA10','MA20')) p1.grid(True,color='w') candlestick_ohlc(p1, tuples, width=0.7,colorup='r',colordown="g") p2 = plt.subplot2grid((5,4),(3,0),colspan=4,axisbg='c') p2.set_ylabel("Volume") colors = [] for i in range(len(volume)): if volume[i]<0: colors.append('green') volume[i] = -volume[i] else: colors.append('red') p2.bar(date,volume,color=colors) p3 = plt.subplot2grid((5,4),(4,0),colspan=4,axisbg='m') p3.set_ylabel("MACD") p3.set_xlabel("Dates") p3.plot(date,DIF, 'r-') p3.plot(date,DEM, 'g-') p3.bar(date,OSC,facecolor = 'yellowgreen',edgecolor = 'gold') p3.legend(('DIF','DEM','MACD bar / OSC'),loc='upper left') plt.subplots_adjust(hspace=0) plt.show()# show the plot on the screen#select stock 18stock_hist = get_stock_hist(18)#Date from 110 to 880plot_MACD(110,880)
图像1:
图像2:
#Date from 400 to 520plot_MACD(400,520)
欢迎交流~
1 0
- 量化交易——传统技术分析平滑异同移动平均线MACD的原理及实现
- 量化交易——传统技术分析相对强弱指数RSI的原理及实现
- 量化交易——传统技术分析能量潮指标OBV的原理及实现
- 量化交易——传统技术分析随机震荡指标STO的原理及实现
- 量化交易——传统技术分析随机震荡指标STO的原理及实现
- 量化交易——传统技术分析布林通道BollingerBands的原理及实现
- 量化交易——传统技术分析顺势指标CCI的原理及实现
- MACD指数平滑异同移动平均线
- 指数平滑异同移动平均线[MACD]
- MACD指数平滑异同移动平均线
- 平滑异同平均线指标——MACD
- MACD指标(平滑异同移动平均线)理论应用
- 看盘ABC:平滑异同移动平均线(MACD)
- 看盘ABC:平滑异同移动平均线(MACD)
- 做波段的保护神——MACD平滑异同平均线
- 指数平滑异同平均线(MACD)
- 趋向类指标: MACD 指数平滑异同平均线
- 股票技术指标详解--指数平滑移动平均线(MACD)
- 设计模式之建造者模式
- acm第一战 新赛季的无名小辈
- 模拟strcpy与strncpy
- C++
- 如何在GDB中关联源代码
- 量化交易——传统技术分析平滑异同移动平均线MACD的原理及实现
- 上传本地代码到github
- solr5.5+tomcat8+jdk1.8配置
- AtCoder:AtCoder Group Contest(思维)
- mysql非法关机导致 错误 1067:进程意外终止
- Find a multiple (POJ
- Median of Two Sorted Arrays
- 杭电5305 Friends 搜索
- c++之A a和A *a=new A()