LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 利用pyfolio工具评价回测资金曲线

利用pyfolio工具评价回测资金曲线

2020-03-27 发明者量化 来源:火星财经

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工具评价回测资金曲线

—-

编译者/作者:发明者量化

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...