Take the 2-minute tour ×
Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. It's 100% free, no registration required.

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.

share|improve this question
    
If your position changed only 10 times in 4 years, I would be a bit worried about data mining –  RockScience Apr 12 '11 at 1:57
    
@fRed does viewing the exact same system over the same time frame as daily returns (and increasing your observations 100 fold) address those data mining worries (which I share)? –  Milktrader Apr 12 '11 at 10:14
    
With regard to concerns over data mining, it would be trivially simple to apply the tests outlined in Aronson's book, "Evidence Based Technical Analysis," to the above posited system to determine the extent to which data mining bias has an influence on the system's returns. –  babelproofreader Apr 12 '11 at 10:26
    
I don't have access to the book, what is this test? –  RockScience Apr 12 '11 at 10:29
    
@ MilkTrader. To answer specifically your question, I disagree. What counts is the number of times your indicator changes. Consider your strategy with milliseconds if you want, you won't change the fact that you have 10 trading decisions in 4 years –  RockScience Apr 12 '11 at 10:31
show 3 more comments

2 Answers 2

up vote 2 down vote accepted
+100

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

share|improve this answer
    
and don't forget the most important metric... max drawdown. –  glyphard Apr 18 '11 at 15:01
    
What is the equation for taking daily returns and calculating expected return? –  Milktrader Apr 18 '11 at 22:25
    
@Milktrader: Technically it's the average of the daily returns. That is the expectation on any given day. However, normally this is not sufficient information. To make it useful one needs to look at winning trades vs losing trades and generate a histogram and then normalize(z-score) so that you end up with a confidence interval that allows you to say X% of the time the daily return will be within Z standard deviations of the expected daily return. Then you can choose how to size/risk decision upcoming trades. –  glyphard Apr 19 '11 at 4:24
    
I get the winning trades vs losing trades metric, but that's the transaction-based analysis. The original question is "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?" This question is specific to returns-based analysis. –  Milktrader Apr 19 '11 at 9:03
    
@Milktrader Ahh, I see what you're saying, (trade vs return). This is why I mentioned the part about, "any level of granularity that you have data" So if daily returns is what you have, you still compute the average daily return, then look at min daily return, max daily return, and build a histogram, normalize, and go from there... This is a long way to say, YES... return based analysis uses the same approach as transaction based. –  glyphard Apr 20 '11 at 2:12
show 6 more comments

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
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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