我创建了所有标普500公司收盘价的数据框列表。我想为每个公司计算RSI。
library(BatchGetSymbols)
first.date <- Sys.Date()-365
last.date <- Sys.Date()
df.SP500 <- GetSP500Stocks()
tickers <- df.SP500$tickers
l.out <- BatchGetSymbols(tickers = tickers,
first.date = first.date,
last.date = last.date)
l.out$df.tickers$price.open <- NULL
l.out$df.tickers$price.high <- NULL
l.out$df.tickers$price.low <- NULL
l.out$df.tickers$volume <- NULL
l.out$df.tickers$price.adjusted <- NULL
l.out$df.tickers$ret.adjusted.prices <- NULL
l.out$df.tickers$ret.closing.prices <- NULL
SP <- l.out$df.tickers
mylist <- split(SP, SP$ticker)
我尝试使用lapply但失败了:
rsi <- lapply(names(mylist$price.close), RSI)
它产生的列表为0。感谢您对此提供的任何帮助!谢谢。
答案 0 :(得分:1)
将Sub cmdButtonData_Click()
Dim SellStartDate As Date
Dim SellEndDate As Date
SellStartDate = Sheets("Launch").Range("H10").Value
SellEndDate = Sheets("Launch").Range("H11").Value
Sheets("Sheet2").Cells.Clear
On Error Resume Next
'I have the connection string here.
If Err.Number <> 0 Then
Sheets("Sheet3").Activate
Else
'Copy the data
Sheets("Sheet1").Range("A1:K2").Copy Sheets("Sheet2").Range("A1")
Sheets("Sheet1").Range("A3:K16000").SpecialCells(xlCellTypeConstants).Copy
Sheets("Sheet2").Range("A3")
Sheets("Sheet1").Activate
Sheets("Sheet2").Range("A3:T3").Delete
End If
End Sub
与匿名函数一起使用,以price.close调用lapply
函数。默认情况下,RSI的前14个值为NA,因为它会计算14天的RSSI。
RSI
答案 1 :(得分:0)
请考虑by
,它将split
和lapply
紧凑地替换为诸如
RSI_list <- by(SP, SP$ticker, function(sub) TTR::RSI(sub$price.close))
万一其中一个行情自动收报器无法维持有效的收盘价,请在tryCatch
中包装看涨期权,并为这些有问题的情况返回NA:
RSI_list <- by(SP, SP$ticker, function(sub)
tryCatch(TTR::RSI(sub$price.close),
error = function(e) return(NA)))