量化投資學習筆記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/
我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章