18 Comments
User's avatar
Marcel Aranha's avatar

Hi Carlos,

Great post! I noticed you only showed results for the combined Calendar + Threshold strategy (Sharpe 0.94), but I'm curious about the individual performance breakdown. Could you share the standalone results for:

- Calendar signal strategy alone (month-end rebalancing)

- Threshold signal strategy alone (weight deviation triggers)

I recall the original paper suggested the calendar effect might be the stronger contributor to overall returns, but it would be valuable to see the individual Sharpe ratios and performance metrics across the full sample period. This would help understand which component drives most of the alpha and whether the combination truly adds diversification value.

Thanks for the excellent analysis!

Expand full comment
Quantitativo's avatar

Thanks for the thoughtful question! You’re spot on... most of the performance is driven by the calendar signal. When you plot the standalone equity curves, the calendar-based strategy shows a smooth, consistent upward trend, while the threshold signal is much flatter, with occasional positive jumps during market stress periods (e.g., 2008, 2020). This pattern aligns with the original paper’s findings and suggests the threshold component mainly acts as a tail-risk diversifier rather than a primary return driver.

In terms of Sharpe:

- Calendar signal: 0.79 (or 1.47 if you only consider the days when we had a position)

- Threshold signal: 0.56 (always on)

Cheers!

Expand full comment
financnik's avatar

Hello,

Great post as always! You mentioned an overlay with a mean reversion strategy—is that the “first principle” one using the QPI indicator? I’m curious about your experience with it after a year.

I was able to reproduce the long side fairly well, but are you also trading the short side? And if so, does it perform similarly to your backtest? I haven’t been able to replicate the short side at all, which I find quite puzzling.

Expand full comment
Quantitativo's avatar

Hi! Thanks! The portfolio here has 3 MR strategies. Two of them are based on the QPI idea I shared. One is exactly the long-only. Another one is the long-short correct version. In the article, that version of the long-short had a bug. I never updated the article (no time). What I can say is that, yes, a long-short version of that strategy works pretty well, but not with those exact rules. Just play a bit and you will find what works :) if you were able to replicate the long-only and verify that the long-short results were different, I'm 100% sure you can get to the long-short set of rules that improve the strat :)

(I think I mentioned that many months ago in Marsten Parker's private community... just now I realized it is private, not everyone is in there :))

Expand full comment
claudio's avatar

hello, do you have a python code which can be used to replicate this strategy?

Expand full comment
Quantitativo's avatar

Yes. Shared within our community. To access it, just join the next cohort. I will open it in the next few days. The details:

https://quantitativo.carrd.co/

Expand full comment
Jatin Bhatia's avatar

Hi Carlos,

Great article, once again. Thanks so much for that. I went through the paper. One thing that is not clear is why the scaling of (threshold signal)_t is done by dividing by 1.5%. The other question is in the formula for threshold signal, what is the frequency of 't'. Is it daily? Monthly? Basically, weight changes as SP500 and 10Y treasury futures produce return everyday. Weight on day zero is 60 and 40. When we compute the new weight daily, we need to know what day is zero so we can compute the new weight on any given day (wrt to that day zero). But this day zero will keep rolling. Do we mark day zero as the beginning of every month for a weight computation during that month?

Expand full comment
Quantitativo's avatar

Thanks, Jatin! Yeah, the 1.5% is an arbitrary hyperparameter chosen to blend the 2 signals. When you play with it, you see how that shifts the weights between the Calendar and the Threshold signals, yielding different equity curves/risk profiles.

The frequency of t is daily. On day zero, w is 60%. From day 1 onwards, use the formula to compute the new w

Expand full comment
Jatin Bhatia's avatar

Thanks. And I assume this day zero resets automatically to a new date whenever the threshold exceeds delta and we rebalance and reset the weights back to 60/40 again, right? We then start re-computing the subsequent weights from that new day zero?

Expand full comment
Quantitativo's avatar

Yeah… it’s in the formula. For Threshold signal, whenever w drifts over a delta, w is reset to 60%. For Calendar signal, reset is only done on the last day of the month

Expand full comment
Jatin Bhatia's avatar

Thanks a lot. I’ll try to model it the way you described. Will let you know if I run into a wall and need to clarify. Hope it’s okay to reach out to you again. Would really appreciate that.

Expand full comment
Quantitativo's avatar

Sure, glad to help :)

Expand full comment
Jatin Bhatia's avatar

Another way to ask the same question is: In section 5 of the paper, the author says "On average, this investor buys equities and sells bonds after bonds have relatively outperformed and buys bonds while selling equities after equities have outperformed.".

What I am asking is what the lookback period of this outperformance is?

Expand full comment
Ram Goli's avatar

As someone who formerly got ideas from WSB, the "improved" strategy is giving up $2 million over just mean reversion! * insert diamond hands emoji *

Expand full comment
nitebright's avatar

Hi Carlos,

Thanks for the great research, really appreciate it.

Two quick questions:

1. What data did you use to generate the signals? Did you use futures data for that as well - or index data? The paper is not quite clear in that regard for my taste.

2. When using Futures data, I'd assume you still rebalance once a day, at which time?

Thanks and please keep up the good work!

Expand full comment
dudi's avatar

Great review, Thanks

From the backtesting, it looks like the position is held continuously, but that doesn't make sense to me or maybe I'm missing something. For simplicity, let's ignore w_c for now.

In case w_t < |threshold| what is the positions ?

Once w_t crosses the threshold, the position is clear, what is the holding period ?

Expand full comment
Quantitativo's avatar

Thanks! Trading futures works differently from trading stocks. There are no discrete entries, exits, or holding periods—you’re always positioned. What changes is your exposure, meaning the number of contracts you hold each day. Once the signal moves, you adjust exposure accordingly. Check Robert Carver’s books… the Advanced Futures book explains it well :) cheers!

Expand full comment
RandomTrader's avatar

Great backtest — thank you very much for sharing.

One question: I couldn’t find any details regarding the timestamps of the daily data used in the backtest. This is important because ES futures settle at 4 PM ET, while TY futures settle at 3 PM ET, which could introduce a lookahead bias if not properly accounted for.

Has this been considered in the backtest?

Thanks!

Expand full comment