当前位置:   article > 正文

(金融会计领域)计算累计超额收益率 (CAR)

(金融会计领域)计算累计超额收益率 (CAR)

一、每股正常收益率的计算

        1)风险系数的计算。计算股票的正常收益率,首先需要用市场模型计算出股票的系统风险,即股票的\beta系数。股票收益率的市场模型为:

r_{\mathrm{~it}}=_{\alpha_i}+_{\beta_i}r_{\mathrm{~m~t}}+\varepsilon_{\mathrm{~it}} 

其中r_{it}为股票i在交易日t的收益率; r_{mt}为市场在交易日t的收益率; \beta_i为股票i的系统风险; \varepsilon_{it}是随机误差项。 

由股票的日收益率对市场日收益率进行回归可求出每只股票的B系数。
正常收益率的计算。正常收益率的计算采用资本资产定价模型(CAPM),模型如下: 

E(r_{\mathrm{~it}})=r_{\mathrm{~f}}+\beta_{\mathrm{~i}}(r_{\mathrm{~m~t}}-r_{\mathrm{~f}}) 

其中r_f为无风险利率,以银行1年期利率(1.98%)作为无风险的报酬率; E(r_{it})为股票i在时期r的正常收益率。 

二、累计超额收益率的计算与确定

日超额收益率AR_{it}的计算公式如下: 

AR_{\mathrm{~it~}}=_{r_{\mathrm{~it}}}-E(r_{\mathrm{~it}})

对于每一个样本总体,平均日超额收益率AAR为:

为了反映事件在公告日前后影响股票价格的全过程,从而衡量市场的反应,还需计算累计超额收益率 (CAR),计算公式如下: 

\begin{aligned}CAR_{\mathrm{~it}}=&(1/\mathrm{n})\sum_{\lambda=-20}^\mathrm{n}AR_{\mathrm{~i\lambda}}(\mathrm{t}=-20,-19,\cdots19,20)\end{aligned}

三、代码实现

  1. import numpy as np
  2. import statsmodels.api as sm
  3. # 假设已有数据:
  4. # stock_returns 是一个字典或者DataFrame,键或列名是股票代码,值是日收益率列表
  5. # market_returns 是日市场收益率的列表
  6. # risk_free_rate 是无风险利率,这里设置为1.98%的年化利率
  7. risk_free_rate = 0.0198 # 无风险利率
  8. # (2) 计算每只股票的β系数和正常收益率
  9. def calculate_beta(stock_returns, market_returns):
  10. beta_values = {}
  11. market_returns = sm.add_constant(market_returns) # 为市场收益率添加常数项
  12. for stock, returns in stock_returns.items():
  13. model = sm.OLS(returns, market_returns).fit() # 使用最小二乘法进行回归
  14. beta_values[stock] = model.params[1] # 提取β系数
  15. return beta_values
  16. def calculate_normal_return(stock_beta, market_return):
  17. """
  18. 计算正常收益率,使用CAPM模型。
  19. """
  20. return risk_free_rate + stock_beta * (market_return - risk_free_rate)
  21. # (3) 计算超额收益率和累计超额收益率
  22. def calculate_AR(stock_return, normal_return):
  23. """
  24. 计算日超额收益率 AR。
  25. """
  26. return stock_return - normal_return
  27. def calculate_AAR(stock_returns, normal_returns):
  28. """
  29. 计算平均日超额收益率 AAR。
  30. """
  31. return np.mean([calculate_AR(r, n) for r, n in zip(stock_returns, normal_returns)])
  32. def calculate_CAR(stock_returns, event_window):
  33. """
  34. 计算累计超额收益率 CAR,给定事件窗口。
  35. """
  36. ARs = [calculate_AR(r, n) for r, n in zip(stock_returns, normal_returns)]
  37. CAR = np.sum(ARs[event_window[0]:event_window[1]+1])
  38. return CAR
  39. # 假设我们有股票代码 'ABC' 的日收益率和市场收益率
  40. stock_code = 'ABC'
  41. stock_returns = stock_returns[stock_code] # 假设这是 'ABC' 的日收益率列表
  42. market_return = np.mean(market_returns) # 假设这是市场日均收益率
  43. # 计算 'ABC' 股票的β系数
  44. betas = calculate_beta(stock_returns, market_returns)
  45. stock_beta = betas[stock_code]
  46. # 计算 'ABC' 股票的正常收益率
  47. stock_normal_return = calculate_normal_return(stock_beta, market_return)
  48. # 计算一个时间窗口内的AR和CAR
  49. event_window = (-20, 20)
  50. stock_AR = calculate_AR(stock_returns, stock_normal_return)
  51. stock_CAR = calculate_CAR(stock_returns, event_window)
  52. # 打印结果
  53. print(f"Stock Beta: {stock_beta}")
  54. print(f"Normal Return: {stock_normal_return}")
  55. print(f"Cumulative Abnormal Return (CAR) for event window {event_window}: {stock_CAR}")
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号