Initial Data Set我有超过一千个股票代号,以及相应的IPO日期。我想使用一个循环遍历每个股票行情指示器,找到IPO日期的开盘价。我目前可以使用quantmod做到这一点。 getSymbols(),但它会下载整个数据集,我可以将数据限制在一个时间范围内,但不能让我这样做。
getSymbols('AAPL', from = '2017-02-02', to = '2017-02-02')
由于某种原因,这不会返回第一价格。这需要更长的时间,我只关心第一个开盘价。最终输出将是在现有数据框中添加第三列,第三列将是第一价格。我确实在尝试避免下载数千个Stocks数据,因为那样它将永远运行。非常感谢您下载第一个“公开价格”,然后将该价格放入所有股票报价的数据框中的帮助。
答案 0 :(得分:0)
由于您还没有提供数据示例,因此我已经创建了自己的数据。下次,请不要使用该对象的屏幕截图。请改用dput()
。
library(quantmod)
library(lubridate)
getSymbols(c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'))
tickers <- data.frame(ticker = c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'),
date = sapply(mget(setdiff(ls(),"B")), function(x) as.character(index(x[1,]))))
tickers$open <- NA
tickers$date <- ymd(tickers$date)
在上面的代码中,我下载了一些股票的数据,并获取了数据的第一个日期,并将其用作ipo日期。我使用lubridate
将日期设置为日期格式。正如您在评论中所说,这使添加日期变得更容易,对于字符来说这是不可能的。但是,如果将其格式化为日期,则如果日期位于该月的最后一天,则+ 7将把它带到下个月。
下面的代码很简单。我提取了代码,该代码将传递到getSymbols
中的getSymbols()
参数中。 ipo_date
将传递到from
的{{1}}参数。 getSymbols()
是从IPO日期算起的7天,少于7天的任何时间都不起作用。
我将next_date
设置为auto.assign
,以便FALSE
不会将对象保存到环境中。这使我能够提取始终位于第一列第一行中的第一个开盘价,因此提取getSymbols()
之后立即调用[1, 1]
。
getSymbols()
答案 1 :(得分:0)
您的某些股票不是美国股票!这是有问题的,因为Yahoo Finance在美国以外的股票市场使用了国家/地区扩展。例如,在美国没有代号为1810的股票,因此返回错误。美国以外有好几个,我从香港选了一个。要下载此数据,需要在香港符号后加上.HK。对于伦敦证券交易所(伦敦),它是.L
一旦我解决了这个问题,代码就可以工作了。所有股票均在IPO日期有开盘价。但是,如果这些货币使用不同的货币,我不确定这有多有用。
xy <- data.frame(`IPO Date` = c("7/9/2018", "9/21/2018", "6/30/2017", "9/28/2017",
"9/12/2018", "8/1/2018", "4/3/2018", "6/19/2018",
"6/29/2017", "9/28/2018"), `Stock Symbol` =
c("1810.HK", "FTCH", "DHER.DE", "ROKU", "NIO",
"CWK", "SPOT", "4385.T", "APRN", "FCH.L"))
colnames(xy) <- gsub('\\.', ' ', colnames(xy))
library(lubridate)
library(quantmod)
xy$`IPO Date` <- mdy(xy$`IPO Date`)
xy$`IPO Open Price` <- NA
for (i in 1:nrow(xy)) {
ticker <- as.character(xy[i, 'Stock Symbol'])
ipo_date <- as.character(xy[i, 'IPO Date'])
next_date <- as.character(xy[i, 'IPO Date']+7)
xy[i, 'IPO Open Price'] <- getSymbols(ticker, from = ipo_date, to = next_date,
auto.assign = FALSE)[1,1]
}