下面介绍的择时评价模型都是用于评价基金经理的选股能力,而量化选股与基金经理选股有异曲同工之妙,当然也可以用来评价量化策略的择时能力。

变量定义

变量名变量含义
rtr_t投资组合收益率
rfr_f无风险收益率
rm,tr_{m,t}市场基准收益率
α\alpha投资策略策略选股能力
D相关参数,虚拟变量
β\beta相关参数,斜率

T-M模型

T-M模型认为一个优秀的投资策略在多头时,能够提高投资组合的风险水平以获得较高的收益,在空头时能够降低投资组合的风险。因此CAPM特征线不再是固定斜率的直线,而是一条斜率会随市场状况变动的曲线:

rtrf=α+β1(rm,trf)+β2(rm,trf)2+ϵtr_t-r_f=\alpha+\beta_1(r_{m,t}-r_f)+\beta_2(r_{m,t}-r_f)^2+\epsilon_t

若线性回归后结果得到β2>0\beta_2 \gt 0,说明基金经理拥有正的择时能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def tm_model(rt, rm, rf, period='daily'):
"""T-M模型

Args:
rt (_pd.DataFrame_): 投资策略收益率
rm (_pd.DataFrame_): 市场收益率
rf (_pd.DataFrame_): 无风险收益
period (_type_, optional): _str_. Defaults to 'daily'.

Returns:
alpha: 投资策略的选股能力
beta1: 没啥用
beta2: 投资策略择时能力
"""
period_days = get_period_days(period)
rf = (1 + rf) ** (1 / period_days) - 1
y = rt - rf
x1 = rm - rf
x2 = x1 ** 2
X = pd.DataFrame([x1, x2]).T
lr = LinearRegression()
lr.fit(X, y)
alpha = lr.intercept_
beta1 = lr.coef_[0]
beta2 = lr.coef_[1]
return alpha, beta1, beta2

H-M模型

H-M模型假设资产组合的β只取两个值,当市场走好时β取较大值,当市场萎靡时β取较小值,由此得到在该模型假设下的CAPM特征线:

rtrf=α+β1(rm,trf)+β2D(rm,trf)+ϵtr_t-r_f=\alpha+\beta_1(r_{m,t}-r_f)+\beta_2D(r_{m,t}-r_f)+\epsilon_t

rm,t>rfr_{m,t} \gt r_f时,D=1;

rm,t<rfr_{m,t} \lt r_f时,D=0;

若线性回归后结果得到β2>0\beta_2 \gt 0​,说明基金经理拥有正的择时能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def hm_model(rt, rm, rf, period='daily'):
"""H-M模型

Args:
rt (_pd.DataFrame_): 投资策略收益率
rm (_pd.DataFrame_): 市场收益率
rf (_pd.DataFrame_): 无风险收益
period (_type_, optional): _str_. Defaults to 'daily'.

Returns:
alpha: 投资策略的选股能力
beta1: 没啥用
beta2: 投资策略择时能力
"""
period_days = get_period_days(period)
rf = (1 + rf) ** (1 / period_days) - 1
y = rt - rf
x1 = rm - rf
x2 = (rm - rf)[rm > rf]
X = pd.DataFrame([x1, x2]).T.replace(np.nan, 0)
lr = LinearRegression()
lr.fit(X, y)
alpha = lr.intercept_
beta1 = lr.coef_[0]
beta2 = lr.coef_[1]
return alpha, beta1, beta2

C-L模型

相比于上面的两个模型,C-L模型具有较强的适用性。该模型的优点在于能够分别得出基金在不同市场风格时的具备的贝塔值,即使在基金不具有择时能力时(β1β2>0\beta_1-\beta_2 \gt 0),我们也能够通过β1β_1β2β_2的取值分析投资策略的特点:

rtrf=α+β1D1(rm,trf)+β2D2(rm,trf)+ϵtr_t-r_f=\alpha+\beta_1D_1(r_{m,t}-r_f)+\beta_2D_2(r_{m,t}-r_f)+\epsilon_t

rm,t>rfr_{m,t} \gt r_f时,D1D_1 = 1,D2D_2 = 0 ;

rm,t<rfr_{m,t} \lt r_f时,D1D_1 =0, D2D_2 = 1 ;

β1β_1为多头市场时投资组合的β值,β2β_2为空头市场时投资组合的β值。

若线性回归后结果得到β1β2>0\beta_1-\beta_2 \gt 0​,表示投资策略具备择时能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def cl_model(rt, rm, rf, period='daily'):
"""C-L模型

Args:
rt (_pd.DataFrame_): 投资策略收益率
rm (_pd.DataFrame_): 市场收益率
rf (_pd.DataFrame_): 无风险收益
period (_type_, optional): _str_. Defaults to 'daily'.

Returns:
alpha: 投资策略的选股能力
beta1: 没啥用
beta2: 投资策略择时能力
"""
period_days = get_period_days(period)
rf = (1 + rf) ** (1 / period_days) - 1
y = rt - rf
x1 = (rm - rf)[rm >= rf]
x2 = (rm - rf)[rm < rf]
X = pd.DataFrame([x1, x2]).T.replace(np.nan, 0)
lr = LinearRegression()
lr.fit(X, y)
alpha = lr.intercept_
beta1 = lr.coef_[0]
beta2 = lr.coef_[1]
return alpha, beta1, beta2