python绘制证券市场线(SML)

本文介绍了如何使用Python计算证券市场线(SML),涉及股票A和B的β值、α值计算,并通过matplotlib绘制SML图表。市场收益率为5%和20%,国债利率为8%。股票A的β值为2,股票B的β值为0.7,A的α值为0,B的α值为-0.024。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文使用python绘制证券市场线(SML)。

在给定市场收益的两支股票收益率为:(国债利率为8%,市场收益可能性分别为50%)

市场收益激进型股票A防守型股票
5%2%3.5%
20%32%14%

1.计算两支股票的\beta

rM=[0.05,0.2] #市场收益率
rA=[0.02,0.32] #股票A的收益率
rB=[0.035,0.14] #股票B的收益率
betaA=round((rA[1]-rA[0])/(rM[1]-rM[0]),2) #计算股票A的beta值
betaB=round((rB[1]-rB[0])/(rM[1]-rM[0]),2) #计算股票B的beta值
print(betaA,betaB)

​可以得到​\beta_A=2,\beta_B=0.7

2.画图数据准备

假设国债利率为8%,市场收益可能性分别为50%。由市场期望收益率和短期国债利率可以定义证券市场函数,并计算两支股票的收益率和​值:

p=0.5
erM=p*(rM[0]+rM[1]) #计算市场期望收益率
erF=0.08 #短期国债收益率
def Er(beta): #定义SML函数
    Er=erF+beta*(erM-erF)
    return Er
ErA=Er(betaA) #计算A的均衡收益率
ErB=Er(betaB) #计算B的均衡收益率
erA=p*(rA[0]+rA[1]) #计算A的期望收益率
erB=p*(rB[0]+rB[1]) #计算B的期望收益率
alphaA=round(erA-ErA,4) #计算A的alpha值
alphaB=round(erB-ErB,4) #计算B的alpha值
print(alphaA,alphaB)

可以得到​\alpha_A=0,​\alpha_B=-0.024

3.证券市场线绘制

import matplotlib.pyplot as plt
import numpy as np
beta=np.linspace(0,2.5,26)
Er=Er(beta)
plt.plot(beta,Er,color="grey")
plt.title('security market line (SML)')
plt.ylabel('expected yield rate (Er)')
plt.xlabel('beta')
plt.ylim(0,0.2)
plt.xlim(0,2.6)
plt.scatter(0,erF,color='black')
plt.annotate('treasury rate',xy=(0,erF))
plt.scatter(1,erM,color='black')
plt.annotate('market rate',xy=(1,erM))
plt.scatter(betaA,ErA,color='blue')
plt.scatter(betaB,ErB,color='blue')
plt.scatter(betaA,erA,color='red')
plt.annotate('A'+r'($\alpha =0$)',xy=(betaA,erA))
plt.scatter(betaB,erB,color='red')
plt.annotate('B'+r'($\alpha =-0.024$)',xy=(betaB,erB))
plt.show()

完整代码:

rM=[0.05,0.2] #市场收益率
rA=[0.02,0.32] #股票A的收益率
rB=[0.035,0.14] #股票B的收益率
betaA=round((rA[1]-rA[0])/(rM[1]-rM[0]),2) #计算股票A的beta值
betaB=round((rB[1]-rB[0])/(rM[1]-rM[0]),2) #计算股票B的beta值
print(betaA,betaB)
p=0.5
erM=p*(rM[0]+rM[1]) #计算市场期望收益率
erF=0.08 #短期国债收益率
def Er(beta): #定义SML函数
    Er=erF+beta*(erM-erF)
    return Er
ErA=Er(betaA) #计算A的均衡收益率
ErB=Er(betaB) #计算B的均衡收益率
erA=p*(rA[0]+rA[1]) #计算A的期望收益率
erB=p*(rB[0]+rB[1]) #计算B的期望收益率
alphaA=round(erA-ErA,4) #计算A的alpha值
alphaB=round(erB-ErB,4) #计算B的alpha值
print(alphaA,alphaB)
import matplotlib.pyplot as plt
import numpy as np
beta=np.linspace(0,2.5,26)
Er=Er(beta)
plt.plot(beta,Er,color="grey")
plt.title('security market line (SML)')
plt.ylabel('expected yield rate (Er)')
plt.xlabel('beta')
plt.ylim(0,0.2)
plt.xlim(0,2.6)
plt.scatter(0,erF,color='black')
plt.annotate('treasury rate',xy=(0,erF))
plt.scatter(1,erM,color='black')
plt.annotate('market rate',xy=(1,erM))
plt.scatter(betaA,ErA,color='blue')
plt.scatter(betaB,ErB,color='blue')
plt.scatter(betaA,erA,color='red')
plt.annotate('A'+r'($\alpha =0$)',xy=(betaA,erA))
plt.scatter(betaB,erB,color='red')
plt.annotate('B'+r'($\alpha =-0.024$)',xy=(betaB,erB))
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值