You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:54:25