2017-02-06 2 views
0

Donc mon problème est les données de sortie de la Return.cumulative diffère de la apply.yearly pour obtenir les mêmes chiffres de retour.Les données de retour de Return.cumulative vs apply.yearly sont différentes?

est ici le code de reproduire

require(quantmod) 
require(PerformanceAnalytics) 

from <- as.Date("2016-01-01") 
to <- as.Date("2017-01-01") 

getSymbols("GOOGL", from = from, to = to) 

dat <- GOOGL[,6] 
returns <- na.omit(ROC(dat,n = 1,"discrete")) 

# Cumulative return 
cumReturn <- Return.cumulative(returns) 

# Apply return 
sumReturn <- apply.yearly(returns,sum) 

# Print 
print(cumReturn) 
print(sumReturn) 

Je reçois aussi les mêmes différences en essayant d'obtenir des données mensuelles en utilisant la fonction apply.monthly.

Répondre

1

Les retours discrets doivent être agrégés dans le temps (multiplicatif). La somme des retours discrets donne des résultats inexacts. Return.cumulative utilise l'agrégation géométrique par défaut.

R> Return.cumulative(returns) 
        GOOGL.Adjusted 
Cumulative Return  0.04346625 
R> apply.yearly(returns+1, prod)-1 
      GOOGL.Adjusted 
2016-12-30  0.04346625 

Voir A Tale of Two Returns pour une discussion sur les différences et les relations entre les deux types de retour.

Si returns continue contenaient (log) aggravé les retours, votre appel apply.yearly serait correct, et vous devez définir geometric = FALSE dans l'appel Return.cumulative.

R> Return.cumulative(returns, geometric = FALSE) 
        GOOGL.Adjusted 
Cumulative Return  0.06251856 
R> apply.yearly(returns, sum) 
      GOOGL.Adjusted 
2016-12-30  0.06251856 
+0

Merci! a un sens total et fonctionne parfaitement. –

+0

Et comment obtenez-vous une série chronologique avec les rendements accumulés pour chaque jour de l'année. Fondamentalement série chronologique avec les points de données du graphique 'chart.CumReturns'? –

+0

@WarricRitchie: 'cumsum' ou' cumprod', selon le type de retour que vous utilisez. –