赞
踩
1)风险系数的计算。计算股票的正常收益率,首先需要用市场模型计算出股票的系统风险,即股票的系数。股票收益率的市场模型为:
其中为股票i在交易日t的收益率; 为市场在交易日t的收益率; 为股票i的系统风险; 是随机误差项。
由股票的日收益率对市场日收益率进行回归可求出每只股票的B系数。
正常收益率的计算。正常收益率的计算采用资本资产定价模型(CAPM),模型如下:
其中为无风险利率,以银行1年期利率(1.98%)作为无风险的报酬率; 为股票i在时期r的正常收益率。
日超额收益率的计算公式如下:
对于每一个样本总体,平均日超额收益率AAR为:
为了反映事件在公告日前后影响股票价格的全过程,从而衡量市场的反应,还需计算累计超额收益率 (CAR),计算公式如下:
- import numpy as np
- import statsmodels.api as sm
-
- # 假设已有数据:
- # stock_returns 是一个字典或者DataFrame,键或列名是股票代码,值是日收益率列表
- # market_returns 是日市场收益率的列表
- # risk_free_rate 是无风险利率,这里设置为1.98%的年化利率
-
- risk_free_rate = 0.0198 # 无风险利率
-
- # (2) 计算每只股票的β系数和正常收益率
- def calculate_beta(stock_returns, market_returns):
- beta_values = {}
- market_returns = sm.add_constant(market_returns) # 为市场收益率添加常数项
- for stock, returns in stock_returns.items():
- model = sm.OLS(returns, market_returns).fit() # 使用最小二乘法进行回归
- beta_values[stock] = model.params[1] # 提取β系数
- return beta_values
-
- def calculate_normal_return(stock_beta, market_return):
- """
- 计算正常收益率,使用CAPM模型。
- """
- return risk_free_rate + stock_beta * (market_return - risk_free_rate)
-
- # (3) 计算超额收益率和累计超额收益率
- def calculate_AR(stock_return, normal_return):
- """
- 计算日超额收益率 AR。
- """
- return stock_return - normal_return
-
- def calculate_AAR(stock_returns, normal_returns):
- """
- 计算平均日超额收益率 AAR。
- """
- return np.mean([calculate_AR(r, n) for r, n in zip(stock_returns, normal_returns)])
-
- def calculate_CAR(stock_returns, event_window):
- """
- 计算累计超额收益率 CAR,给定事件窗口。
- """
- ARs = [calculate_AR(r, n) for r, n in zip(stock_returns, normal_returns)]
- CAR = np.sum(ARs[event_window[0]:event_window[1]+1])
- return CAR
-
- # 假设我们有股票代码 'ABC' 的日收益率和市场收益率
- stock_code = 'ABC'
- stock_returns = stock_returns[stock_code] # 假设这是 'ABC' 的日收益率列表
- market_return = np.mean(market_returns) # 假设这是市场日均收益率
-
- # 计算 'ABC' 股票的β系数
- betas = calculate_beta(stock_returns, market_returns)
- stock_beta = betas[stock_code]
-
- # 计算 'ABC' 股票的正常收益率
- stock_normal_return = calculate_normal_return(stock_beta, market_return)
-
- # 计算一个时间窗口内的AR和CAR
- event_window = (-20, 20)
- stock_AR = calculate_AR(stock_returns, stock_normal_return)
- stock_CAR = calculate_CAR(stock_returns, event_window)
-
- # 打印结果
- print(f"Stock Beta: {stock_beta}")
- print(f"Normal Return: {stock_normal_return}")
- print(f"Cumulative Abnormal Return (CAR) for event window {event_window}: {stock_CAR}")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。