1 计算并绘制唐奇安通道
唐奇安通道是由上阻力线、下支撑线和中心线这三条线组成。
上阻力线 = 过去N天的最高价
下支撑线 = 过去N天的最低价
中心线 =(上线 + 下线)除以 2
在实际的分析场景里,N的取值一般是20,在如下的
displayDonChannel.py范例中,就用20天为周期,来计算并绘制唐奇安通道。
01 # coding=utf-8 02 import pandas as pd 03 import matplotlib.pyplot as
plt 04 from mpl_finance import candlestick2_ochl 05 # 读数据 06 stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv') 07
fig, ax =
plt.
subplots() 08 candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red', colordown='green') 09 stockDf['up'] = stockDf['High'].rolling(window=20).max() 10 stockDf['up'].plot(color="green",label='上阻力线') 11 stockDf['down'] = stockDf['Low'].rolling(window=20).min() 12 stockDf['down'].plot(color="navy",label='下支撑线') 13 stockDf['mid'] = (stockDf['up']+stockDf['down'])/2 14 stockDf['mid'].plot(color="red",label='中心线') 15 ax.set_ylabel("收盘价(元)") 16 ax.grid() # 带网格线 17 ax.legend() # 绘制图例 18 #设置x轴
文字间隔和旋转角度 19 index=stockDf.index[stockDf.index%7==0] 20 xtics=stockDf['Date'][stockDf.index%7==0] 21
plt.xticks(index,xtics) 22
plt.setp(
plt.gca().get_xticklabels(), rotation=30) 23
plt.rcP
arams['font.sans-serif']=['SimHei'] 24
plt.title("600530交大昂立20天唐奇安通道
效果图") 25
plt.show()
在第5行到第8行的
代码里,从csv
文件里读到了股票交易数据,并通过
调用candlestick2_ochl
方法绘制了k线图。在第9行里,通过rolling(window=20)
方法得到了过去20天的最高价集合,在此基础上通过max()
方法得到了过去20天的最高价,随后用第10行的plot
方法绘制了上阻力线。
随后用同样的
方法,用第11行和第12行的
代码计算并绘制了下支撑线。在第13行里,设置了中心线为上阻力线和下支撑线的均值,并在第14行绘制了中心线。
由于在绘制上阻力线、下支撑线和中心线的时候都通过label参数设置了图例,随后在第17行用legend
方法绘制了图例
效果。为了能更直观地对比数据,所以在第16行里用grid
方法设置了网格
效果。
这里同样是通过第19行到第22行的
代码,设置了x轴
文字的间隔以及旋转角度,并在第24行里用title
方法设置了
标题。为了能
显示中文标题,所以还需要
加上第23行的语句。运行本范例,能看到如下图所示的
效果,由于计算周期是20日,所以之前19日看不到对应的价格通道。而且从图上看,股价均在通道内运动,并没有向上和向下突破的动作,也就是说,从这些天的交易数据里,看不到基于20日唐奇安通道的买卖信号。
2 计算并绘制布林带通道
和上文描述的唐奇安通道类似,布林带通道也是通过上阻力线、下支撑线和中心线来绘制价格通道,这里的三条线算法如下所示。
中心线 = N日移动均线
上阻力线 = 中心线+两倍过去N天收盘价的标准差
下支撑线 = 中心线-两倍过去N天收盘价的标准差
而N的取值一般也是20。在如下的
displayBollingerBands.py范例中,将演示计算并绘制20日周期布林带通道的做法。
01 # coding=utf-8 02 import pandas as pd 03 import matplotlib.pyplot as
plt 04 from mpl_finance import candlestick2_ochl 05 # 读数据 06 stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv') 07
fig, ax =
plt.
subplots() 08 candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red', colordown='green') 09 stockDf['mid'] = stockDf['Close'].rolling(window=20).mean() 10 stockDf['std'] = stockDf['Close'].rolling(window=20).std() 11 stockDf['up'] = stockDf['mid'] + 2*stockDf['std'] 12 stockDf['down'] = stockDf['mid'] - 2*stockDf['std'] 13 stockDf['up'].plot(color="green",label='上阻力线') 14 stockDf['down'].plot(color="navy",label='下支撑线') 15 stockDf['mid'].plot(color="red",label='中心线') 16 ax.set_ylabel("收盘价(元)") 17 ax.grid() # 带网格线 18 ax.legend() # 绘制图例 19 #设置x轴
文字间隔和旋转角度 20 index=stockDf.index[stockDf.index%7==0] 21 xtics=stockDf['Date'][stockDf.index%7==0] 22
plt.xticks(index,xtics) 23
plt.setp(
plt.gca().get_xticklabels(), rotation=30) 24
plt.rcP
arams['font.sans-serif']=['SimHei'] 25
plt.title("600530交大昂立20天布林带通道
效果图") 26
plt.show()
本范例和之前的唐奇安通道的范例很相似,区别主要集中在第9行到第15行。在第9行里,先用rolloing和 mean
方法计算过去20天的均值,以此作为中心线,再通过第10行的rolling和std
方法,计算过去20天收盘价的标准差,在此基础上再通过第11行和第12行的
代码计算上阻力线和下支撑线。
完成计算后,是通过第13行到第15行的plot
方法绘制三条线,同时用label参数设置了图例。运行本范例,能看到如下图所示的
效果。其中布林带通道的宽度是由过去20天收盘价的标准差决定,也就是说,如果过去20天收盘价波动比较大,那么布林带通道就比较宽,反之就比较狭窄。而且,虽然有个别价格向上或向下突破通道,但未形成“有效突破”,所以后期价格依然在通道内波动,由此大家能感受到“上阻力线”和“下支撑线”的“阻力”和“支撑”
效果。
3 计算并绘制鳄鱼组线
鳄鱼组线其实不属于价格通道指标,但也是通过三条线来研判股价的走势,在鳄鱼组线里,三条线分别叫上唇、牙齿和下颚,具体算法如下所述。
上唇线是5天周期的价格平滑移动平均线( SMMA ),向未来延后3天,也就是说第8天才会开始展示上唇线,上唇线一般用绿线绘制。
牙齿线是由8天周期的价格平滑移动平均线,向未来延后5天,一般用红线绘制。
下颚线由13天周期的价格平滑移动平均线向未来延后8天,一般用蓝色绘制。
这里的平滑移动平均线SMMA也叫流畅移动平均线,这里以5天周期为例,讲下具体的算法。
第1个SMMA值(即第5天的平滑平均值) = 前五天收盘价的均价
第6天的值 = (该周期内收盘价的和 –第1个SMMA值 + 第6天的收盘价)/5
第7天的值 = (该周期内收盘价的和 – 第2个SMMA值 + 第7天的收盘价)/5
依次类推,第n天的值 = (该周期内收盘价的和 –上个SMMA值 + 第n日收盘价)/5
这里的算法涉及到计算平滑移动平均线,在如下的
displayCrocodileLi
nes.py范例中,就将演示用pandas库计算相关数值,并用matplotlib绘制鳄鱼组线的做法。
01 # coding=utf-8 02 import pandas as pd 03 import matplotlib.pyplot as
plt 04 from mpl_finance import candlestick2_ochl 05 #计算各种SMMA值 06 def setSMMAVal(df, period): 07 for i in range(len(df)): 08 if i<period: 09 df['SMMA' + str(period)] = df.ix[i,'MA'+ str(period)] 10 else: #按算法计算SMMA值 11 df.ix[i,'SMMA'+ str(period)]=df.ix[i,'MA'+ str(period)] + (df.ix[i,'Close'] - df.ix[i-1,'SMMA'+ str(period)])/period 12 return df
在第6行的setSMMAVal
方法里,是根据参数period指定的周期,计算各种SMMA值。具体而言,在第7行的for循环里,如果当前遍历的索引号小于周期值,则设置SMMA值为当天的MA均值,否则的话,则通过第11行的
代码,按SMMA的算法,计算当天的值。
请注意这里的列名是动态拼接的,比如在第9行,如果当前参数是5,那么其实是用df['MA5'] 的值来填充df['SMMA' + str(period)]值。
13 #计算三条鳄鱼组线 14 def setCrocodileVal(df): 15 # 用shift
方法,把数据顺延 16 df['up'] = df['SMMA5'].shift(3) 17 df['mid'] = df['SMMA8'].shift(5) 18 df['down'] = df['SMMA13'].shift(8) 19 return df
在得到SMMA的值以后,可以通过第14行的setCrocodileVal
方法来计算3条鳄鱼组线的值,这里的技巧是shift
方法,比如在第16行里,是用df['SMMA5'].shift(3)
代码,把当天的SMMA5值向后顺延3天,以此设置上唇线的值。在第17行和第18行里,也是用shift
方法,顺延对应的SMMA值,得到牙齿线和下颚线的值。
20 # 读数据 21 stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv') 22 #算均值 23 stockDf['MA5'] = stockDf['Close'].rolling(window=5).mean() 24 stockDf['MA8'] = stockDf['Close'].rolling(window=8).mean() 25 stockDf['MA13'] = stockDf['Close'].rolling(window=13).mean() 26 #算三个SMMA值 27 stockDf = setSMMAVal(stockDf, 5) 28 stockDf = setSMMAVal(stockDf, 8) 29 stockDf = setSMMAVal(stockDf, 13) 30 #计算三个鳄鱼组线的值 31 stockDf = setCrocodileVal(stockDf)
通过第21行的
代码得到csv里股票数据后,先通过第23行到第25行的
代码,计算5天、8天和13天的均价,并通过第27行到第29行的
代码计算三个SMMA值,随后再通过第31行的
代码计算三个鳄鱼组线的值,至此完成计算,在后文里开始绘图。
32
fig, ax =
plt.
subplots() 33 #为了突出三条组线,设置了透明度为0.5 34 candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red',alpha=0.5, colordown='green') 35 #绘制三条组线 36 stockDf['up'].plot(color="green",label='上唇线') 37 stockDf['down'].plot(color="red",label='牙齿线') 38 stockDf['mid'].plot(color="blue",label='下颚线') 39 ax.set_ylabel("收盘价(元)") 40 ax.grid() # 带网格线 41 ax.legend() # 绘制图例 42 #设置x轴
文字间隔和旋转角度 43 index=stockDf.index[stockDf.index%7==0] 44 xtics=stockDf['Date'][stockDf.index%7==0] 45
plt.xticks(index,xtics) 46
plt.setp(
plt.gca().get_xticklabels(), rotation=30) 47
plt.rcP
arams['font.sans-serif']=['SimHei'] 48
plt.title("600530交大昂立鳄鱼组线
效果图") 49
plt.show()
在第36行到第38行的
代码里,是通过plot
方法绘制了三条鳄鱼组线,同时通过color参数分别设置了颜色,通过label参数设置了图例。其他的可视化
代码之前都已经分析过,这里就不再讲述了。运行本范例,能看到如下图所示的
效果。
由于在绘制K线图时通过alpha参数设置了透明度,所以这里三条鳄鱼组线更加明显。
按照股市分析理论,如果上唇线在牙齿线之上,同时牙齿线在下颚线之上,说明当前进入股价上升阶段。如果相反,上唇线在牙齿线之下,而牙齿线在下颚线之下,则说明股价进入下跌阶段。如果上图那样三条线相互交错缠绕,则通过该指标说明当前市场没有发出明确的买卖交易信号。不过本范例的
主题是数据分析,所以请更关注计算三条线时用到的相关python
方法。
此文转载文,如有侵权联系小编
删除
源码
获取加群:1136192749
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。