楼主: cywwdk
1551 3

[问答] 求助我想知道为什么自己模仿老师使用portfolioanalytics会出现这种异常现象 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

初中生

23%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
24 小时
注册时间
2018-10-16
最后登录
2019-5-26

楼主
cywwdk 发表于 2018-12-12 00:42:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
---
#R包加载准备
```{r}
library(readxl)
library(tidyquant)
library(dplyr)
library(PortfolioAnalytics)
```
---
#导入数据
```{r}
#从本地文件目录中获取数据,用read_xls读入。
#该表格数据为HS300十个行业指数近两年(2016-12-12到2018-12-10)来收益率日表现,数据源自CSMAR。
#idxcd、idxdate、idx、idxr分别代表指数代码、日期、指数值、日收益率。
hs300_cons <- readxl::read_xls("data/IDX_Idxtrd.xls",
              range = "A2:D4871",
              col_names =c("idxcd","idxdate","idx","idxr")
              ) %>%
              mutate(idxcd = str_c(idxcd, ".HS"))
#在数据处理中我们不需要具体的指数,故删除指数列后缀加上[,-3]
hs300_cons[,-3]
```
---
#数据转换
```{r}
#将股票代码转化为同行字符,将收益率分散。
hs300_cons1 <- spread(hs300_cons[,-3], idxcd,idxr)
hs300_cons2 <- hs300_cons1[,-1]
```
---
#数据转换
```{r}
#将字符格式的idxdate改成日期格式,并转化dataframe成为xts。
dt <- as.Date(unlist(hs300_cons1[,1]))
hs300_consxts <- xts(x = hs300_cons2, order.by = dt)

```
---
#基准投资组合
```{r}
returns <- hs300_consxts[, 1:10]
head(returns)

```
---
#基准投资组合
```{r}
#十项因子赋予等权重。
equal_weights <- rep(1 / ncol(returns), ncol(returns))
#按照季度调整权重计算回报
benchmark_returns <- returns %>%
  Return.portfolio(weights = equal_weights,
                   rebalance_on = "seconds")
colnames(benchmark_returns) <- "benchmark"
```
---
#基准投资组合
```{r}
#基准组合的表现
table.AnnualizedReturns(benchmark_returns)
```
---
#基准投资组合
```{r}
#图形表现
library(dygraphs)
benchmark_returns %>% dygraph() %>% dyRangeSelector()
```
以上是我码到现在的代码,老师布置的作业,使用的是10个沪深300行业指数的等权重基准,数据我已经转化成xts并且查验后没有问题,我调仓频率从季度一直到天一直都是异常的,图结果如下,而且调频后极端异常值的日期都会有所变化。
d844c4b1d11c77b79a3173ce2baa125.png 8f33a73851a0b89bbb948cedefe226b.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
xc2156 发表于 2018-12-12 16:14:05
如果有一个reproducible的example就好了,比如上传一个已经spread过后的csv/excel文件就好了

不过我读了一遍你的代码,问题应该是Return.portfolio中的argument:rebalance_on = "seconds",这个应该是笔误吧,所以导致代码能跑通,但是结果完全不对

藤椅
xc2156 发表于 2018-12-12 16:17:05
应该是rebalance_on = "seconds"错了,这个应该是笔误吧

板凳
cywwdk 发表于 2018-12-15 10:29:56
xc2156 发表于 2018-12-12 16:17
应该是rebalance_on = "seconds"错了,这个应该是笔误吧
好的 谢谢~

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-7 16:24