【金融统计】R语言风险回报权衡。风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。

6 篇文章 0 订阅
5 篇文章 0 订阅

金融统计

风险回报权衡

​ 风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。

​ 其中的数据来源::F-F_Research_Data_Factors.txt

​ 下载网站:http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html

Step1:数据导入

#读取文件
FF.raw <- read.fwf(file="F-F_Research_Data_Factors.txt", widths=c(6,8,8,8,8),skip=4)
head(FF.raw)
      V1       V2       V3       V4       V5
1 192607     2.96    -2.56    -2.43     0.22
2 192608     2.64    -1.17     3.82     0.25
3 192609     0.36    -1.40     0.13     0.23
4 192610    -3.24    -0.09     0.70     0.32
5 192611     2.53    -0.10    -0.51     0.31
6 192612     2.62    -0.03    -0.05     0.28
#获取最后几行数据
tail(FF.raw)
         V1       V2       V3       V4       V5
1248   2018    -6.95    -3.21    -9.73     1.83
1249   2019    28.28    -6.10   -10.34     2.15
1250   2020    23.66    13.17   -46.57     0.45
1251   2021    23.56    -3.92    25.57     0.04
1252   <NA>     <NA>     <NA>     <NA>     <NA>
1253 Copyri ght 2022  Kenneth  R. Fren       ch

Step2:数据处理

​ 由于文件后面包含汇总的年度数据,这是我们不需要的,所以需要删除。

FF.raw<-FF.raw[-1154:-1253,]
#命名
names(FF.raw)<-paste(c("text.date","RmxRf","SMB","HML","Rf"))
head(FF.raw)
  text.date    RmxRf      SMB      HML       Rf
1    192607     2.96    -2.56    -2.43     0.22
2    192608     2.64    -1.17     3.82     0.25
3    192609     0.36    -1.40     0.13     0.23
4    192610    -3.24    -0.09     0.70     0.32
5    192611     2.53    -0.10    -0.51     0.31
6    192612     2.62    -0.03    -0.05     0.28
tail(FF.raw)
     text.date    RmxRf      SMB      HML       Rf
1148    202202    -2.29     2.23     3.04     0.00
1149    202203     3.05    -1.60    -1.80     0.01
1150    202204    -9.46    -1.41     6.19     0.01
1151    202205    -0.34    -1.85     8.41     0.03
1152    202206    -8.43     2.09    -5.97     0.06
1153    202207     9.56     2.78    -4.08     0.08
#显示内部结构
str(FF.raw)
'data.frame':	1153 obs. of  5 variables:
 $ text.date: chr  "192607" "192608" "192609" "192610" ...
 $ RmxRf    : chr  "    2.96" "    2.64" "    0.36" "   -3.24" ...
 $ SMB      : chr  "   -2.56" "   -1.17" "   -1.40" "   -0.09" ...
 $ HML      : chr  "   -2.43" "    3.82" "    0.13" "    0.70" ...
 $ Rf       : chr  "    0.22" "    0.25" "    0.23" "    0.32" ...
FF.raw<-FF.raw[,c(-1,-3,-4)]
#将数据数值化并计算
FF.raw$RmxRf<-as.numeric(as.character(FF.raw$RmxRf))/100
FF.raw$Rf<-as.numeric(as.character(FF.raw$Rf))/100
FF.raw$date<-seq(as.Date("1926-07-01"),as.Date("2022-07-01"),by="months")
FF.raw[c(1:3,nrow(FF.raw)),]
      RmxRf     Rf       date
1    0.0296 0.0022 1926-07-01
2    0.0264 0.0025 1926-08-01
3    0.0036 0.0023 1926-09-01
1153 0.0956 0.0008 2022-07-01
str(FF.raw)
'data.frame':	1153 obs. of  3 variables:
 $ RmxRf: num  0.0296 0.0264 0.0036 -0.0324 0.0253 0.0262 -0.0006 0.0418 0.0013 0.0046 ...
 $ Rf   : num  0.0022 0.0025 0.0023 0.0032 0.0031 0.0028 0.0025 0.0026 0.003 0.0025 ...
 $ date : Date, format: "1926-07-01" "1926-08-01" "1926-09-01" "1926-10-01" ...

Step3:计算原始市场回报量

​ 数据给出了超额市场回报率,即市场回报率减去无风险利率,我们需要的是原始的市场回报。

FF.raw$Rm<-FF.raw$RmxRf+FF.raw$Rf
FF.raw[c(1:3,nrow(FF.raw)),]
      RmxRf     Rf       date     Rm
1    0.0296 0.0022 1926-07-01 0.0318
2    0.0264 0.0025 1926-08-01 0.0289
3    0.0036 0.0023 1926-09-01 0.0059
1153 0.0956 0.0008 2022-07-01 0.0964

Step4:子集数据

FF<-subset(FF.raw,FF.raw$date>="1963-12-01" & FF.raw$date<="2013-12-31")
FF[c(1:3,nrow(FF)),]
      RmxRf     Rf       date     Rm
450  0.0183 0.0029 1963-12-01 0.0212
451  0.0224 0.0030 1964-01-01 0.0254
452  0.0154 0.0026 1964-02-01 0.0180
1050 0.0281 0.0000 2013-12-01 0.0281

Step5:市场总回报率和无风险利率

FF$Gross.Rm<-1+FF$Rm
FF$Gross.Rm[1]<-1
FF$Gross.Rf<-1+FF$Rf
FF$Gross.Rf[1]<-1
FF[c(1:3,nrow(FF)),]
      RmxRf     Rf       date     Rm Gross.Rm Gross.Rf
450  0.0183 0.0029 1963-12-01 0.0212   1.0000   1.0000
451  0.0224 0.0030 1964-01-01 0.0254   1.0254   1.0030
452  0.0154 0.0026 1964-02-01 0.0180   1.0180   1.0026
1050 0.0281 0.0000 2013-12-01 0.0281   1.0281   1.0000

Step6:市场累计收益和无风险利率

FF$cum.Rm<-cumprod(FF$Gross.Rm)
FF$cum.Rf<-cumprod(FF$Gross.Rf)
FF[c(1:3,nrow(FF)),]
      RmxRf     Rf       date     Rm Gross.Rm Gross.Rf     cum.Rm    cum.Rf
450  0.0183 0.0029 1963-12-01 0.0212   1.0000   1.0000   1.000000  1.000000
451  0.0224 0.0030 1964-01-01 0.0254   1.0254   1.0030   1.025400  1.003000
452  0.0154 0.0026 1964-02-01 0.0180   1.0180   1.0026   1.043857  1.005608
1050 0.0281 0.0000 2013-12-01 0.0281   1.0281   1.0000 124.745642 12.099660

Step7:数据可视化

#获取最大最小值
y.range<-range(FF$cum.Rm,FF$cum.Rf);y.range
[1]   1.0000 124.7456
par(mfrow=c(1,1))
title1<-"Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$cum.Rm,type="l",xlab="Date",ylab="Value of $1 Investment ($)",ylim=y.range,main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$cum.Rf,lty=2)
legend("topleft",c("Stocks (2013 Ending Value: $124.89)","Bonds (2013 Ending Value: $12.10)"),lty=c(1,2))

请添加图片描述

​ 根据图中结果可以看出,股票的一美元投资价值总体大于债券投资价值,但是债券的价值显示为逐步增长,而股票的波动率较大。

Step8:绘制股票和债券收益图

#最大最小值
y.range<-range(FF$Rm,FF$Rf);y.range
[1] -0.2264  0.1661
title1<-"Volatility of Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$Rm,type="l",xlab="Date",ylab="Returns (%)",ylim=y.range,col="gray50",main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$Rf)
abline(h=0)
legend("topleft",c("Stocks","Bonds"),lty=c(1,2))

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OLSRR

随缘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值