1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【金融统计】R语言数据获取并计算收益

【金融统计】R语言数据获取并计算收益

时间:2024-04-30 14:00:50

相关推荐

【金融统计】R语言数据获取并计算收益

【金融统计】

数据获取并计算收益

​ 检索股票数据的一种方法是可以使用quantmod包中的getSymbols命令。这种方式下主要受到网络条件的影响,偶尔也可能不能成功获取。

#设置浏览目录setwd("/Users/zz/Desktop/金融统计学/第一次上机作业")

library(quantmod)#数据获取data.AMZN<-getSymbols("AMZN",from="-12-31",to="-6-30",auto.assign=FALSE)#判断数据类型class(data.AMZN)

[1] "xts" "zoo"

#画图plot(data.AMZN$AMZN.Close)

​ 上图为AMZN从12月31日到6月19日的收盘价的折线图,可以看出从到基本处于上升状态,在有下降趋势。

dim(data.AMZN)#获取维度

[1] 1635 6

summary(data.AMZN)#查看

Index AMZN.Open AMZN.High AMZN.Low AMZN.CloseAMZN.Volume AMZN.Adjusted Min. :-12-31 Min. : 23.90 Min. : 24.68 Min. : 23.70 Min. : 24.10 Min. : 17626000 Min. : 24.10 1st Qu.:-08-15 1st Qu.: 49.49 1st Qu.: 49.76 1st Qu.: 49.01 1st Qu.: 49.34 1st Qu.: 57445000 1st Qu.: 49.34 Median :-04-02 Median : 89.39 Median : 89.94 Median : 88.36 Median : 89.29 Median : 73414000 Median : 89.29 Mean :-03-31 Mean : 96.34 Mean : 97.40 Mean : 95.15 Mean : 96.28 Mean : 84781961 Mean : 96.28 3rd Qu.:-11-11 3rd Qu.:151.89 3rd Qu.:154.11 3rd Qu.:149.66 3rd Qu.:151.67 3rd Qu.:100235000 3rd Qu.:151.67 Max. :-06-29 Max. :187.20 Max. :188.65 Max. :184.84 Max. :186.57 Max. :331300000 Max. :186.57

wk<-data.AMZNdata.weekly<-to.weekly(wk)#周数据data.weekly[c(1:3,nrow(data.weekly)),]#选取查看数据

wk.Open wk.High wk.Low wk.Close wk.Volume wk.Adjusted-12-31 34.3040 34.3875 33.7945 33.7945 7499200033.7945-01-08 32.8145 32.8860 30.2605 30.3525 66108200030.3525-01-15 30.6240 31.2995 28.2650 28.5090 64586800028.5090-06-29 117.0900 117.9800 106.9100 108.9200 203451400 108.9200

mo<-data.AMZNdata.monthly<-to.monthly(mo)data.monthly[c(1:3,nrow(data.monthly)),]

mo.Open mo.High mo.Low mo.Close mo.Volume mo.Adjusted12 34.3040 34.3875 33.7945 33.7945 7499200033.79451 32.8145 32.8860 27.3590 29.3500 260401800029.35002 28.9075 29.0900 23.7000 27.6260 248289600027.62606 122.2560 128.9900 101.4300 108.9200 1669921700 108.9200

ls()#显示内存中的对象rm(list=ls())

[1] "all_graph" "AMZN" "AVG""Close.Prices" "data.AMZN" "data.GSPC" "data.IBM""data.monthly"[9] "data.weekly" "date" "df" "df1""df2""df3""df4""df5" [17] "df6""f" "FF" "FF.raw" "mo" "multi.df""p3" "process"[25] "process2""s_" "s380" "stocks" "symbols""title1" "title2" "wk"[33] "y" "y.range"

#数据包导入library(dplyr)library(pedquant)library(purrr)library(ggplot2)library(gridExtra)

#数据获取symbols <- c("300244.SZ", '600987.SH', "600766.SH", "601857.SH", "300089.SZ", "002616.SZ")# %>%为管道符号,作用是将%>%左边的对象传递给右边的函数stocks <- md_stock(symbols,from = "-12-31",to = "-6-30",source = "163")process2 <- function(tbl){tbl %>% as_tibble() %>% select(date, close, unit) %>% mutate(lag1 = lag(close),sr = (close - lag1) / lag1, lr = log(close) - log(lag1)) }stocks %>%map(process2)#编写一个绘制date与close以及date与log Return图像,并上下对齐在一张图像上的函数,并绘图all_graph <- function(tbl){p1 <- tbl %>% ggplot(aes(date, close)) +geom_line()p2 <- tbl %>% ggplot(aes(date, lr)) + geom_line() + labs(x = "",y = "log Return") +scale_y_continuous(labels = scales::percent_format())grid.arrange(p1, p2)}par(mfrow=c(1,1))#设置画布排版stocks %>%map(process2) %>% map(all_graph)################################################

以上为数据获取的收盘价可视化结果,可以看出对数收益率波动率的总体还是比较大的。

#数据获取#构造一个获取股票数据并计算收益率和对数收益率的函数,并获得数据process <- function(symbol, from = "-12-31", to = "-06-30", source = "yahoo") {md_stock(symbol = symbol, from = from, to = to, source = source)[[1]] %>%as_tibble() %>% select(date, close, unit) %>% mutate(lag1 = lag(close), sr = (close - lag1) / lag1, lr = log(close) - log(lag1)) }s380<- process("000009.SH",source = "163")s_ = stocks %>% map(process2)

#建立数据,重组矩阵df1<-s_[[1]]$lrdf1 <- df1[1:1579]df2<-s_[[2]]$lrdf2 <- df2[1:1579]df3<-s_[[3]]$lrdf3 <- df3[1:1579]df4<-s_[[4]]$lrdf4 <- df4[1:1579]df5<-s_[[5]]$lrdf5 <- df5[1:1579]df6<-s_[[6]]$lrdf6 <- df6[1:1579]df <- cbind(df1,df2,df3,df4,df5,df6)

df <- cbind(df,rowSums(df[, 1:6]/6))#生成date和组合对数收益率的新数据AVG <- stocks[[4]] %>% as_tibble() %>% select(date) %>%mutate(fin_r = df[,7])#可视化处理#将组合对数收益率与红色代表的s380的对数收益率进行比较p3 <-ggplot(AVG,aes(date, fin_r)) +geom_line() +geom_line(data = s380,aes(date, lr,color = 'red')) +labs(x = "",y = "log Return") +scale_y_continuous(labels = scales::percent_format())p3#输出结果

​ 根据以上结果可以看出组合对数的回报率波动更大。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。