为了账号安全,请及时绑定邮箱和手机立即绑定

Python进阶量化交易场外篇5——标记A股市场涨跌周期

新年伊始,很荣幸笔者的《教你用 Python 进阶量化交易》专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习本专栏内容,因此同学们无需担心专栏内容在学习上的困难,更多的是明确自己学习的目的即可。当然笔者也欢迎同学们踊跃留言,说出自己想扩展的知识点,笔者会根据同学们的意愿选择性的推出一些内容。

在第一篇《管理概率==理性交易》中笔者结合一个简单的市场模型介绍了为什么在没有概率优势的前提下参与交易会亏钱,其实股票交易和玩一个游戏、做一个项目理念是相通的,需要章法、需要制定策略,否则就和抛硬币赌博一样一样的,用量化交易可以帮助我们管理好概率,更理性的去下单。

在第二篇《线性回归拟合股价沉浮》中笔者在专栏《股票交易策略开发:走势线性回归选股策略》小节的基础上对线性回归方法的策略应用做进一步的扩展介绍。由于线性回归作用于股票收盘价的整个周期,前后两段完全相反的周期会彼此作用,最终影响拟合的角度值,于是笔者设定窗口期用移动窗口的方式拟合股价的走势,寻找角度曲线的拐点以预示新一轮的反转走势,给大家提供一个衍生的策略思路。

在第三篇《最大回撤评价策略风险》中笔者在专栏
《股票交易数据可视化:买卖区间下策略收益绘制》的基础上对策略的最大回撤指标做一定的扩展介绍。投资是有风险的,那么如何去衡量这个风险呢?最大回撤率就是一种直观的将风险切实量化的指标,它描述了买入股票后,在策略出现最糟糕的情况下会损失多少钱,这也直接关系到了风险策略中止损因子的设定。

在第四篇《寻找最优化策略参数》中笔者在专栏
《股票交易策略开发:趋势突破择时策略》的基础上对寻找最优化策略参数的方法做一些扩展介绍。对于寻找最优化参数的方法可以选择枚举法或者蒙特卡洛法。枚举法适用于解决效率要求不高,样本规模小的问题。蒙特卡洛法得到的结果并不一定是最优的,但是在大规模样品的场合下可以更快地找到近似最优结果。

—————————————————————————————————————

本次场外篇笔者在《股票交易数据的自动下载》的基础上对matplotlib绘图工具的使用方法做一些扩展介绍,最终会在A股历史走势图中标记出市场涨跌周期
首先使用tushare的ts.get_k_data接口获取上证综指2008年至2019的日交易数据。ts.get_k_data接口:只返回日期(date)、开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、股票代码(code)七列,索引为序号而非日期。获取数据的速度要快些,可以返回每一只股票从上市开始到当前交易日的所有日线数据。

#获取上证综指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()函数绘制上证指数的收盘价。

sh['close'].plot(figsize=(16,8))

图片描述从图中可以看到2014年开始的那一轮牛市,从2014年7月持续到2015年6月,这11个月指数居然从2075.48点涨到了5178.19点。我们使用matplotlib的annotate ()函数在图表中标注下牛市的起点和终点。

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()函数将指数中位值设置为水平参考线。用matplotlib的axvspan ()函数将牛市的起始交易日设置为平行于y轴的参考区域 。

plt.axhline(y=sh['close'].median(), c='r', ls='--', lw=2)

图片描述
接下来我们对图表的样式细节进行调整。比如去掉图形上边和右侧的边框、设置坐标轴上的刻度线位置、将刻度线放在坐标轴内侧。

# 样式调整
# 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')

图片描述
关于完整代码可以加入专栏交流群获取。更多的量化交易内容欢迎大家订阅专栏阅读!!

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消