1、前言 前些天发现FMZ策略回测结果输出的盈亏曲线结果比较简单,故想着是否获取收益结果数据后自己再进行处理,得到更详细的资金曲线评估报告,并且用图形可视化展示出来。着手把想法写出来的时候发现并不是那么容易,故想是否有人也有相同的想法,并且已经做出相应的工具呢?故上网搜罗了一圈,发现确实有这类工具,在GitHub上看了好几个项目,最终选择了pyfolio这个工具。 2、pyfolio是什么 pyfolio是一个由quantinc .开发的用于金融投资组合的性能和风险分析的Python库。它可以很好地与Zipline开源回溯测试库一起工作。quant还为专业人士提供全面管理的服务,包括Zipline、Alphalens、Pyfolio、FactSet数据等。pyfolio的核心是所谓的“ so-called tear sheet ”,它由各种各样的独立图组成,这些图提供了交易算法表现的综合图像。GitHub地址:https://github.com/quantopian/pyfolio 3、学习使用pyfolio 由于该工具网上的学习资料比较少,自己摸索了好些时间才会简单的使用。PyFolio API参考:https://www.quantopian.com/docs/api-reference/pyfolio-api-reference#pyfolio-api-reference 这里比较详细介绍了pyfolio的API,该平台可以做美股回测,回测结果可以直接通过pyfolio展示,我只粗略地学习了一下,貌似其他功能都挺强大的。 4、安装pyfolio pyfolio的安装比较简单,按照GitHub上的说明安装即可。 5、FMZ回测结果通过pyfolio展示 好了介绍就到这了,开始进入正题。首先在FMZ获取回测资金曲线数据。 在回测结果的浮动盈亏图表中点击上图中全屏旁边的按钮,然后选择‘Download CSV’。获取到的CSV数据,格式如下图(文件名根据自己需求更改): 如果想要分析结果有比较的基准的话,则还需要准备一份交易标的的K线日线数据,当然如果没有K线数据只有收益数据也是可以分析的,只是有基准数据分析结果会多几个指标,例如:阿尔法(Alpha)、贝塔(Beta)等,下文按提供基准K线数据来写。 K线数据我们可以通过FMZ研究环境直接从平台获取: 数据准备完毕后,就可以写代码了。我们需要将获取到的数据进行处理,以使其符合pyfolio所需要的数据结构,然后调用pyfolio的create_returns_tear_sheet接口计算并输出结果。我们主要需要传入(returns,benchmark_rets=None,live_start_date=None)三个参数。 returns参数为必须的收益数据; benchmark_rets为基准数据,不是必须的; live_start_datelive_start_date,不是必须的,这个参数的意思就是,你的returns啥时候是开始实盘的?比如我们上面这一串returns,假设我们在2019-12-01之后是实盘,而前面是模拟盘或者是回测的结果,那么我们就可以这样设置:live_start_date = '2019-12-01'。通过设置该参数获得的结果,理论上我们可以分析一下我们的策略有没有过拟合。如果样本内外的差异很大,那么大概率这就是过拟合了。 我们可以在FMZ研究环境下实现该分析功能,也可以在自己本地实现,下面以在FMZ研究环境实现为例: 输出的分析结果: 6、结果解读 输出的结果数据比较多,我们需要静下心来学习一下这些指标都是啥意思,输出结果都是英文显示的,英文比较少我们对照着翻译来看还是比较容易理解的,下面我介绍几个我找到的对相关指标的介绍,明白了指标的意思,我们才能解读我们的策略状态。 年化收益(Annual return) 年化收益率是指把当前的收益率(日收益率、周收益率、月收益率等)换算成年收益率来计算的,是一种理论收益,并不是真正已经取得的收益率。年化收益率需要和年收益率区分开,年收益率是指策略执行一年的收益率,是实际的收益。 累计收益(Cumulative returns) 最容易理解的一个概念,策略收益也就是策略开始到结束,总资产的变化率。 年化波动率(Annual volatility) 年化波动率用来衡量投资标的的波动风险。 夏普率(Sharpe ratio) 描述的是策略在单位总风险下所能获得的超额收益。 最大回撤(Max Drawdown) 描述的策略最大的亏损情况。最大回撤通常越小越好。 欧米伽比率(Omega ratio) 另一种风险回报绩效指标。它相对于Sharpe比率的最大优势是-通过构造-它考虑了所有统计时刻,而Sharpe比率仅考虑前两个时刻。 索提诺比率(Sortino) 描述的是策略在单位下行风险下所能获得的超额收益。 每日风险价值(daily Value-at-Risk ) 每日风险价值-另一个非常流行的风险指标。在这种情况下,这表明在95%的情况下,将头寸(投资组合)再保留1天,损失不会超过1.8%。 参考:https://towardsdatascience.com/the-easiest-way-to-evaluate-the-performance-of-trading-strategies-in-python-4959fd798bb3 Tail ratio 对daily return的分布选取95分位和5分位,然后相除取绝对值。本质的含义就是赚取的return比亏钱的大多少倍。 稳定性(stability) 也就是所谓的稳定性。其实很简单,就是时间增量对累计净值的解释力度是多少,也就是回归的r平方。这样说有点抽象,我们简单解释一下。 参考:https://blog.csdn.net/qtlyx/article/details/88724236 7、小小的建议 希望FMZ能够也能够增加丰富资金曲线的评价功能,并且增加历史回测结果的储存功能,这样能够更方便和更专业地展示回测结果,帮助大家创造出更优秀的策略。 8、感谢FMZ平台 让我在这里学到了很多量化知识以及各种技能,感谢小小梦老师、张超大神悉心指导!希望FMZ平台越来越好! 本人菜鸟一枚,初次作文,还望大佬们多多指教。! 本文来源:发明者量化 —- 编译者/作者:发明者量化 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
利用pyfolio工具评价回测资金曲线
2020-03-27 发明者量化 来源:火星财经
LOADING...
相关阅读:
- Digitex期货零费用比特币期货交易所现已向公众开放2020-07-31
- 月白:7.31比特币月线收官震荡不改,不追涨杀跌,踏准节奏稳定盈利!2020-07-31
- 震荡依旧 做多为主2020-07-31
- 新西兰FSP金融监管牌照岛国金融首选数字货币2020-07-31
- Python版商品期货跨期布林对冲策略(教学)2020-07-31