2
$\begingroup$

I have a Portfolio that is rebalanced every 3-months. The portfolio is made up of assets that have daily log-returns. I am a bit confused when charting the results using R: more specifically charts.PerformanceSummary() by library(PerformanceAnalytics). Take the following Portfolio called EQUALwt which ranges from JAN-2013 to JUN-2014.

EQUALwt <- structure(c(0.0178647409955362, -0.0723746508445446, -0.00458728466704914, 
0.238164594011257, -0.211824465096801, 0, -0.0406297323744437, 
0, 0.0447620578622464, 0.0158783514305815, -0.0742389273092776,  
-0.0275507850334035, 0, 0, 0, 0.00781313587602611, 0, 0.400176058116336, 
0, 0, 0.0549071523016913, 0, -0.0102054986300638, 0.18349229377005, 
0, 0.503725755135566, 0, 0, 0, 0.173286795139986, -0.134749125183172, 
0, -0.144954623813235, 0.106416953856421, 0.117500907311434, 
0, 0.00617315314759284, 0.0048310682066007, 0.00561821396301465, 
-0.118614494898779, 0.061362327207127, -0.0312907857385016, 0.218867184338475, 
-0.18032951438166, 0.0557858878285524, 0, 0, 0, 0, -0.199626924054443, 
-0.0679834288709105, 0.173286795139986, 0.0294457589140959, 0, 
-0.101366277027041, -0.134749125183172, 0.0982606470274018, -0.00909191104271873, 
0.0161346302843927, 0.169349705897952, -0.119893270065472, -0.0950368250309686, 
0.0957480630640265, 0.345862352246915, -0.290076464418362, 0.0455803891984886, 
-0.29078770245142, 0, -0.101366277027041, 0, -0.00529714841430817, 
-0.00392421399289589, 0, 0, 0, 0.00392421399289589, 0, 0, 0.101366277027041, 
-0.101366277027041, 0.101366277027041, -0.101366277027041, 0, 
 0, 0.101366277027041, -0.101366277027041, 0.101366277027041, 
 -0.101366277027041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00459018909397668, 
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0173932042470827, 
 0.0195106767517173, -0.0206496308856826, -0.00114416675685292, 
 0.0144806619331761, 0, 0, 0, 0, -0.0418056903486528, 0.402359478108525, 
 0, -0.0217528442474074, 0, -0.00220265742053874, 0.0243967543311115, 
 0.00108460039964958, -0.00217392674188849, -0.0228469378973572, 
-0.00240386467486048, -0.0212213330373311, -0.0217528442474074, 
-0.0719205181129453), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), .indexTZ = "", tclass = c("POSIXct", "POSIXt"), tzone = "", index =    
structure(c(1357084800, 
1357171200, 1357257600, 1357516800, 1357603200, 1357689600, 1357776000, 
1357862400, 1358121600, 1358208000, 1358294400, 1358380800, 1358467200, 
1358726400, 1358812800, 1358899200, 1358985600, 1359072000, 1359331200, 
1359417600, 1359504000, 1359590400, 1364774400, 1364860800, 1364947200, 
1365033600, 1365120000, 1365379200, 1365465600, 1365552000, 1365638400, 
1365724800, 1365984000, 1366070400, 1366156800, 1366243200, 1366329600, 
1366588800, 1366675200, 1366761600, 1366848000, 1366934400, 1367193600, 
1367280000, 1372636800, 1372723200, 1372809600, 1372896000, 1372982400, 
1373241600, 1373328000, 1373414400, 1373500800, 1373587200, 1373846400, 
1373932800, 1374019200, 1374105600, 1374192000, 1374451200, 1374537600, 
1374624000, 1374710400, 1374796800, 1375056000, 1375142400, 1375228800, 
1380585600, 1380672000, 1380758400, 1380844800, 1381104000, 1381190400, 
1381276800, 1381363200, 1381449600, 1381708800, 1381795200, 1381881600, 
1381968000, 1382054400, 1382313600, 1382400000, 1382486400, 1382572800, 
1382659200, 1382918400, 1383004800, 1383091200, 1383177600, 1388534400, 
1388620800, 1388707200, 1388966400, 1389052800, 1389139200, 1389225600, 
1389312000, 1389571200, 1389657600, 1389744000, 1389830400, 1389916800, 
1390176000, 1390262400, 1390348800, 1390435200, 1390521600, 1390780800, 
1390867200, 1390953600, 1391040000, 1391126400, 1396310400, 1396396800, 
1396483200, 1396569600, 1396828800, 1396915200, 1397001600, 1397088000, 
1397174400, 1397433600, 1397520000, 1397606400, 1397692800, 1397779200, 
1398038400, 1398124800, 1398211200, 1398297600, 1398384000, 1398643200, 
1398729600, 1398816000, 1404172800), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(136L, 1L), .Dimnames = list(NULL, "EQUALwtLoHi"))

I am a bit confused for the geometric specification.

# Geometric Return
charts.PerformanceSummary(EQUALwt, geometric=TRUE)

# Non-Geometric Return
charts.PerformanceSummary(EQUALwt, geometric=FALSE)

As you can see they differ quite a bit! I understand that the geometric return takes daily componding into account but how would you explain the non-geometric returns? Is this the cumulative sum i.e. buy-and-hold (which is what I am doing with these assets)?

Would it be safe to say that in order for the non-compounded return to be true, the portfolio would have to start with the same amount of cash at every rebalancing period?

$\endgroup$
4
$\begingroup$

Actually, neither of your two results are quite correct. As explained in the Details for the Return.calculate function, most of the PerformanceAnalytics functions use discrete returns, not log returns.

To get the correct results, you will have to convert your data from log returns to simple returns.
Compare the charts from the following:

charts.PerformanceSummary(exp(EQUALwt)-1, geometric=TRUE, wealth.index=TRUE)
charts.PerformanceSummary(EQUALwt, geometric=FALSE)

The first is correct. Since the second uses log returns, the results for second CummulativeReturn chart are the log of the actual retults; i.e. if you used exp() on the CummulativeReturns of the second function, you would get the first set of results.

$\endgroup$
  • $\begingroup$ thank you so much for explaining in detail. It is much clearer to me now! Thanks once again $\endgroup$ – Jason Guevara Dec 15 '14 at 2:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.