числа находятся вне допустимого диапазона при вычислении MACD и обработке ошибок - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь вычислить ( 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.

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Q : "... и обработка ошибок"

Если я могу добавить к этому немного соли, ошибка -предотвращение намного лучше, чем любая последующая обработка ошибок.

Для этого есть дешевый, постоянный O (1) на шаге [TIME] - и [SPACE] -Домены, который принципиально предотвращает любые такие связанные с ошибками сбои:

Просто добавьте к экземпляру вектора данных TimeSERIES с таким количеством постоянных и инвариантных по отношению к процессу ячеек значений, которые достигают максимальной глубины любой векторной обработки, и любой такой ошибки или исключения в основном избегаются:

  • инвариантное значение обработки, в большинстве случаев, является первым известным значением, которое должно повторяться столько раз, сколько необходимо назад, в направлении времени к старшему ( отсутствует * bars (да, не полагаясь на NaN -s и то, как NaN -s может привести к проблемам в методах, которые чувствительны к отсутствующим данным, что было описано выше. QED)
0 голосов
/ 05 февраля 2020

Для тех, кто заинтересован, я нашел причину ошибки: некоторые акции имеют недостающие цены. Это просто так. Например, Dow US Equity имеет только около 180 дневных цен (по любой причине) за последние полтора года, которые однозначно нельзя использовать для вычисления скользящего среднего значения за 360 дней.

Я в основном запускал небольшие сэмплы, пока я в конце концов не определил причину сообщения об ошибке Вообще говоря, если вы не пытаетесь извлечь данные из более чем 6000 акций или около того, и вы запрашиваете, скажем, 50 полей, вы в порядке. Эмпирическое правило для ежедневного ограничения использования Bloomberg, как говорят, составляет приблизительно 500 000 для школьной консоли. Коллега доктора философии, работающий в торговой фирме, также сказал мне, что профессиональные консоли Bloomberg более щадящие.

...