R语言计算WMK、DIS、PEP日收益率及绘图代码问题求助
问题点梳理
tq_get拉取多标的数据时,股票代码需要存入向量传入,直接依次传入三个字符串只会读取第一个标的,且返回的是带标的分组列的长格式数据,无法直接转为Return.calculate可用的宽格式xts对象- 三次调用
Return.calculate传入的是同一个未拆分的价格对象,没有按标的筛选价格,计算结果完全不匹配单个标的的收益率 ggplot不识别type="1"参数,该参数是base R绘图体系的参数,ggplot需要按图层语法指定几何对象绘图,且不能直接传入未做格式转换的xts对象
修正后代码
# 加载所需依赖包 library(tidyquant) library(ggplot2) # 拉取三个标的2000-01-01到2022-06-01的股价数据 prices <- tq_get( c("WMK", "DIS", "PEP"), from = "2000-01-01", to = "2022-06-01" ) # 按标的分组计算日离散收益率,默认使用复权价计算,避免分红拆股导致的收益率偏差 daily_returns <- prices %>% group_by(symbol) %>% tq_transmute( select = adjusted, mutate_fun = periodReturn, period = "daily", type = "arithmetic", col_rename = "daily_return" ) # 分别绘制三个标的的日收益率折线图 # WMK ggplot(daily_returns %>% filter(symbol == "WMK"), aes(x = date, y = daily_return)) + geom_line(linewidth = 0.3, color = "#2c7fb8") + labs(title = "WMK 日收益率走势", x = "日期", y = "离散日收益率") + theme_bw() # DIS ggplot(daily_returns %>% filter(symbol == "DIS"), aes(x = date, y = daily_return)) + geom_line(linewidth = 0.3, color = "#d95f02") + labs(title = "DIS 日收益率走势", x = "日期", y = "离散日收益率") + theme_bw() # PEP ggplot(daily_returns %>% filter(symbol == "PEP"), aes(x = date, y = daily_return)) + geom_line(linewidth = 0.3, color = "#1b9e77") + labs(title = "PEP 日收益率走势", x = "日期", y = "离散日收益率") + theme_bw()
如果需要使用
PerformanceAnalytics::Return.calculate计算,可参考以下格式转换逻辑:library(PerformanceAnalytics) # 长表价格转宽表xts prices_xts <- prices %>% select(date, symbol, adjusted) %>% tidyr::pivot_wider(names_from = symbol, values_from = adjusted) %>% timetk::tk_xts(date_col = date) # 批量计算收益率 returns_all <- Return.calculate(prices_xts, method = "discrete")[-1, ] # 去掉首行NA
内容的提问来源于stack exchange,提问作者jwckp0t
相关产品推荐
相关产品推荐

