【邢不行|量化小讲堂系列42-实战篇】8个简单指标,帮你系统评价策略的好坏

引言:

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

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

【必读文章】EOS期现套利,一周时间,15%无风险收益

                     10年400倍策略分享(附视频逐行代码讲解)

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


8个简单指标,帮你系统评价策略的好坏

这是邢不行的第 42期分享。

来源 | 邢不行(ID:xbx_quant)

转载请联系授权(微信号:xbx9585)

当我们对一个策略进行回测,得到了结果,资金曲线摆在面前,那怎么评价这条资金曲线的好坏?开干,还是不干?这是个问题。

假如有以下三条资金曲线:

三条资金曲线的开始时间(2017年初)与结束时间(2019年1季度)都相同,并且都是从1开始。也就是假设一开始投入1块钱,按照固定的策略进行投资后,把每天结束后的净值画出来连成线,就成了资金曲线。

你更喜欢哪一条曲线?最终又会选择哪一条曲线?

这三条曲线,背后的策略是我针对数字货币市场开发的几个策略。它们都有上万倍的收益,不要吃惊,因为2017、2018年币圈行情好,这并不罕见。

然而,看到策略最终收益这么优秀,很多人就眼红耳热,决定卖房卖车,加大杠杆上了。

其他市场也是一样,只关心收益的大有人在。国内A股就是很好的例子,春节后市场火爆,就有人敢配资加个10倍杠杆,干柴烈火。

这显然不理智。稍微理智一点的人,还会看看最大回撤,评价一下风险。但是,仅仅看收益和回撤也不够全面。

怎么更加全面的认识资金曲线,怎么确定这个策略是不是适合自己?这篇文章就介绍一些常用的策略评价指标,告诉你怎样科学、成体系地评价策略。

 

01

评价净值

先看你最关心的

 

我们用这样一根资金曲线来举例子。

面对资金曲线,我们的第一反应都是看收益。单纯评价收益的指标无非两个:最终收益、年化收益

最终收益是策略在整个回测期间的总收益,而年化收益,则是将最终收益均匀地分配到每一年中,得到的收益。

累积净值 61822.06 倍,表示经过大约两年的投资,原来的1元变成了61822.06元;而年化收益33563.44%指的是,平均地看,每一年的收益是33563.44%,也就是平均来说,1元钱放到这个策略里,经过1年后会变成335.6344元。

收益为什么要年化?当我们需要比较不同的策略,甚至需要把策略和其他的金融产品放在一起比较时,就非常需要年化收益:策略A在3年内翻了3倍,策略B在4年内翻了4倍,金融产品C每年的收益率为20%,应该怎么选择?

这时就需要用年化收益来统一口径:3年3倍的策略A,年化收益约为44%;4年4倍的策略B,年化收益41%;而金融产品C的年化收益就是20%。那么从收益出发,就应该选择策略A。

而且,我们常说的「复利效应」,也是基于年化收益的结果:随着策略运行的时间变长,年化收益上一点点微不足道的差别,也会呈现指数型的增长。

 

02

评价风险

盈利诚可贵,生存价更高

 

除了收益,我们还关心风险。在我们之前的文章【如何通过3行Python代码计算最大回撤】中也提到过,一个简单、直观的风险评价指标就是最大回撤,它用来描述在最坏的情况下,策略会亏掉多少钱,并且通过百分比的形式表现出来。

例如这条资金曲线,最终收益高达几万倍,但实际上在曲线靠右的地方,累积净值出现了断崖式的下跌。最大回撤高达 -64.54%。也就是说,策略在某段时间里一路亏,损失了 64.54%的钱。

谁也顶不住这样恐怖的回撤。尤其是借钱投资,或者帮人管钱的基金经理,催债讨钱要求赎回的肯定早就上门了。

出现巨大的回撤,说明我们的策略太浪了,在不该开仓的时候开仓,甚至加了大杠杆准备猛干。

那么有没有一个综合性的指标,可以同时衡量收益和风险呢?有,那就是表格里的第二行:年化收益回撤比

年化收益回撤比的计算方式也很简单:年化收益/最大回撤的绝对值,这个值当然越高越好。上面这根资金曲线的年化收益是 33563.44%,最大回撤绝对值为 64.54%,那么年化收益回撤比就是 520.01。

即使两个策略回测的时间总长度不同,年化收益回撤比依然可以在不同的策略之间进行比较。

年化收益回撤比这个指标,有点类似于另一个著名的指标:夏普比率。夏普比率的计算方法是:超额收益/超额收益标准差。

夏普比率在业界和学界也很常用,但夏普比率不够直观。而且,计算夏普比率,首先需要计算超额收益。而所谓超额收益,又和无风险利率有关。对于币圈这种市场,怎么选择无风险利率也没有定论。因此,年化收益回撤比更通用一些。

 

03

交易评价

资金曲线的微观视角

 

有时,我们还会遇到这样的情况:策略虽然不发生巨大的亏损,但总是在亏,一百次交易里只有十几次盈利。

有的人会说,输小赢大就行了,我盈利一次能赚回亏损二三十次的钱,不也很好吗?

但我们现在只是在回测。如果策略实盘上马,一笔盈利都没有,先连续亏损二三十次,到时候你就要怀疑人生了:这鬼策略到底能不能赚钱?是不是市场环境已经变了?

因此,我们需要用胜率来描述策略。在计算资金曲线的过程中,我们可以同时算出策略的交易记录。所谓胜率,就是盈利笔数/总交易笔数。胜率从另一个侧面反应收益和风险,相比收益和回撤,胜率更加考验人性。

胜率并不是越高越好,很多很好的策略,胜率就很低。

还有一些基于单笔交易的评价指标:

每笔交易平均盈亏,衡量每笔交易的平均盈利水平,让你对每次开仓的结果有个预期。

盈亏收益比,是盈利交易平均盈利/亏损交易平均亏损。如果一个交易的胜率很低,那么想要最终赚钱,必须得是高盈亏比。

单笔最大盈利与单笔最大亏损,单笔持仓最长时间与最短时间,最大连续盈利笔数与最大连续亏损笔数,都顾名思义。这些指标是对最极端的交易情况的描述。如果单笔最大亏损,单笔最长持有时间,或者最大连续亏损笔数这些指标远远超出了你的承受范围,那就应该考虑改变参数。

当然,以上只是评价策略质量的简单指标,还有很多其它的指标,具体取决于你对策略的要求。有相关问题可以联系我微信(微信号:xbx9585)讨论,或者直接在评论区留言。

 

系列文章推荐阅读:

  2018量化炒币7大玩法复盘 | 视频、PPT分享

【邢不行|量化小讲堂系列38-实战篇】我的数字货币跨期套利爆仓往事(上)

【邢不行|量化小讲堂系列36-python量化入门】如何通过3行Python代码计算最大回撤

 

关于量化的任何问题,或者想要了解其他内容,可以扫描下方二维码加我微信(xbx9585)和我交流。

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是基于聚宽写的kdj指标期货量化交易策略及代码: 策略思路: 1. 当K线向上突破D线时,买入期货; 2. 当K线向下跌破D线时,卖出期货; 3. 在KDJ指标的K线和D线都在50以下时,不进行交易。 代码实现: # 导入聚宽数据包 import jqdatasdk as jq import talib # 初始化聚宽账号 jq.auth('聚宽账号','聚宽密码') # 初始化参数 start_date = '2015-01-01' end_date = '2021-12-31' code = 'RB8888.XSGE' # 螺纹钢期货合约 # 获取螺纹钢期货数据 df = jq.get_price(code, start_date=start_date, end_date=end_date, frequency='daily') # 计算KDJ指标 df['K'], df['D'] = talib.STOCH(df['high'], df['low'], df['close'], fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0) # 初始化交易状态 position = 0 # 循环遍历每个交易日 for i in range(1, len(df)): # 计算当前KDJ指标的值 current_K = df['K'][i] current_D = df['D'][i] # 计算前一天KDJ指标的值 previous_K = df['K'][i-1] previous_D = df['D'][i-1] # 当K线向上突破D线时,买入期货 if previous_K < previous_D and current_K > current_D and current_K < 50: position = 1 # 当K线向下跌破D线时,卖出期货 elif previous_K > previous_D and current_K < current_D and current_K < 50: position = 0 # 在KDJ指标的K线和D线都在50以下时,不进行交易 else: position = position # 更新当前交易日的持仓状态 df.loc[df.index[i], 'position'] = position # 输出交易结果 print(df)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值