【量化金融】策略择时能力评价模型

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

变量定义

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

T-M模型

T-M模型认为一个优秀的投资策略在多头时,能够提高投资组合的风险水平以获得较高的收益,在空头时能够降低投资组合的风险。因此CAPM特征线不再是固定斜率的直线,而是一条斜率会随市场状况变动的曲线:
$$
r_t-r_f=\alpha+\beta_1(r_{m,t}-r_f)+\beta_2(r_{m,t}-r_f)^2+\epsilon_t
$$

若线性回归后结果得到$\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特征线:
$$
r_t-r_f=\alpha+\beta_1(r_{m,t}-r_f)+\beta_2D(r_{m,t}-r_f)+\epsilon_t
$$
当$r_{m,t} \gt r_f$时,D=1;

当$r_{m,t} \lt r_f$时,D=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模型具有较强的适用性。该模型的优点在于能够分别得出基金在不同市场风格时的具备的贝塔值,即使在基金不具有择时能力时($\beta_1-\beta_2 \gt 0$),我们也能够通过$β_1$和$β_2$的取值分析投资策略的特点:
$$
r_t-r_f=\alpha+\beta_1D_1(r_{m,t}-r_f)+\beta_2D_2(r_{m,t}-r_f)+\epsilon_t
$$
当$r_{m,t} \gt r_f$时,$D_1$ = 1,$D_2$ = 0 ;

当$r_{m,t} \lt r_f$时,$D_1$ =0, $D_2$ = 1 ;

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

若线性回归后结果得到$\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