zoukankan      html  css  js  c++  java
  • 量化投资学习笔记02——计算回测指标

    上篇文章里用pyalgotrade框架计算了策略收益率、夏普值、最大回测等回测指标,但是貌似没有直接计算α值,β值,信息比率等回测指标的方法。看来要自己实现了。
    参照《Python量化策略风险指标》( https://zhuanlan.zhihu.com/p/55425806)这篇文章里的定义实现吧。
    先来计算beta值。beta值相当于业绩评价基准收益的总体波动性。常被用于衡量某一策略的系统性风险。如果beta值大于1,策略波动大于市场,否则,策略波动小于市场。
    还有Alpha值,代表实际收益和按照beta系数计算的期望收益之间的差额,代表策略多大程度上跑赢了预期的收益率。可以理解为超额收益率。
    计算这两个值要选一个基准,一般是沪深300指数,但是指数的值是3000多,跟个股的价格差别很大,如果直接用指数作为基准,需要进行数据调整。我就用300ETF(510300)来做基准了,聚宽上也进行同样的调整。
    计算代码就照那篇文章上给的代码了。
    先用300ETF的数据建立一个feeds并以此建立策略,计算收益率,用累积收益率计算alpha和beta值。

    # 计算一些回测指标
    def calculater(ret, retbase):
         # 计算α β值
         X = ret.getCumulativeReturns()
         Y = retbase.getCumulativeReturns()
         n1 = X.__len__()
         n2 = Y.__len__()
         x = []
         y = []
         if n1 == n2:
             for i in range(n1):
                 x.append(X[i])
                 y.append(Y[i])
         alpha = 0.0
         beta = 0.0
         b, a, r_value, p_value, std_err = stats.linregress(x, y)
         # alpha转化为年
         alpha = round(a * 250, 3)
         beta = round(b, 3)
         print("α值:%.2f β值:%.2f" % (alpha, beta))
    

    结果:

    聚宽上的结果

    差别还是很大的,尤其beta值。
    夏普比率代表每多承担一份风险,可以获得几份回报,即单位风险所获得的超额回报,该比率越高,策略承担单位风险得到的超额回报越高,所以夏普比率越高越好。pyalgotrade里有类计算,就不自己实现了。
    信息比率,与夏普比率类似,但是其参考基准不是无风险收益率,而是策略的市场基准收益率。
    但是按照知乎文章里的代码计算出来的信息比率为16.08,差距太大了。我按照原始定义算出来的呢?为0.01。差距也很大,不过貌似更靠谱一些。

        # 计算信息比率
        # 先计算超额收益
        ex_return = [x[i] - y[i] for i in range(len(x))]
        print(ex_return)
        print(np.mean(ex_return))
        print(np.std(ex_return))
        information = np.sqrt(len(ex_return)) * np.mean(ex_return)/np.std(ex_return)
        print("信息比率:%.2f" % information)
        # 方法2
        information2 = (x[-1] - y[-1])/np.std(ex_return)
        print("信息比率:%.2f" % information2)
    


    先这样吧。再把整个计算回测指标的过程封装起来吧。下次了。代码见https://github.com/zwdnet/MyQuant/blob/master/01/testdata.py

    我发文章的四个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
    我的个人博客地址:https://zwdnet.github.io
    我的CSDN博客地址:https://blog.csdn.net/zwdnet
    我的博客园博客地址: https://www.cnblogs.com/zwdnet/
    我的微信个人订阅号:赵瑜敏的口腔医学学习园地

  • 相关阅读:
    OpenCV -- CV_8UC1,CV_32FC3等参数的含义
    OpenCV -- 命名空间及相关函数介绍
    Qt -- QMutex使用详解
    QT -- 常用数据结构及函数
    Qt -- QQueue用法
    Qt -- QSetting类/ini配置文件的读写操作
    QT--日期操作QDateTime
    设备接口总汇(含实物图)
    “SurfFeatureDetector”: 未声明的标识符/不能实例化抽象类
    OpenCV -- Shi-Tomas角点检测与亚像素级角点检测
  • 原文地址:https://www.cnblogs.com/zwdnet/p/12053434.html
Copyright © 2011-2022 走看看