R语言getSymbol()设periodicity为weekly时日期错误的求助
解决R语言获取港股周度数据起始日期为非交易日的问题
针对你遇到的getSymbols返回周度数据起始日期为2012-09-02(周日,非交易日)的问题,提供以下三种可行解决方法:
方法1:直接筛选目标日期范围的数据
获取数据后,利用xts对象的日期索引特性,直接保留2012-09-03及之后的行:
tickers <- c("0011.HK", "1299.HK", "1083.HK", "0823.HK", "0669.HK", "0992.HK") portfolioPrices <- NULL for (Ticker in tickers) portfolioPrices <- cbind(portfolioPrices, getSymbols(Ticker, from = "2012-09-01", to = "2022-08-31", periodicity = "weekly", auto.assign=FALSE)[, 4]) colnames(portfolioPrices) <- c("HSBC", "AIA", "TG", "LinkReit", "Techronic", "Lenovo") # 筛选2012-09-03及之后的数据 portfolioPrices <- portfolioPrices["2012-09-03/"] portfolioPrices
方法2:先取日度数据再转换为周度(确保日期为交易日)
先获取日度数据,再通过to.weekly手动转换为周度数据,指定取每周最后一个交易日的收盘价作为周度数据,避免非交易日日期:
tickers <- c("0011.HK", "1299.HK", "1083.HK", "0823.HK", "0669.HK", "0992.HK") portfolioPrices <- NULL for (Ticker in tickers) { # 获取日度收盘价数据 daily_data <- getSymbols(Ticker, from = "2012-09-01", to = "2022-08-31", auto.assign=FALSE)[, 4] # 转换为周度数据,索引设为每周最后一个交易日 weekly_data <- to.weekly(daily_data, indexAt = "lastof")[, 4] portfolioPrices <- cbind(portfolioPrices, weekly_data) } colnames(portfolioPrices) <- c("HSBC", "AIA", "TG", "LinkReit", "Techronic", "Lenovo") portfolioPrices
方法3:直接修改getSymbols的起始日期
如果确认2012-09-03为第一个目标交易日,可直接将from参数设为该日期,跳过之前的非交易日:
tickers <- c("0011.HK", "1299.HK", "1083.HK", "0823.HK", "0669.HK", "0992.HK") portfolioPrices <- NULL for (Ticker in tickers) portfolioPrices <- cbind(portfolioPrices, getSymbols(Ticker, from = "2012-09-03", to = "2022-08-31", periodicity = "weekly", auto.assign=FALSE)[, 4]) colnames(portfolioPrices) <- c("HSBC", "AIA", "TG", "LinkReit", "Techronic", "Lenovo") portfolioPrices
说明
方法2的适用性最强,因为它完全基于交易日数据生成周度结果,不会出现非交易日的索引日期;方法1和3则更直接,适合已知目标起始日期的场景。
内容的提问来源于stack exchange,提问作者user22247199
相关产品推荐
相关产品推荐

