The Sharpe Ratio is a trash statistic.

Investors Collaborative Community Newsletter

Settle in class

Today we’re going to be discussing a particular set of Quantitative Statistics I personally like to use to find groups of strategies and logic. Think of this as part statistics lesson, part dive on how to use the Community Database. Hop in.

Ulcer Index and Serenity Index: AKA Why Jake thinks the Sharpe Ratio is noise.

So, I’m going to start off with an article and a summary of a conversation from General Chat. Turns out people have very strong opinions on their statistic preferences, and I’m here to try and drop some info and educate yall.

Now that’s a rundown on the math behind the conversation, as well as a fantastic primer on everything to do with the indicators in question.


My TLDR? 2 Indicators combined give us the Serenity Index. More data goes in, more useful data comes out, no? We’re also going to ignore the creation of the Smart Sharpe for now. I’m still analyzing and trying to learn about that one.

Now, how do these numbers compare to each other?

Well, they both measure volatility. That’s about where the similarities end. The following is “complex equations as explained by a forklift driver”. Enjoy

Sharpe Ratio

The Sharpe Ratio of a strategy or portfolio is simply a measure of the return of a strategy minus the risk free rate. It tells you very little about any details of drawdowns or returns, apart from their relationship to the Risk Free Rate.

Pros and cons? Its so easy to calculate, even I can do it. The ease of calculation means that you can find pretty consistent data across a whole slew of assets, vehicles, and strategies. Its really good at giving a basic picture of how volatile a strategy is, but very non-specific in that volatility, up or down. It assumes that standard deviation is just that, standard, which I do not agree with or like.

Serenity Ratio

Calculated using the Ulcer Index and Pitfall Indicator of a given portfolio, the Serenity Ratio is undeniably harder to calculate, incorporating two separate sub-calculations. The immediate counterpoint to this is that it provides you with a much, much clearer picture of downside risk than the Sharpe Ratios indeterminate volatility.

Higher Pitfall means deeper average drawdowns, and higher Ulcer Index means Drawdowns are more frequent. Ergo, optimizing for Serenity minimizes both the length, depth, and frequency of drawdowns, all in one clean statistic.


All that said, outside of the Quantstats Tools and Composer, Serenity Index is relatively hard to find discussion about. Very few papers, and almost no articles either. You’re kind of flying blind and developing your own sense of what is “good”

So what’s the deal?

Put simply, Sharpe just tells you the rough volatility-adjusted rewards. It’s not even risk adjusted, since it is both upside and downside volatility. Serenity Index shows you specifically the downside risk, which is much more useful in my opinion.

Its harder to determine a “Good” Serenity Index, but I’ve personally settled on somewhere between 2 - 150 is the range of “good looking, but believable”

Okay, now lets put this to use.

If you’re unfamiliar with the Discord Community Database, there are currently about 2500 strategies collected over the life of the server.

Are you familiar with SQL databases? No? Well, you’re going to have to learn sooner or later. Might as well be today. On the website above, you’re going to click on the large, bolded date. At time of publication, that date is 2024-01-28. This will change as the database is updated weekly, so the position is more important than the numbers.

Once there, you’re going to copy the following code snippet into the box and click “Run SQL” when you’re done.

select rowid, symphony_id, symphony_url, created_by, first_seen, last_edited, symphony_name, source, symphony_size, backtest_start_date, backtest_end_date, last_backtested, last_day_holdings, cumulative_return, annualized_return, returns_1w, returns_1m, returns_3m, returns_1y, oos_performance, oos_perf_diff_from_benchmark, annualized_oos_performance, annualized_oos_perf_diff_from_benchmark, max_drawdown, sharpe_ratio, calmar_ratio, standard_deviation, is_public, [Outlier Loss Ratio], [Ulcer Index], [Information Ratio], [Smart Sortino/√2], [Win Year], [Win Month], [Longest DD Days], [CAGR﹪], [Avg. Drawdown Days], [Sortino/√2], [Worst Month], [Time in Market], [Expected Yearly], [Recovery Factor], [Best Year], [Worst Year], [Win Quarter], [Smart Sortino], Skew, Alpha, YTD, [Start Period], [All-time (ann.)], [End Period], [Win Days], [Outlier Win Ratio], [Cumulative Return], [Volatility (ann.)], [Prob. Sharpe Ratio], [Avg. Drawdown], Kurtosis, [Common Sense Ratio], [Daily Value-at-Risk], [Max Consecutive Losses], Calmar, Sortino, [Expected Daily], [6M], [Worst Day], [Gain/Pain (1M)], [3M], [Best Day], [1Y], MTD, [Avg. Down Month], [Best Month], Sharpe, Correlation, [Avg. Up Month], [Max Drawdown], [Profit Factor], Omega, [Max Consecutive Wins], [Tail Ratio], [Smart Sharpe], [Serenity Index], [CPC Index], [Risk-Free Rate], [Gain/Pain Ratio], [Payoff Ratio], [3Y (ann.)], [Expected Monthly], Beta, [Risk of Ruin], [Expected Shortfall (cVaR)], [Kelly Criterion], [R^2], [10Y (ann.)], [5Y (ann.)], [Treynor Ratio] from [2024-01-28] where "Serenity Index" >= :p0 and "Serenity Index" <= :p1 and "Ulcer Index" <= :p2 and "calmar_ratio" <= :p3 and "first_seen" <= :p4 and "last_backtested" >= :p5 order by [Serenity Index] desc limit 501

Now, you’ll see 6 different fields below, labelled p0 through p5. These are where we’re going to paste the values we’re filtering by.

p0 = 0
p1 = 150
p2 = .1
p3 = 50
p4 = 2023-11-01
p5 = 2024-01-20

So, we only want to see strategies with the following;
A Serenity Index between 0 and 150, because any higher is kind of hard to believe is a real Composer Strategy.
An Ulcer Index of less than .1 to limit the severity and frequency of drawdowns.
A Calmar Ratio of less than 50, because any higher and it’ll almost definitely fail my “Overfit Bullshit” detector.
A “First Seen” date of roughly 3 months ago, to ensure that we’re looking at things that have had a chance to prove themselves out of sample.
A “Last Backtested” date of 1 week before the date you’re trying to run your scan.

Now, if you managed to do it correctly, you’re going to get at least 703 strategies.

The next step in the process is weeding through the strategies for logic that doesn’t look incredibly overfit, which is still a challenge, even with ¾ths of the database being filtered out! (There is a reason I say 95% of it is garbage!)

Are we doing that today? Absolutely not.

We’re already over 1k words, and it is very late. I need sleep, and to continue this tomorrow. I’ll have a creation for you next week, and maybe a log of the build process if someone picks out some interesting strategies from the filter above!

If you haven’t already, check out my community, Investors Collaborative.

We’re the community that built all the wild strategies, and the tools for analyzing them! We’ve got tons of educational material, super helpful members, and we’re on a never-ending search for Alpha!

Reply

or to participate.