Я пытаюсь вычислить ( MACD - signal ) / signal
цены Russel 1000 (который является индексом акций США с большой капитализацией в 1000 долларов США). Я продолжаю получать это сообщение об ошибке и просто не могу понять, почему:
Error in EMA(c(49.85, 48.98, 48.6, 49.15, 48.85, 50.1, 50.85, 51.63, 53.5, :
n = 360 is outside valid range: [1, 198]
I ' Я все еще относительно новый в R, хотя я опытный в Python. Я полагаю, что мог бы использовать «try
», чтобы просто обойти эту ошибку, но я хочу хотя бы понять, в чем причина.
Без дальнейших церемоний, это код:
N<-1000
DF_t<- data.frame(ticker=rep("", N), macd=rep(NA,N),stringsAsFactors=FALSE)
stock<-test[['Ticker']]
i<-0
for (val in stock){dfpx=bdh(c(val), c("px_last"),start.date=as.Date("2018-1-
01"),end.date=as.Date("2019-12-30"))
macd<- MACD( dfpx[,"px_last"], 60, 360, 45, maType="EMA")
num<-dim(macd)[1]
ma<-(macd[num,][1]-macd[num,][2])/macd[num,][2]
i=i+1
DF_t[i,]<-list(val,ma)
}
Для вашей информации,
bdh()
- это команда Bloomberg для извлечения исторических данных c.
dfpx[]
- это фрейм данных.
MACD()
- это функция, которая берет временной ряд цен и выводит матрицу,
, где первый столбец - значения MACD
, а второй столбец - значения signal
.
Большое спасибо! Любой совет будет очень признателен. Кстати, код работает с небольшой выборкой из нескольких акций, но при попытке применить его к юниверсу из тысячи акций он выдаст сообщение об ошибке. Кроме того, количество точек данных составляет около 500, что должно быть достаточно для моей настройки параметров для вычисления MACD.