10年以上的上综指、深成指、创业板指的日度数据, 计算周一、周四、周五交易日里“各自的期望收益率”,并验证其在统计 上的显著性、是否对后续未来投资有借鉴意义; 2)以深成指为例,依你所采集的样本期间、以及已发生的实际走势, 请“粗略地”将整个样本期划分为牛市期间、熊市期间、振荡期间,然后再分市场不同状态、验证牛市/熊市/振荡期间各自的“红 周一”与“黑周末”的统计显著性。r语言实现
时间: 2023-06-24 13:09:27 浏览: 118
以下是R语言实现的代码:
1. 计算期望收益率并验证统计显著性
首先,需要获取股票数据,可以使用quantmod包进行获取。以下是获取数据的代码:
```R
library(quantmod)
# 获取上证综指、深证成指、创业板指数据
getSymbols(c("^上证综指", "^深证成指", "^创业板指"), from = "2010-01-01", to = Sys.Date())
# 计算收益率
returns <- data.frame(
date = index(上证综指),
上证综指 = dailyReturn(上证综指)[, 1],
深证成指 = dailyReturn(深证成指)[, 1],
创业板指 = dailyReturn(创业板指)[, 1]
)
```
接着,按照要求,计算周一、周四、周五交易日里各自的期望收益率,并验证其在统计上的显著性。以下是代码:
```R
library(dplyr)
# 计算周一、周四、周五的收益率期望值
weekly_returns <- returns %>%
mutate(day = weekdays(date)) %>%
group_by(day) %>%
summarize(
上证综指 = mean(上证综指),
深证成指 = mean(深证成指),
创业板指 = mean(创业板指)
)
# 计算t-test的p值
t_test_pvals <- weekly_returns %>%
summarize(
上证综指 = t.test(上证综指, mu = 0)$p.value,
深证成指 = t.test(深证成指, mu = 0)$p.value,
创业板指 = t.test(创业板指, mu = 0)$p.value
)
# 输出结果
weekly_returns
t_test_pvals
```
2. 验证牛市/熊市/振荡期间各自的“红周一”与“黑周末”的统计显著性
接下来,需要将整个样本期划分为牛市期间、熊市期间、振荡期间,并分别计算红周一与黑周末的统计显著性。以下是代码:
```R
# 计算每个交易日对应的牛市/熊市/振荡市状态
market_status <- returns %>%
mutate(
上证综指 = cumprod(1 + 上证综指) - 1,
深证成指 = cumprod(1 + 深证成指) - 1,
创业板指 = cumprod(1 + 创业板指) - 1
) %>%
summarise(
上证综指_status = case_when(
上证综指 >= quantile(上证综指, 0.8) ~ "牛市",
上证综指 <= quantile(上证综指, 0.2) ~ "熊市",
TRUE ~ "振荡市"
),
深证成指_status = case_when(
深证成指 >= quantile(深证成指, 0.8) ~ "牛市",
深证成指 <= quantile(深证成指, 0.2) ~ "熊市",
TRUE ~ "振荡市"
),
创业板指_status = case_when(
创业板指 >= quantile(创业板指, 0.8) ~ "牛市",
创业板指 <= quantile(创业板指, 0.2) ~ "熊市",
TRUE ~ "振荡市"
),
date = index(上证综指)
)
# 计算红周一与黑周末的统计显著性
red_mon_pvals <- market_status %>%
mutate(day = weekdays(date)) %>%
group_by(上证综指_status, day) %>%
summarize(
上证综指 = mean(returns$上证综指[as.Date(returns$date) %in% as.Date(date)]),
pval = t.test(上证综指[day == "周一"], mu = 0)$p.value
)
black_fri_pvals <- market_status %>%
mutate(day = weekdays(date)) %>%
group_by(上证综指_status, day) %>%
summarize(
上证综指 = mean(returns$上证综指[as.Date(returns$date) %in% as.Date(date)]),
pval = t.test(上证综指[day == "周五"], mu = 0)$p.value
)
# 输出结果
red_mon_pvals
black_fri_pvals
```
以上代码仅以上证综指为例,其他指数的计算方式类似。需要注意的是,这里使用了简化的牛市/熊市/振荡市标准,实际应用中需要根据具体情况进行调整。
阅读全文