你们是否留意到《Python实战-构建基于股票的量化交易系统》小册子的介绍中有一副图:bash
接下来,咱们手把手教你们如何来绘制标记着上证指数涨跌周期的图片。此处会涉及到matplotlib、pandas、tushare、numpy等Python第三方库的使用。markdown
首先使用tushare的ts.get_k_data
接口获取上证综指2008年至2019的日交易数据。函数
#获取上证综指2008年至2019的日交易数据 sh=ts.get_k_data('sh',start='2008-1-1', end='2019-1-1') print(sh.head()) date open close high low volume code 183 2008-10-06 2267.39 2173.74 2267.39 2172.57 60938100.0 sh 184 2008-10-07 2101.09 2157.84 2183.00 2072.90 56902600.0 sh 185 2008-10-08 2095.91 2092.22 2127.08 2059.09 50759500.0 sh 186 2008-10-09 2125.57 2074.58 2130.87 2063.41 45071000.0 sh 187 2008-10-10 1995.96 2000.57 2027.83 1963.18 54077500.0 sh 复制代码
使用matplotlib的plot()
函数绘制上证指数的收盘价。spa
sh['close'].plot(figsize=(16,8)) 复制代码
从图中能够看到2014年开始的那一轮牛市,从2014年7月持续到2015年6月,这11个月指数竟然从2075.48点涨到了5178.19点。咱们使用matplotlib的annotate ()
函数在图表中标注下牛市的起点和终点。3d
plt.annotate('牛市起点', xy=('2014-7-1',2054), xytext=('2014-3-1',2500), bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5), arrowprops=dict(facecolor='red', shrink=0.05),fontsize=12) 复制代码
接下来用matplotlib的axhline()
函数将指数中位值设置为水平参考线(horizontal),用matplotlib的axvline()
函数将指数最小值所在交易日设置为垂直参考线(vertical)。code
plt.axhline(y=sh['close'].median(), c='r', ls='--', lw=2) plt.axvline(x=sh[sh['close'].values == sh['close'].min()].index, c='g', ls='-.', lw=2) 复制代码
接下来用matplotlib的axhspan()
函数将牛市的起始点位设置为平行于x轴 的参考区域(horizontal),用matplotlib的axvspan ()
函数将牛市的起始交易日设置为平行于y轴的参考区域 (vertical)。orm
plt.axhspan(ymin=2075.48, ymax=5178.19, facecolor='purple', alpha=0.3) plt.axvspan(xmin='2014-7-1', xmax='2015-6-15', facecolor='g', alpha=0.3) 复制代码
接下来咱们对图表的样式细节进行调整。好比去掉图形上边和右侧的边框、设置坐标轴上的刻度线位置、将刻度线放在坐标轴内侧。接口
# 样式调整 # spines设置图表left\right\bottom\top边框,此处去掉图形上边和右侧的边框 for spine in plt.gca().spines.keys(): print(spine) if spine == 'top' or spine == 'right': plt.gca().spines[spine].set_color('none') # 设置坐标轴上的刻度线位置(其实这里的设置跟默认同样) plt.gca().xaxis.set_ticks_position('bottom') plt.gca().yaxis.set_ticks_position('left') # 将刻度线放在坐标轴内侧 plt.tick_params(direction = 'in') 复制代码
关于完整代码能够加入小册交流群获取。更多的量化交易内容欢迎你们订阅小册阅读!!图片