I ran this on my own book after a quarter where everything was green and I still felt like I had no idea what was working. The account was up, sure, but I could not tell you which positions actually earned that number and which ones just rode the general tide. So I built a Security Market Line for the portfolio, one asset at a time, and the chart told me more in five minutes than the P&L had in three months.
The idea comes straight out of CAPM, and it is simpler than the acronyms make it sound. Every asset has a beta, which is how much it moves relative to the market. The market here is your benchmark, usually a broad crypto index or just BTC if you want to keep it clean. CAPM says an asset's expected return should be the risk-free rate plus its beta times the market's excess return. Plot expected return on one axis, and the assets that are worth holding should sit above the line where realized beat expected. Everything below the line took the risk and did not pay you back.
Estimating beta for each holding
Start with returns, not prices. Pull daily or weekly closes for each coin and for your benchmark over a lookback window. I use something like a year of daily data as a default. Shorter and the beta is noise, longer and you are averaging over regimes that no longer exist. Convert every price series to periodic returns, either simple percent change or log returns, just be consistent across all of them.
Beta is the covariance of the asset's returns with the market's returns, divided by the variance of the market. In practice you regress the asset's returns against the benchmark's returns and read the slope. A spreadsheet SLOPE function does this, and so does one line of numpy. A beta of 1 means the coin moves roughly with the market. A beta of 2 means it swings twice as hard in both directions. Most large caps land somewhere between 0.8 and 1.3 against a BTC benchmark. Smaller, thinner coins can run much hotter, and that high beta is exactly what you want to see priced correctly.
One thing worth flagging early. Crypto betas are unstable. A token can behave like a 0.9 for months and then decouple entirely because of some protocol news, and your regression will happily hand you a number that is already stale. Treat beta as a rough coordinate, not a precise measurement.
Turning beta into an expected return
Now apply CAPM to get each asset's implied expected return. The formula is the risk-free rate, plus beta multiplied by the difference between the market's return and the risk-free rate. The risk-free rate is whatever you can earn parking cash safely, and if you want to keep the whole exercise inside crypto you can set it to zero and just work in excess returns. It does not change the shape of the picture much.
Here is the workflow I actually run:
- Pick a benchmark and a lookback window, and pull returns for the benchmark and every holding.
- Regress each holding against the benchmark to get its beta.
- Compute the market's realized return over that same window.
- Plug each beta into CAPM to get that asset's expected return.
- Compute each asset's actual realized return over the window.
- Scatter realized return on the vertical axis against beta on the horizontal, and draw the SML through the risk-free point and the market point.
The line itself is the set of returns you should have expected given how much market risk each position carried. Assets plotted above it delivered more than their beta justified. Assets below it underdelivered. The vertical gap between a point and the line is that asset's alpha over the window, the part of the return that beta cannot explain.
Reading the chart without fooling yourself
The first time I looked at mine, two things jumped out. A position I was quietly proud of sat right on the line, which meant all of its return was just leverage on the market. It felt like skill and it was beta. And a boring mid cap I almost cut was comfortably above the line, quietly earning return the market did not hand to it. Dead beta versus real contribution, on one chart.
A few rules of thumb I use so I do not over-read it:
- Points near the line, high or low, are mostly just market exposure. You could replace them with more benchmark and get a similar ride cheaper.
- Points well above the line are the interesting ones, but check whether it is one lucky month doing the lifting before you call it alpha.
- Points well below the line are the ones to interrogate. Sometimes it is a broken thesis, sometimes it is a coin that simply has not caught its move yet.
- Run the same chart over two different windows. If a name flips from above to below depending on where you start, its edge is probably noise.
The biggest failure mode is trusting a single beta from a single window and building conviction on top of it. In equities the SML is a slow, stable object. In crypto it breathes. So I rebuild it every so often rather than treating it as settled, and I care more about which names consistently land on the same side of the line than about their exact coordinates.
None of this requires a platform. A spreadsheet with price history and a SLOPE function gets you most of the way. I ended up wiring it into Blockcircle so the betas and scorecards refresh on their own, but the value is in the habit, not the tooling. Once you have seen your own holdings scattered against the line, it is hard to look at a green quarter the same way, because now you can tell the positions that earned it from the ones that just showed up.