在R语言中计算股票月度双周调整收益率及季度标准差
R语言计算股票双周调整收益率及季度标准差实现方案
现有数据说明
你当前持有的多股票时间序列数据集结构参考如下(以AAPL为例):
# 单只股票数据构造示例 library(tidyquant) library(lubridate) library(tidyverse) one_ticker = tq_get("AAPL", from = "2021-06-01") one_ticker <- one_ticker %>% mutate(day = day(date), month = month(date), year = year(date))
输出结构预览:
| symbol | date | open | high | low | close | volume | adjusted | day | month | year |
|---|---|---|---|---|---|---|---|---|---|---|
| AAPL | 2021-06-01 | 125. | 125. | 124. | 124. | 67637100 | 124. | 1 | 6 | 2021 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
需求说明
- 按月拆分双周区间计算收益率:每月拆为1-15日(第一双周)、16日-月末(第二双周)两个区间,区间首尾非交易日时取区间内最近的交易日调整价计算,收益率公式为
区间末调整价/区间初调整价 - 1 - 按季度统计上述双周收益率的标准差
实现代码
步骤1:全量数据预处理(多股票适用)
# 加载依赖包 library(tidyverse) library(lubridate) library(tidyquant) # 假设你的全量多股票数据集命名为stock_data,结构和示例一致 stock_data_processed <- stock_data %>% # 生成双周区间标识、年季度标识 mutate( # 双周标识:1=当月1-15日,2=当月16日至月末 biweek_period = ifelse(day <= 15, 1, 2), # 年季度标识,方便后续分组统计季度标准差 year_quarter = paste0(year, "Q", quarter(date)) )
步骤2:计算双周调整收益率
biweek_return <- stock_data_processed %>% # 按股票、年、月、双周区间分组 group_by(symbol, year, month, biweek_period) %>% # 取区间最早交易日的调整价作为期初价,最晚的作为期末价 summarise( period_start_date = min(date), period_end_date = max(date), start_adjusted = first(adjusted, order_by = date), end_adjusted = last(adjusted, order_by = date), .groups = "drop" ) %>% # 计算双周收益率,过滤区间仅1个交易日的无效数据 mutate(biweek_return = end_adjusted / start_adjusted - 1) %>% filter(period_start_date != period_end_date)
步骤3:计算季度双周收益率标准差
quarterly_sd <- biweek_return %>% # 关联回原预处理数据的年季度字段 left_join(stock_data_processed %>% distinct(symbol, year, month, year_quarter), by = c("symbol", "year", "month")) %>% # 按股票、季度分组 group_by(symbol, year_quarter) %>% summarise( biweek_return_sd = sd(biweek_return, na.rm = TRUE), # 可补充统计该季度有效双周样本数 sample_count = n(), .groups = "drop" )
注意事项
- 如果需要保留区间仅1个交易日的记录,可删除
filter(period_start_date != period_end_date)语句,对应收益率会为0 - 多股票数据需要确保按
symbol分组计算,避免不同股票数据混淆 - 计算标准差时
na.rm = TRUE会自动过滤区间无有效交易的缺失值,不需要额外预处理缺失数据
内容的提问来源于stack exchange,提问作者YefR
相关产品推荐
相关产品推荐

