alphalens教程2--基於return的因子分析

廣告:本人的單因子測試視頻教程https://edu.csdn.net/course/detail/25572       python

上次,咱們利用get_clean_factor_and_forward_returns這個函數,能夠得到alphalens可以接受的一種factor數據,接下來,咱們就是利用這個函數返回給咱們的數據去進行因子的分析。咱們隊這個函數的返回值命名爲factor_data,即factor_date = get_clean_factor_and_forward_returns(......)。函數

今天咱們主要基於return來分析,也就是說,是因子收益率分析。測試

1.得到因子平均收益率數據

因子收益率分析的第一個函數定義以下:spa

 

def mean_return_by_quantile(factor_data,
                            by_date=False,
                            by_group=False,
                            demeaned=True):

 

參數解釋
    factor_data : pd.DataFrame - MultiIndex
        這個就是咱們用整理好的數據產生的的factor_data。
    by_date : bool
       是否按天計算收益率 
    by_group : bool
       是否按組別來計算收益率
    demeaned : bool
        是不是計算超額收益(或者說,是某種group後的中性收益).net

 

返回值code

    mean_ret : pd.DataFrame
      收益率的均值
    std_error_ret : pd.DataFrame
       收益率的方差orm

使用方法demo:
mean_return_by_q_daily, std_err = alphalens.performance.mean_return_by_quantile(factor_data, by_date=True)
factor_data是上次的那個函數整合的因子數據。視頻

兩個return的結果以下:blog

mean_return_by_q_group, std_err = alphalens.performance.mean_return_by_quantile(factor_data, by_group =True)教程

固然,咱們也能夠不分組。
mean_return_by_q, std_err = alphalens.performance.mean_return_by_quantile( factor_data)

 

2.繪製均值收益的直方圖

把上面得到的第一個參數,也就是mean_return_by_q這一類做爲參數,傳給alphalens.plotting.plot_quantile_returns_bar(mean_return_by_q)。

 

 

def plot_quantile_returns_bar(mean_ret_by_q,
                              by_group=False,
                              ylim_percentiles=None,
                              ax=None):

 

參數解釋
    mean_ret_by_q : pd.DataFrame
        上一步得到的數據,能夠是分組後的,也能夠沒有分組的,通常建議不分組或者按照行業分組
    by_group : bool
        若是mean_ ret的數據是安按照group分組的,那麼這裏也須要設置爲True.
    ylim_percentiles : tuple of integers
        y軸的參數設置
    ax : matplotlib.Axes, optional
        matplotlib的ax句柄


返回值:
    ax : matplotlib.Axes
筆者嘗試了一下按行業分,效果大概以下嗎,每一個行業,五層因子值中每層在不一樣週期下的收益率均值的直方圖。

上面的按日期算均值的mean_ret有一個美麗的用法,就是結合alphalens.plotting.plot_quantile_returns_violin繪製提琴圖。
alphalens.plotting.plot_quantile_returns_violin(mean_return_by_q_daily)

 

  3.收益率差值圖

一樣的邏輯,先產生數據,而後繪圖。此次繪製的是收益率差值圖,也就是說,是好的因子層的收益率減去最差的因子層的收益率。

 

def compute_mean_returns_spread(mean_returns,
                                upper_quant,
                                lower_quant,
                                std_err=None):

 

參數解釋
    ----------
    mean_returns : pd.DataFrame
        以前得到的,咱們使用的是daily的
    upper_quant : int
       高收益的因子層序號
    lower_quant : int
        低收益的因子層序號
    std_err : pd.DataFrame
        以前生成的標準差

返回值
     -------
    mean_return_difference : pd.Series
        收益率差值數據
    joint_std_err : pd.Series
        差值的標準誤
畫圖的函數以下

 

def plot_mean_quantile_returns_spread_time_series(mean_returns_spread,
                                                  std_err=None,
                                                  bandwidth=1,
                                                  ax=None):

 

 參數說明:
    ----------
    mean_returns_spread : pd.Series
        上一個函數得到的數據
    std_err : pd.Series
        上一個函數得到的標準誤
    bandwidth : float
        帶寬,就是布林帶帶寬的概念,在圖上繪製多少倍的標準誤做爲帶寬
    ax : matplotlib.Axes, optional
        ax句柄


   返回值
    -------
    ax : matplotlib.Axes
     圖片的ax句柄


使用demo:

quant_return_spread, std_err_spread = alphalens.performance.compute_mean_returns_spread(mean_return_by_q_daily,
                                                                                        upper_quant=5,
                                                                                        lower_quant=1,
                                                                                        std_err=std_err_daily)
alphalens.plotting.plot_mean_quantile_returns_spread_time_series(quant_return_spread, std_err_spread)
繪製出來的效果以下:

4.各層因子累計收益率圖

對於一個因子,咱們但願好的分層和差的分層的收益率有很大的差異,也就是說,因子的區分度越好,咱們越以爲因子有效。下面這個函數可以計算出不一樣分層下的投資累計收益回報。隨着時間曲線發散,愈加散,說明因子越有效。

def plot_cumulative_returns_by_quantile(quantile_returns, period=1, ax=None):

  參數解釋:
    quantile_returns : pd.DataFrame
     以前的回報率數據
    period: int, optional
        計算回報率的週期 
    ax : matplotlib.Axes, optional
       ax句柄
    Returns

 

 

 

圖片的ax句柄

5.cash-netural 方法

還有一種因子測試方法,就是以因子值爲權重,作多高收益率的因子層股票,最空低收益率的因子層股票,得到相對收益。
一樣的邏輯,先得到數據:
def factor_returns(factor_data, long_short=True, group_neutral=False):
參數:

    factor_data : pd.DataFrame - MultiIndex
       以前一開始就得到的數據
    long_short : bool
        是否進行多空組合計算
    group_neutral : bool
        是否group中性,因爲group一般是行業,因此,是不是行業中性。若是中性,那麼,每一個group內部將會進行配權重。


返回值:
    -------
    returns : pd.DataFrame

   dollar neutral portfolio weighted by factor value的收益率。

示例demo:

ls_factor_returns = alphalens.performance.factor_returns(factor_data)

ls_factor_returns 的值以下:

alphalens.plotting.plot_cumulative_returns(ls_factor_returns[1])
alphalens.plotting.plot_cumulative_returns(ls_factor_returns[5], period=5)

分別繪製調倉週期爲天的周的cash-netural investment的收益率曲線。

6.alpha and beta value

咱們知道,alpha策略的理論根據是capm模型,因此,咱們最後計算一下每個調倉下的alpha和beta值

alpha_beta = alphalens.performance.factor_alpha_beta(factor_data)

alpha_beta的數值以下:

7.整個函數

以上全部圖片,咱們能夠用如下兩句話來解決,這是alphalens裏面常有的特性。

alphalens.tears.create_returns_tear_sheet(factor_data)
plt.show()

 

本文同步分享在 博客「錢塘小甲子」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索