本周末,我们连续发布两篇关于股票因子模型的绩效分析知识文章,由浅入深,和读者们一起了解如何评估我们的模型,如何确认收益稳定可靠,如何发现高傲的绩效指标下隐藏的风险,如何看懂专业的风险多因子和Barra绩效归因结果,以便增强实盘交易信心。
对于任何一个股票量化建模平台,绩效呈现和绩效归因模块,都是高度重要但容易被忽略的。我们常对行业内朋友们说“拿资金曲线出来看看”,但即使是专业人士也容易忽略资金曲线的背后的含金量,因为一条资金曲线不仅能使用不同的资产搭配而成,也能在同一资产内部通过侧重于某方面的风险而获得收益,甚至有很强的风险集中度、风险偏好和欺骗性。
常规资金曲线和风险收益指标
首先,我们的模型,在可编辑的窗口下点击“编译模型”,会得到一个常规意义上的资金曲线,如这样:
上图仅是简单回测了模型在不同阶段绩效(蓝线),辅以测试基准(红线)。beta表示投资的系统性风险,反映了策略(回测的投资组合)对大盘变化的敏感性。
beta起源于资本资产定价模型(CAPM模型),这套模型认为个股或投资组合收益可以假设为仅和市场风险收益有关,其他部分都是无法解释的。它由个股和市场的收益协方差除以市场收益的方差计算得到。alpha就是指这部分beta无法描述的,模型获得与市场波动无关的回报。
标准回测界面
如果点击“运行回测”,即可进入完整的绩效页面,资金曲线上的两个绿色端点表示了回撤出现的最大阶段,在绝对收益和超额收益(扣除掉基准的收益)两条线上都有这个图示。黄色线——超额收益,是我们每次分析必看指标,黄线模拟了对冲基准收益后的超额收益。举例说,如我们在沪深300股票池建模,并对冲沪深300 IF股指期货,在无升贴水状态下,它表示了模型可以获得的Alpha超额收益。黄线的稳定性至关重要,它表示了你是否可以获得持续的超额收益。黄线的衰退也应该引起重视,它表示我们的股票模型在某个阶段,是无法跑赢基准指数的。
在系统左侧,可以点击交易详情、每日持仓与收益,观察模型交易细节。但是一旦数据较多网页会反应极慢,所以建议在右上角,选择导出相关数据CSV文档,在Excel上手工分析。
对于股票模型,较为重要的依然是beta和alpha,我们倾向于获得低beta,高alpha的模型,但是最重要的还是夏普比率。
夏普比率Sharpe Ratio,表示每承受一单位风险,会产生多少单位的超额报酬,可以同时对策略的收益与风险进行综合考虑。这要求我们不仅获得较高的收益,必须对应较小的净值波动才能提升夏普,这里波动率无论上下,但是如果你带来了很高的上波动,又没有显著的下波动,显然是阶梯式资金曲线,夏普一定不会低。
胜率和盈亏比在股票模型中由于调仓频率和标的股票选择广度等原因,不好横向评价。最大回撤也是需要注意的,这个概念就不需要再解释了,在API文档里有描述。
点击其他指标,会弹窗一些辅助绩效指标,这里藏着一些学问,首先日胜率表示以每日为考核单位,盈利日和总交易日之比,但是要考虑到盈亏比才能横向对比日胜率高低的模型。但是从这里可以大致获得一个模型的特性(是少数交易获得大部分盈利,还是积小胜为大胜的稳健收益)。Sortino,索提诺比率表示每承担一单位的下行风险,将会获得多少超额回报,是对夏普比率的一种辅助改进。
Information Ratio信息比率用年化超额收益率,除以策略与基准每日收益差值的年化标准差,表示了模型跟踪基准获得的误差大小,越高的IR比率预示着跟踪误差更低。
在夏普比率、超额收益率难分高下的情况下,如果获得更高的IR比率?答案是,增加你的持股数量,特别是在股指期货空单对冲的模型中,增加持股数量可以带来更加稳定的多头收益,完全对冲Beta之后,自然就是美妙的Alpha收益。最后一个Benchmark Volatility代表了基准收益(红线)对应的波动率。
持仓盈亏与绩效归因
点击“绩效归因”后,进入标准专业的归因模板。收益概览是对绩效指标概念的再次描述。紧接着收益分析模块,提供了线性和对数两种Y轴收益统计。对数Y轴特别针对最终数值极大的情况下,前期净值波动已经难以观察的情况。
对数坐标反应的是上涨和下跌的百分比,比如涨5%和跌5%,它们的K线长度应该是一样长的。普通坐标:就是按涨跌的绝对值计算,涨100点和跌100点的长度应该一样长。
如上图:对数坐标对于初期绝对值较低部分的放大呈现
实际分析中,我们发现对数坐标轴首先可以对细微的趋势变化,进行有效放大。值得一提的是,如果绘制K线技术分析辅助线(趋势线、突破位置线、形态线)都需要使用对数坐标,如果你看到有人直接在线性坐标Y轴K线图上画,他可能连“技术分析大湿”都做不好。
日内收益部分不再介绍,仅体现每日模型收益率。滑点分析部分,每一个bp表示交易成本(资金量)1个百分点的1%,也就是万分之1。比如我们在模型里已经设置set_slippage(PriceRelatedSlippage(0.002)) 千分之2滑点,那么系统会在此基础上,再增加万分之2~32的交易成本,以观察模型衰减程度,高换手率模型往往在这里快速衰减。
底部的收益时间(年度月度)和月度频次分布,体现了模型的收益是否在时间分布上均匀,以及月收益是否在区间上呈现某种特性。这里可以显著看到股灾期间的模型收益,以及历史上各月收益有没有月度特征(盈亏月、大小月等特性),是一个有用的模块。
风险指标部分,滚动Beta和滚动Sharpe就是滑动时间窗计算方式,因为这两项指标需要一定的过去数据,非截面指标,所以分别给予6个月,12个月(beta)和6个月(sharpe),得到上述绩效图。我们用来观察模型在哪个阶段表现高度波动性,在哪个阶段表现较好,等各项指标。
最大回撤部分,不仅计算了最大的一次,也计算了5个较大的回撤,我们一般将5个较大回撤的均值称为平均回撤,在交易开拓者等期货软件中,由平均回撤衍生出平均收益风险比,也成为我们衡量模型的重要指标。取过均值的数据,都更稳定,这个道理大家一定懂,不仅是模型计算过程中,绩效评估过程也是一样。
个股贡献度与仓位分析
资金曲线仅表示资产组合最终绩效,我们理论上希望由更多的个股贡献绩效,以此方式降低风险。资产组合理论模型大家都听说过,其核心都是Markowitz(诺贝尔经济学奖得主马科维茨)的名言:Diversification is the only free lunch in investing.(“资产配置多元化是投资的唯一免费午餐”)
持仓分析页面的价值正在于此,它评估了个股对于投资组合的贡献。我们要求个股的贡献必须平均,持股必须尽可能多(在20~50只为宜,50只以上更好)。这样的建模才有意义,才能获得一个未来也有持续性的绩效(尽可能降低幸存者偏差),否则实盘迎接你的将是永远吃不完的亏。
上图中演示了一个持仓50只股票的模型8年来盈亏情况,第一名除以第十名大概是2倍收益,并且之后非线性慢速递减,收益来源平均。而下图将呈现的是另一种奇怪的收益分布。
在上图这个模型中,第一名贡献的利润超过第十名达到42倍,这类模型盈利只来源于踩中一两只股票的狗屎运,实在是不敢恭维。但是它依然能做出精美资金曲线迷惑交易者,所以请慎重评估绩效来源,远离这种危险的低质量模型。
最后两个模块中的日交易股数,由于并未去掉股票价格量纲(高价股100股和低价股100股价值显著差异,但都是100股),所以仅作参考。但是其依然可以反映出,当市场上近几年股票价格下跌后,以大致恒定的资金量,模型能够买入的股票数量发生上涨。
每次恒定周期调仓,且辅助二次调仓管理风险的模型换手率细节
非恒定周期调仓,并在需要时微调仓位的模型换手率细节
日换手率体现了模型每次有交易的日期中,调仓换股的股票占持仓资金的比例(第一次建仓不计算换手)。如果定期调仓,则在一个大致固定的位置,会产生固定间隔的换手率。如果定期调仓+风险管理,在除了主换手率区间外,还有一部分调整换手率形成一个区间。如果模型在日常都可以进行风险管理或生成新的股票池交易,则在每天都会产生细微的低换手率(如上图)。
模型换手率告诉我们如何每次选股的差异性是否稳定,或者是否每次都需要非常高的换手率完成股票池更新。我们建议在日常做一些细微调仓,则在每次关键周期点位上,不必进行大规模换手,降低关键位置冲击成本。
今天完成绩效归因分析第一部分,概念都非常简单易懂,只是文字描述繁琐。提醒各位读者一定在模型回测完毕后,进行细致绩效分析,看到模型暴露的风险,得到水分尽可能少的绩效。第二部分因子风险模型描述点击链接查看: