2017-09-20 10 views
0

J'essaie d'obtenir les moyennes arithmétiques quotidiennes et géométriques quotidiennes pour chaque année, pour les données de stock APPL en utilisant R. Mon implémentation sur ce sera la fonction periodReturn dans le dernières lignes, mais cela ne semble pas fonctionner, et une erreur: '...' utilisé dans un contexte incorrect est donné.Arithmétique quotidienne et moyennes géométriques quotidiennes pour chaque année (AAPL)

Comment puis-je modifier mon code de sorte que je puisse obtenir la sortie désirée? De l'aide sera grandement appréciée.

# Get historical price data (daily) 
getSymbols('AAPL', from = "2005-01-01") 

AAPLdaily <- as.data.frame(AAPL) 
head(AAPLdaily) 

?to.period 

# AAPLweekly <- to.weekly(to.weekly(AAPL, indexAt = 'endof')) 
# AAPLweekly <- as.data.frame(AAPLweekly) 
# Better to do it in one step like this: 
AAPLweekly <- as.data.frame(to.weekly(AAPL, indexAt = 'endof')) 
head(AAPLweekly) 

AAPLmonthly <- as.data.frame(to.monthly(AAPL, indexAt = 'endof')) 
head(AAPLmonthly) 

AAPLyearly <- as.data.frame(to.yearly(AAPL, indexAt = 'endof')) 
AAPLyearly 

# Another way to do this 
AAPLweekly1 <- as.data.frame(to.period(AAPL, period = 'weeks', indexAt = 'endof')) 
head(AAPLweekly1) 
AAPLmonthly1 <- as.data.frame(to.period(AAPL, period = 'months', indexAt = 'endof')) 
head(AAPLmonthly1) 
AAPLyearly1 <- as.data.frame(to.period(AAPL, period = 'years', indexAt = 'endof')) 
head(AAPLyearly1) 


########## Another possible method ######### 

# Change to data.frames 
AAPL = as.data.frame(AAPL) 
head(AAPL) 

# Get Dates 
dates <- as.Date(row.names(AAPL)) 
head(dates) 

# Create a cloumn in APPL data frame with the dates 
AAPL$dates <- as.Date(row.names(AAPL)) 

?aggregate 
?substr 

# Last Day of month 

lastDayofMonth <- aggregate(AAPL["dates"], list(month = substr(AAPL$dates, 1, 7)), max) 
head(lastDayofMonth) 
AAPLmonth <- AAPL[dates %in% lastDayofMonth$dates, ] 
head(AAPLmonth) 

# Last day of year 

lastDayofYear <- aggregate(AAPL["dates"], list(month = substr(AAPL$dates, 1, 4)), max) 
head(lastDayofYear) 
AAPLyear <- AAPL[dates %in% lastDayofYear$dates, ] 
AAPLmonth 

AAPLdaily <- as.data.frame(to.daily(AAPL, indexAt = 'endof')) 
AAPLdaily 

dailyReturn(AAPLdaily) 

periodReturn(AAPL, 
      period='daily', 
      subset=NULL, 
      type='arithmetic', 
      leading=TRUE, 
      ... 
      ) 
+1

'' 'annualReturn (AAPLdaily)' '' est-ce ce dont vous avez besoin? –

+0

@GeorgeSotiropoulos Oui, si la sortie pour chaque année est le rendement quotidien pour chaque année correspondante, calculé par la moyenne arithmétique. Cependant, cela ne donne pas la moyenne géométrique pour chaque année. – Stoner

Répondre

1

Si ce que vous demandez est l'année, chaque mois, le retour arithmétique/géométrique hebdomadaire tout ce que vous avez à faire est:

getSymbols('AAPL',from= '2010-01-01') 
    ROC(AAPL[endpoints(AAPL,on = 'years'),"AAPL.Adjusted"],type='discrete’) 

2012-12-31 0.32566879 
2013-12-31 0.08069493 
2014-12-31 0.40622488 
2015-12-31 -0.03013708 
2016-12-30 0.12480425 
2017-09-20 0.36428706 

pour le retour géométrique (log) changer l'argument ROC à 'continu':

ROC(AAPL[endpoints(AAPL,on = 'years'),"AAPL.Adjusted"],type='continuous’) 

2012-12-31 0.28191708 
2013-12-31 0.07760429 
2014-12-31 0.34090873 
2015-12-31 -0.03060053 
2016-12-30 0.11760902 
2017-09-20 0.31063199 

Pour d'autres périodes changer l'argument endpoints-months ou weeks.

+0

Je suis incapable d'obtenir vos résultats ci-dessus, même avec le quantmod. Ce qui suit est la sortie I a reçu: > getSymbols ('AAPL', from = '2010-01-01') [1] "AAPL" > ROC (AAPL [points d'extrémité (AAPL, sur les 'années' =), "AAPL.Adjusted"], tapez = 'continue') + – Stoner

+0

et le processus s'arrête. – Stoner