Average yearly alpha around 8%
With default settings, since the early 1980es, this strategy has beaten the market
On the web app page there are two statistics calculated for you: Alpha and Beta. When playing around with the options on that app page it’s useful to have some basic understanding about what these two numbers tell you, something I’ll attempt to do here.
In finance, alpha refers to the risk adjusted excess returns obtained in addition to the risk taken and is commonly used as a performance measure on actively managed portfolios. In short: The more positive the alpha value is, the better. If it’s zero or less we tend to say you haven’t added any value as a portfolio manager. If your portfolio alpha is significantly negative some might even call you skillfully bad at your job. At that point they are basically saying that a 3-year old randomly trading at your terminal will statistically speaking have a better chance than you.
Beta on the other hand relates to how closely the strategy movies with the compared benchmark, i.e. your exposure. Beta is therefore closely related to correlation, but correlation is scaled to be within the -1 and +1 range. Beta is not scaled like this, so can be greater than that range.
Both of these values are obtained by solving a simple linear regression model. This is the simplest of the linear regression models where we only need to solve for alpha and beta. Some might say it’s too simple, and attempts have been made at adding additional terms to this model. A prominent example includes the Fama–French three-factor model. Then again, all these models are linear, which makes them inept at finding non-linear relationships in your data. Non-linear regression models is an attempt to solve that issue, which often involves trying to apply some type of function on one or more of the observed parameters, thereby making them fit in a linear regression model.
We’re sticking to the simple linear regression model and I’m going to use data between 2007 and 2010 (with 2x long, 0x short, 30 as cut point) as that’s a fairly interesting period in recent financial history. I’ve exported the table data to this Google Sheets document.
So we need two model inputs: Active and passive log-returns. We’re trying to explain the active returns using the passive returns, so our active returns are the Y and the passive the X in the model we’re attempting to fit. We start by solving for beta, then calculate alpha with the help of beta. I’ve tried to separate out the formula steps in the Google Sheet, hopefully making it easy to follow.
A graphical view
Since we are trying to describe active returns from passive returns we can also plot these values against each other in a scatter plot. This plot will have a fairly distinct look when applied to the web app output:
Beta here graphically describes the slope of a straight line which go between those two groups. Alpha describes the intersect somewhere in the middle. And the reason there are two so distinct groups like this is because the web app splits the market into two distinct states: At and above the indicator value (state 1) and below the indicator value (state 2). Our state 1 here is 2x long while state 2 is being out of the market.
There are several dates and values involved when applying the indicator value to the underlying benchmark as shown on the AgoraOpus Market Opportunity web app page. Before any deeper analysis is presented in later blog posts I think it’s useful to make it clear to everyone how this works.
A picture should hopefully make it easier, giving us something to reference:
Here we have three separate trading days. Each day the market opens and closes and we see the intraday prices as the dark blue solid line between each of the days two vertical black lines. For each day we have an average price, marked by the horizontal dotted blue line. Simplifying the calculation of the average prices, we’re going to use the average of the open, high, low, and close intraday prices.
For all analysis we’re always going to use average prices like this. We’re not trying to assume that you’re always extremely lucky or unlucky by either getting the best or worst intraday price for your trades. Average price also seems more reasonable if you need to perform multiple trades throughout the trading day to shift a larger portfolio around. Cases where you need more time than that to shift your position is not considered, but generally an interesting analysis I’ll potentially save for another post.
The returns between two days are then based on those two average prices. This difference, marked by the black bold line between two average price lines, is for all analysis calculated using log-returns. You can do things with log-returns, like summing them up, which is why I find them easier to work with.
Already we have a lot of numbers, so here’s a table with some example numbers:
Next we have an indicator value, given to us with ‘Day 1’ date. This date means that the indicator was applied on data up to and including day 1. We must wait till after the market closes on day 1 before the algorithm can start calculating this value, because we need the data. So it’s made available to us after the second vertical black line on day 1 (after market close, day 1), but before the first vertical line on day 2 (before market open, day 2). During day 2 we can start applying this indicator value by buying, selling, or holding current position. The impact of this will then only become measurable to us after market close on day 3, because we need the average price of both day 2 and day 3.
If you look at the three first days on any date range selected on the web app you’ll notice this in practice:
Both on the passive (always long with no leverage) and active columns, the two first days will always have the same price values because we need to wait till day 3 before showing the impact. Till then the default is to be long on the active.
For anyone who needs an export friendly source of data, according to the license given, I recommend using the GitHub repository here: https://github.com/AgoraOpus/AOMOI
There are two files of interest:
Header: Brief info + license
Content: Marked by “CONTENT START” and ended with “CONTENT END”
Tail: General content info like hash + check in timestamp. The hash is limited to what’s between content start and end tags.
Within the content section you’ll find three columns. It’s important to realize the the purpose of making this available at a third party site is to establish a public record of indicator values and when they were made public. The three data columns are:
- The market date at which this indicator was derived. That means the indicator used public information available at and including this date.
- For opportunity index: The indicator value itself, which is the same as what you’ll find at the web app.
For stock picks: A comma separated list of tickers.
- The date and time at which this was exported from the internal system.
These fields are separated by the pipe ( | ) character.
Check ins are signed using a dedicated public/private key. The public key is given below:
—–BEGIN PGP PUBLIC KEY BLOCK—–
Version: GnuPG v1.4.11 (GNU/Linux)
—–END PGP PUBLIC KEY BLOCK—–
After making a crucial discovery about human behavior and how it leaks into financial markets about 2-3 years ago I began building a system. A system capable of performing the necessary calculations and data storage to regularly run the algorithms I developed from that discovery.
And now I’m at last ready to release it to you. Or rather, I’m ready to release the output from those algorithms, freely available for non-commercial use. I invite you to play around with what I’ve named the AgoraOpus Market Opportunity Index as applied to the S&P 500 on this custom built web app.