请选择 进入手机版 | 继续访问电脑版
楼主: 邢不行
3280 18

[程序化交易] 【邢不行|量化小讲堂系列36-python量化入门】如何通过3行Python代码计算最大回撤 [推广有奖]

院士

5%

还不是VIP/贵宾

-

威望
1
论坛币
26743 个
通用积分
135.0308
学术水平
485 点
热心指数
505 点
信用等级
456 点
经验
44525 点
帖子
547
精华
26
在线时间
1111 小时
注册时间
2010-4-30
最后登录
2024-4-1

邢不行 在职认证  发表于 2019-1-7 10:11:32 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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


【必读文章】:
《10年400倍策略分享-附视频逐行讲解代码》

            《EOS期现套利,一周时间,15%无风险收益》

【历史文章汇总】:https://bbs.pinggu.org/thread-3950124-1-1.html


微信个人号:coinquant,有问题欢迎交流




如何通过3行Python代码计算最大回撤




1.webp.jpg


作者:陈可桐  修改:邢不行

如何评价一个量化策略的好坏?


我自己的话,首先是看年化收益。收益太差,基本就不用看了。


其次我就看最大回撤


最大回撤属于风险指标,判断一个策略风险的高低。很多人评价风险,会用一些比较学术的指标,例如方差、波动率等。但我觉着这些都太不直观,比如算出来一个方差,0.035,根本就不知道啥意思。


本文通过逐行讲解python代码的方式,详细解释什么是最大回撤,以及具体计算方法,完整的源代码见文末

另外,除了年化收益,最大回撤之外,我第三看中的指标是什么呢?这个大家可以在评论中回复,感兴趣的人多的话,下次写篇文章讲讲。


最大回撤是评价策略风险的指标,它的含义是:在某一个高点之后,资金曲线下挫最大的幅度。也就是这个策略在最坏的情况下,会亏掉多少钱



111.webp.jpg






2.webp.jpg


例如,在①的位置开多头仓位,一直没有平仓。那么在持仓期间,就发生了两次比较大的回撤(图中的黄色箭头),以及若干次小的回撤(图中的红色箭头)。


而最大回撤,就是要找到这些回撤中使资金损失最大的一次。并且用百分比的方式量化地表示出来


最大回撤的概念虽然直观,但到底应该怎么计算呢?比如下面这根资金曲线:

3.webp.jpg




在这根资金曲线上,从 ① 到 ②,从 ③ 到 ④,都发生了比较大的回撤。从百分比上来讲,究竟哪次最大?我们用代码和数据说话。




222.webp.jpg






首先,我们读取策略的已经计算完成的资金曲线,也就是回测之后得到的结果。原始数据是这样的:


4.webp.jpg




实际上,要计算最大回撤,我们需要的只有 candle_begin_time(k线开始时间)和 equity_curve(资金曲线的值)这两列。选出数据中我们需要的部分,保存在 equity 这个 dataframe里。

5.webp.jpg




然后,我们用 expanding() 计算资金曲线的滚动最高值(max to here)

6.webp.jpg




什么叫滚动最高值呢:

7.webp.jpg




图中的红线就是滚动最高值。表示截至某个时间点,资金曲线的最大值


接下来,我们计算回撤,也就是资金曲线在滚动最高点之后,下挫的百分比:


8.webp.jpg




这里计算的 dd2here 是:回撤完之后,资金剩余的百分比。在图中直观地看:

9.webp.jpg




浅色的线就是我们计算得到的 dd2here 。比较明显的是,在图中的※位置,回撤结束后只剩下约 20%的资金,几乎可以说是整根资金曲线中发生的最大的回撤。


下一步,我们只要找出 dd2here 这列数据中的最小值,就可以知道最大回撤了。


10.webp.jpg




根据 dd2here 对 equity 进行从小到大的排序,那么第一行就包含了 dd2here 的最小值。


取第一行的candle_begin_time 和 dd2here,它们就是最大回撤结束的时间,以及回撤结束时资金剩余的百分比。我们把这两个值分别赋给 end_date 和 remains,那么很明显,最大回撤就是 1 - remains


最后,我们需要找到最大回撤开始的时间,也就是在最大回撤结束之前,最后一次滚动最高值出现的点,也就是资金曲线的最高点。在图中表示为这个点:

11.webp.jpg




找到这个点的代码如下:

12.webp.jpg




首先选出资金曲线在最大回撤结束之前的部分。


然后,将这部分资金曲线的 dataframe 根据资金的值 (equity_curve) 进行从大到小排序,那么第一行就包含了资金曲线的最大值,它的时间也就是我们想要找的最大回撤开始时间。


最后,我们将最大回撤和这两个时间点打印出来:

13.webp.jpg




确实是产生了高达79.34%的回撤。


14.webp.jpg




最大回撤的计算就完成了。




333.webp.jpg




下面是完整的最大回撤计算代码:


15.webp.jpg




老规矩,论坛的朋友们可以下载程序的代码,免费,回复可见。


如果有疑问,或者想要了解其他内容,也可以加我微信(xingbuxing0807)和我交流。

欢迎在评论区讨论,回复本帖还可以获得论坛币哦~

本帖隐藏的内容

量化小讲堂36:如何通过3行Python代码计算最大回撤.rar (712.28 KB)




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:回撤 python 量化 编程

不管去哪里 只要在路上
hifinecon 发表于 2019-1-7 10:33:18 |显示全部楼层 |坛友微信交流群

使用道具

这么好的文章一定要好好学习下,今晚就实现一把

使用道具

大鱼大水 发表于 2019-1-19 17:14:54 |显示全部楼层 |坛友微信交流群
马上下载下来试试

使用道具

蓝色永恒 发表于 2019-1-20 21:26:31 |显示全部楼层 |坛友微信交流群
一定要好好学习

使用道具

kide2019 发表于 2019-2-2 12:43:56 |显示全部楼层 |坛友微信交流群
谢谢分享

使用道具

obaby85 在职认证  发表于 2019-2-4 01:55:37 |显示全部楼层 |坛友微信交流群
一定要好好学习

使用道具

唯心Y不易 发表于 2019-3-18 23:23:25 来自手机 |显示全部楼层 |坛友微信交流群
邢不行 发表于 2019-1-7 10:11
引言:
邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向, ...
学习学习

使用道具

不好过 发表于 2019-3-19 09:22:15 |显示全部楼层 |坛友微信交流群
不错,学习学习,感谢楼主

使用道具

redrose007 发表于 2019-3-27 12:39:57 |显示全部楼层 |坛友微信交流群
在经管论坛支持邢大~~~

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-16 14:47