2016-06-17 14 views
0

Ich versuche, die Zeitreihe der Bestandteile der NASDAQ-100 herunterladen. Ich möchte es unter Verwendung der beiden getSymbols und getYahooData von den gleichen Autoren tun, um eventuelle Abweichungen weiter zu untersuchen. Es stellt sich heraus, dass nur die letztere Funktion nicht in der Lage ist, die Daten für „ADP“ und „NVDA“ zu importieren:getYahooData (TTR) und getSymbols (Quantomod) Fehler beim Importieren von Daten für bestimmte Ticker

> getYahooData("ADP") 
Error in NextMethod(.Generic) : 
    number of items to replace is not a multiple of replacement length 

Des Weiteren, obwohl die angepassten Preise für alle tickers entsprechen, die eingestellte Lautstärke entspricht nicht und ich muss den Grund wissen. Das Problem wird durch die Tatsache erschwert, dass die Ticker, die einen Fehler anzeigen, nicht immer dieselben sind, die denselben Code ausführen! Im Durchschnitt bekomme ich einen Fehler für die Lautstärke von ungefähr 6 Tickern. I schnelle Untersuchung zeigt, dass die Diskrepanz des Volumens tendenziell nur für den letzten Zeitraum auftritt, obwohl die Preisanpassung rückwärts ist.

require(quantmod) # for getSymbols 
require(TTR) # for getYahooData 
constitutents = c("AAL","AAPL","ADBE","ADI","ADP","ADSK","AKAM","ALXN","AMAT", 
        "AMGN","AMZN","ATVI","BBBY","BIDU","BIIB","BMRN","CA","CELG", 
        "CERN","CHKP","CHTR","CMCSA","COST","CSCO","CSX","CTRP", 
        "CTSH","CTXS","DISCA","DISCK","DISH","DLTR","EA","EBAY", 
        "ENDP","ESRX","EXPE","FAST","FB","FISV","FOX","FOXA","GILD", 
        "GOOG","GOOGL","HSIC","INCY","INTC","INTU","ILMN","ISRG","JD", 
        "KHC","LBTYA","LBTYK","LLTC","LMCA","LRCX","LVNTA","MAR", 
        "MAT","MDLZ","MNST","MSFT","MU","MXIM","MYL","NCLH","NFLX", 
        "NTAP","NVDA","NXPI","ORLY","PAYX","PCAR","PCLN","PYPL", 
        "QCOM","QVCA","REGN","ROST","SBAC","SBUX","SIRI","SNDK", 
        "SRCL","STX","SWKS","SYMC","TMUS","TSCO","TSLA","TRIP","TXN", 
        "ULTA","VIAB","VOD","VRSK","VRTX","WBA","WDC","WFM","XLNX", 
        "YHOO") 
errorsList = NULL 
for(symbol in constitutents) { 
    # Download the time series of the ticker indicated by 
    # the symbol 
    getSymbols(symbol, from="1900-01-01") 
    # Adjust the time series for splits and dividends 
    assign(symbol, adjustOHLC(get(symbol, pos=.GlobalEnv), symbol.name=symbol, 
           adjust=c("split","dividend"))) 
    # The function getYahooData fails to import the time series for 
    # the following two tickers. An error message is retrieved. 
    if (symbol=="ADP")next 
    if (symbol=="NVDA")next 
    # Import the same data again using a different function from the same 
    # authors. 
    data = getYahooData(symbol) 
    # Check if the traded volume for the data obtained using two different 
    # functions correspond each other. 
    volumeMismatch = min(data[ ,5] - get(symbol, pos=.GlobalEnv)[ ,5]) 
    if (abs(volumeMismatch)>1e-6) { 
     errorsList = c(errorsList, symbol) 
     print(paste(symbol, "presents an mismatch for the volume")) 
    } else { 
     print(paste("getYahooData and getSymbols corresponds for", symbol)) 
    } 
} 

> errorsList 
[1] "GOOGL" "HSIC" "INCY" "LVNTA" "VRTX" "YHOO" 

Frage 1: Warum getYahooData ist nicht in der Lage, die Daten für "ADP" und "NVDA" zu importieren. FRAGE 2: Was ist der Grund für die Diskrepanz des Volumens für variable Ticker?

+0

Ich habe das Problem in Zusammenhang mit FRAGE 1 gelöst. Nur für ADP und NVDA gibt yahooFinance eine Dividende an einem Tag an, der nicht in der historischen Kurszeitreihe enthalten ist. ADP präsentiert eine Dividende und NVDA präsentiert ein Split-Datum "2001-09-12". Daher kann getYahooData in solchen Fällen keine Daten importieren, während getSymbols nicht fehlschlägt. Der Markt wurde an diesem Tag geschlossen (http://www.investopedia.com/financial-edge/0911/how-september-11-affected-the-u.s.-stock-market.aspx) – Elrond

Antwort

0

Verwendung:

getYahooData("ADP", 19000101, freq = "daily", type = "split", 
     adjust = TRUE, quiet = T) 

oder

getYahooData("ADP", d1, d2, freq = "daily", type = "split", 
     adjust = TRUE, quiet = T) 

wo d1 und d2 angegeben sind Termine, in dem Sie über den Preis der Aktie wissen will; Daten sollten im Format yyyymmdd sein.