# How does return-based analysis calculate expected return of a trading system?

Suppose you have a trading system that is never flat, but either long or short the market. You have four years of performance. During that period, your system changed its position 10 times. So you have 10 trades from which to calculate expected return. Assume you always traded the same lot size. In a transaction-based analysis, you would compute your expected return based on the average win amount, average loss amount, percentage of trades that were winners and percentage of trades that were losers.

Assume the system had 5 winning trades and 5 losing trades. The average win was 100 dollars and the average loss was 50 dollars. You don't need the expected return formula to figure out if there is a positive expectation to this system.

Expected Return = (ave win * win percent) - (ave loss * lose percent)


Plug in our values we find:

Expected Return = (100 * .5) - (50 * .5) = 25 (dollars)


Alright, wonderful. Too bad we only have 10 trades though. Curiously, if you watch daily returns versus trade returns, you have 1008 observations (252*4). Does returns-based analysis calculate average positive daily returns, average negative daily returns and win/loss percentages in a manner similar to the transaction-based analysis? The Expected Return would not be a dollar value obviously, but a daily return value. So instead of 25 dollars, you'd get 0.0023423 for example. (NOTE: 0.0023423 is a completely made-up number in this example)

EDIT:

To the question of what frequency we calculate returns. Let's assume the trade system decides what position to be in tomorrow based on a signal given at the end of the current trading day. So our system calculates its signal daily, ergo we rationally only consider daily returns.

EDIT #2: Our system generates a signal every day, but in our example that signal has only changed 10 times during the course of 4 years. The signal can be either a 1 (long) or -1 (short). If we were previously short (-1) and the signal triggered a change to long (1), we would switch our short position to a long position. If the next day the signal triggered long, we would maintain our current position.

-

You can't add returns. You must multiply them. In your example above where daily returns are 25%, 25%, and -40%

To compute expected return from a return series, simply use this formula: return = product( 1+return);

in the case of you example this yields: return = (1.25 * 1.25 * .6) = .9375

To get the expected daily return use the geometric mean: expected return = (1.25 * 1.25 * .6)^(1/3) -1 = -2.13%

http://en.wikipedia.org/wiki/Geometric_mean

-

Returns-based analysis cannot calculate the expected return of a trading system. It yields nonsensical results and is not suited to this particular calculation.

Consider a game where every time you play, you win 25% twice and lose 40% once. There are basically three permutations of this game. Represented in R vectors:

first  <- c(.25, .25, -.4)
second <- c(-.4, .25, .25)
third  <- c(.25, -.4, .25)


Here is a simple function that takes each sequence individually and returns what's left from your stack of 100 chips.

game <- function(x){

start <- 100

for(i in 1:NROW(x))

start <- start + start*x[i]

return(start)
}


Try it yourself and you will see that each time, the result is 93.75. You lose every time. If you calculate the expected return in the canonical manner, you get the following:

Expected Return = (.25 * .33) + (.25 * .33) + (-.40 * .33) = 0.033


This is a positive value for a game in which you cannot win. If you sum returns, you get the following:

Sum Returns = .25 + .25 + (-.40) = .10


Again, a positive value for a game in which you always lose.

If you analyze your expected return using transaction-based analysis as given in the original question, you get the same result each time. The answer comes to -2.0625. A negative expectation that will keep you clear from playing this game.

UPDATE: this answer was based on the false assumption that you can add simple returns, and of course you can only add log returns.

Simple Returns = 1.25 * 1.25 * .6 = .9375

Log Returns = log(1.25) + log(1.25) + log(.6) =  -0.06453852
antilog of sum = exp( -0.06453852) = .9375

-