python计算最大回撤_【邢不行|量化小讲堂系列16-Python量化入门】完整策略框架:以均线策略为例...

引言:

邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助。

【历史文章汇总】请点击此处

【必读文章】:

【邢不行|量化小讲堂系列27-Python量化入门】EOS期现套利,一周时间,15%无风险收益

【邢不行|量化小讲堂系列20-Python量化入门】10年400倍策略分享(附视频逐行代码讲解)

个人微信:xbx9585,有问题欢迎交流。

文中用到的A股数据可在www.yucezhe.com下载,这里可以下载到所有股票、从上市日起的交易数据、财务数据、分钟数据、分笔数据、逐笔数据等


完整策略框架:以均线策略为例

—策略框架—

应很多同学的要求,本篇文章介绍如何从头到尾的编写一个策略框架。一个完整的策略框架主要包含以下三个部分:

  1. 产生买卖信号的策略。
  2. 根据买卖信号生成资金曲线。
  3. 根据资金曲线计算策略评价指标。

其中第一部分是最重要的。本文用最简单的均线策略作为示范,关于均线策略的详细内容可以看之前的文章【量化小讲堂 – python & pandas技巧系列】使用python计算移动平均线。第二、第三部分是通用部分,在大家熟悉框架之后,可以将第一部分修改为自己的策略,其他部分直接复用。

第一部分:产生买卖信号的策略,以均线策略为例

说到均线大家应该都不陌生,均线应该是股市技术分析中最简单的一个指标了,就是股价在一段时间的平均值,一般是指移动平均线。例如,5日均线就是最近5个交易日股票的收盘价之和除以5。均线最早是由著名的美国投资专家Joseph
E.Granville于20世纪中期提出来的,由于其简单容易理解的特点,成为当今应用最普遍的技术指标之一。基于均线本身的趋势性和稳定性,出现了很多利用均线的不同形态来产生买卖信号的策略。

本文采用的均线策略的具体规则为:

  1. 当短期均线上穿长期均线时,视为买入信号,以第二天开盘价全仓买入;
  2. 当短期均线下穿长期均线时,视为卖出信号,以第二天开盘价全仓卖出。

可见下图示例:

9ec0bdc9ee01d8e3056fc0475ae5983f.png

第二部分:根据信号生成资金曲线

在产生买卖信号后,可以据此生成每天的仓位。实际操作中可以不用每次都全仓买卖,本文为了方便,每次买卖都是全仓买入或者卖出。所以仓位只有0和1两种状态,1表示满仓,0表示空仓。由于本文以个股为例,所以出现买卖信号后的第二天开盘可能会出现涨停或跌停的情况,当出现涨跌停时当天不进行买卖操作,仓位和前一天的仓位保持一致。有了每天的仓位之后,就可以计算出每日涨跌幅、资金曲线。

第三部分:根据资金曲线计算策略评价指标

根据资金曲线可以计算相应的统计指标来判断这个策略的好坏。关于指标的相关内容可以参考之前的一篇文章【量化小讲堂 – Python、Pandas系列】如何判断一个策略的好坏?。


—实战—

一、选择标的股票并计算复权后的价格

假设我们选择万科A(sz000002)作为考虑的目标股票(程序中可以通过修改股票代码任选一只个股),为了数据的真实可靠,本文重新计算了复权后的开盘价和收盘价,后面计算均线和涨跌幅都以复权后的数据为基础。

二、判断所选股票的上市天数

接着,为了回测结果的可靠性,本文在执行均线策略之前会先判断该股票上市至今的交易天数,默认的交易天数下限是500天(可以自行设置),即如果该股票交易天数小于500,则不运行策略。

三、产生买卖信号

所选股票确定之后就是计算短期和长期均线了,本文默认采用的是5日移动平均线和60日移动平均线(在程序中是参数,也可以自行设置),当5日均线大于60日均线时,给出买入信号;当5日均线小于60日均线时,给出卖出信号,两者相等时维持之前的信号判断。

四、根据信号产生资金曲线

根据上一步产生的买卖信号,可以得到每天的仓位。有了每天的仓位之后,就是计算资金曲线的日涨跌幅了。在这一步,本文为了尽量接近真实的投资情况,考虑了手续费和成交的滑点。默认的手续费为双边千分之2,默认的滑点为双边千分之1(在程序中为参数,可自行设置)。具体的计算过程参见程序代码的注释。

在得到资金曲线每天的涨跌幅之后,可以计算出资金曲线。本文在计算回测资金曲线的时候,从它上市250个交易日(在程序中为参数,可自行设置)之后才开始计算,并且最早不早于2006年1月1号(在程序中为参数,也可自行设置)。

五、根据资金曲线计算统计指标

在得到资金曲线之后,本文计算了最近250个交易日(在程序中为参数,可自行设置)的股票和策略的累计收益率以及每年(月,周)的股票和策略收益,并计算了股票和策略相应的年(月,周)的胜率进行比较。

为了直观的看出采用均线策略后实际的交易情况,本文还记录了每次交易(一买一卖视为一次交易)的盈亏情况以及股票同期的涨跌幅,并计算了与交易相关的一些指标,包括交易次数、最长持有天数、每次平均涨幅、单次最大盈利和亏损、年均买卖次数、最大连续盈利次数和最大连续亏损次数。

最后,本文计算了该均线策略在回测期间的年化收益和最大回撤,并和股票的年化收益及最大回撤做了一下对比。

—程序—

要运行均线策略,需要某只股票的历史交易数据,在www.yucezhe.com可以下载到所有股票历史至今的数据。如下图所示,每一行是每一天的数据:

549b09f64cb94c20c5eb7f438637122e.png

数据有以下的字段:

【code】股票的代码,上证股票以sh开头,深证股票以sz开头

【date】交易日期

【open】开盘价

【high】最高价

【low】最低价

【close】收盘价

【change】涨跌幅,复权之后的真实涨跌幅,保证准确

【volume】成交量

【money】成交额

【traded_market_value】流通市值

【market_value】总市值

【turnover】换手率,成交量/流通股本

【adjust_price】后复权价,复权开始时间为股票上市日,精确到小数点后10位


下面是代码的截图,代码里面有详细的注释,有问题可以留言,附件中有程序的源码,回复即可下载。

d346601c0cb98520d4cec1dfbf3d2f23.png

c7016bb02b4df8b9940006c3b04d5366.png

0f5bc3a673067d05f207a9fd1114f34d.png

332a4e08edf49191e0f594bbd2683d2c.png

d7ff6b9e4d1f569dc423bc89e08f81de.png

655fb0c9e514e12600a659f517f86ae7.png

3a476e747422b2f1a8432b323b01856b.png

21213a127d96adc7d6ae4a26edb406e9.png

0fe4b5ae21a6be933ded8931aae76f74.png

b2236d15b7a90624ad505e4d44f82ca2.png

本文以万科A为例,将数据下载下来,运行代码,可以看到在万科A这只股票上运用均线策略的回测结果。

首先是最近250天股票和策略的累计涨跌幅:

472b35f17a8851030f44606256bd959f.png

这有助于我们直观的了解策略在最近一段时间的表现情况,从数据来看,均线策略在15年的效果好像不怎么样,还不如直接持有万科的股票,不过本文目的主要是教大家如何从头到尾用python编写一个完整的策略,均线策略只是为了方便作为例子,大家也可以开发其他一些更好的策略。

接着是过去每年、每月、每周股票和策略的收益对比:

bdbfa59207b4e30a0dfbdfb70a1af78c.png

5358ac25f7ee96f000768070c7d9d5c7.png

578a8e13d3c60ca8cb08b2600bb60638.png

b0d6aed90958f26e024e0e4a89875f4a.png

9e327ace7401cf2da612a46c8df3119e.png

从结果可以看出,该均线策略的年胜率和股票一样,为60%,月胜率低于股票的月胜率但周胜率却略高于股票本身。

接下来是每次交易的收益情况和同期的股票涨跌幅,每次交易是盈利还是亏损和同期股票的收益正负密切相关。

dbdd5248834c8608e31d01b248a40511.png

然后是账户交易的各项指标的统计。

022dfd510f45bbce31f3dc301538afd0.png

从结果可以看到,对万科这只股票采用均线交易策略的话,从它上市至今一共交易了98次,最长的持有天数为248天。单次交易的最大盈利为176.16%,赚了一倍多,而单次最大亏损为-19.84%,平均每次交易的收益大概为7.75%。1年内平均交易次数差不多为4次,交易频率比较低,最大连续盈利4次,但最大连续亏损也达到11次之多,这可能对大部分人来说有点无法忍受。

f61d665eb8ea81b4813ed8567292e841.png

最后是在回测期间(2006年1月1号之后)策略和股票的年化收益及最大回撤。策略的年化收益为37.7%,超过了股票本身的年化收益32.9%,最大回撤为-48.5%,远小于股票的最大回撤-79%,说明该策略总的来说效果还是不错的。大家可以试着选择其他股票或者修改均线策略的参数,再看看运行的效果如何。

以上就是构建一个完整策略的框架的整个过程,大家如果有其他的策略,只需要将第一部分信号产生方式改成自己的策略逻辑就可以进行回测了。


对本文研究有自己的想法的朋友,欢迎在评论区留言。关于文中的代码、数据,以及下期《量化小讲堂》想了解的内容,也可以加我个人微信xbx9585交流。

如果你想入门量化,但是始终找不到方向,可以加入我的知识星球。我会在里面解答你的问题,分享我的感悟,不论是投资、技术,还是职业选择、思维方式。

-- 学习和成长从来都不是一个人的事 --​​​

42f655438530902b22a0afed61bb7dfc.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
## 讲师介绍: 近 5 年个人投资理财年化收益平均超 25%。如果你也想提升自己的睡后收入,轻松赚钱,那么这门课就是为你量身打造。课程基于一个完整真实的量化交易业务来讲授,并融入老师的理财经验以及使用编程技术辅助投资的技巧,让你面对各种复杂投资情况也能做到游刃有余。 ## 学习目标: 从不懂“理财”开始到实现自动交易,成为一个“技术流”理财高手 编程技术 + 核心量化策略 + 交易系统开发 + 讲师经验分享,学会用技术辅助理财 本课程从最基础的什么是量化开始讲起,即使对投资理财不了解同样可以学习,轻松入门无压力。 从如何获取数据开始,到实现实盘交易,课程对量化交易的每一步都进行细致讲解,为你铺开量化交易的每一个细节。 不仅仅只是教你学会使用某种工具,更会教给你量化交易的投资思想,让你面对各种情况都游刃有余。 ## 课程亮点: 设计适合自己并能适应市场的交易策略,才是量化交易的灵魂 课程亲手带你设计并实现两种交易策略,快速培养你的策略思维能力 1. 择策略:通过这个策略学会如何利用均线,创建择策略,优化股票买入卖出的间点。2. 选股策略:掌握选股策略的核心逻辑,并基于收益率创建动量选股策略,并验证其有效性。 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 第三方平台大而全,不易扩展,效率还差,信息安全也是大问题,打造自己的交易平台才是更优解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值