17 Comments
Jul 8Liked by Quantitativo

tcost?

Expand full comment
author

In this article, I considered only slippage (1 basis point against all transactions)

On the next one, I will include a sensitivity to slippage

Expand full comment
Jul 8·edited Jul 8Liked by Quantitativo

I think this kind of high turnaround strategy is particularly sensitive to slippage, bid/ask, comiss, hence why the broader the universe and the larger the portfolio, the better it performs. The other major source of bias in long / short is universe selection, did you account for survivorship bias or not in the universe construction ? Executed on closing price or intraday price a few minutes before the close, etc ? Considering the small edge, these things will almost certainly erode it.

Expand full comment
author

Good points. Yes, I account for survivorship bias.

First, I'm using a survivorship bias free dataset (Sharadar Core US Equities Bundle https://data.nasdaq.com/databases/SFA).

Second, at every rebalance date, I get the top N (150, 500 or 1000) stocks in terms of market cap based on their market cap the day before. So, for example, the universe of top 500 stocks in Jul-1st 2003 is completely different than the universe of top 500 stocks in Oct-1st 2023

Expand full comment

Eagerly waiting for the combination of mean reversion and momentum strategies

Expand full comment
author

I will also try to improve both before combining them based on some great ideas people are sending! Thanks!!

Expand full comment
Jul 13·edited Jul 13Liked by Quantitativo

hey - fantastic article. wondering - which software library are you using for backtesting? The charts and result table looks familiar, or is the system fully home rolled?

Additionally, is the momentum metric calculated as (return t-12_1 - return t-1_0) / stdev (daily price t-12_0)?

Expand full comment
author

Hi! Thanks!! I developed the backtesting software many years ago in my master’s degree… it’s an event-driven system, much like the late Zipline.

As for the momentum factor, yes that’s it! Cheers!

Expand full comment
Jul 7Liked by Quantitativo

Similar to "Momentum Crashes"

Momentum Has Its Moments: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2041429

And another paper looking to mitigate crash risk is:

Momentum Crashes and the 52-week High: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2900073

Expand full comment
author

Thanks! I'll take a look at the papers and see how to implement them.. Cheers!

Expand full comment
Jul 7Liked by Quantitativo

Great read! Thanks for sharing this.

Would you consider adding a trailing stop to each position?

Also, curious: do you worry about over fitting when you optimize parameters on the entire data set? (As opposed to in sample optimization / out of sample validation)

Expand full comment
author

Hi! Sorry for the delay in answering, too many msgs... :)

Yes, I've tried stops, but they didn't quite work: yes, they reduced the drawdowns, but they severely reduced the returns as well...

Yes, I worry about overfitting. But in this case, not that much. I'm optimizing 2 variables: the universe (150, 500, or 1000 stocks) and the rebalancing frequency (weekly, biweekly, or monthly). As shown in the article, the worst run is 22% annual return, and the best is 26%. So, they are all pretty close. Cheers!

Expand full comment
Jul 7Liked by Quantitativo

many thanks!! are you using data which includes defunct stocks ie mitigating survival bias?

Expand full comment
author

Thanks Ben! Yes, I'm using Sharadar Core US Equities Bundle (https://data.nasdaq.com/databases/SFA), which is a great survivorship bias-free dataset!

It includes over 21K stocks (listed and delisted) since 1998

Expand full comment
Jul 7Liked by Quantitativo

I want to see if you can implement the strategy mentioned in this paper (https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2371227).

Also, combining price momentum & fundamental momentum would be another approach (https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2894068).

Thanks for great article!

Expand full comment
author

Those are great reads! Thanks for sharing, Charles!

I'll put them on my list and give them a shot soon! Cheers!

Expand full comment

edit: managed to get it working 🙏🏽

-------

Your post was so compelling & clearly articulated that I tried replicating your results! Unfortunately though, i'm not getting return results anywhere close to what you're getting.

At base, I'm attempting to replicate the first long only version of the strategy posted in the post. The steps i'm roughly following are:

0. Generate dataframe of daily returns with market cap from sharadar datasets.

1. For each day, calculate the same momentum metric detailed in the article & compute return over next 21 days.

2. For each day, select only the top 150 companies based on market cap.

3. Cross-sectional 10-quantile qcut via pandas for each day based on mom't metric.

4. Selecting mom't class 9 (highest) for long only.

5. Only including data for the first trading day of the month (to simulate monthly holding periods).

6. Generating cumulative returns - grouping by date, getting mean of returns; then generating cuml returns from that.

7. Plot.

The equity curve generated from the analysis is here -> https://imgur.com/a/EMx1Imm

As you can see, the equity curve looks very similar in shape to the one in your post, but lower in magnitude.

(For reference, i'm also using sharadar equity prices). And on the other hand, I AM seeing essentially the same mom't metric deciles vs annualized returns relationships.

My question to you: can you provide more information on any additional universe filtering or parameters in use for your analysis? If you're able to, are you open to sharing code or the notebook you used for your analysis? Finally, any other information you can provide regarding your analysis would be very useful.

I'm very happy to share my work too over DM.

- Jay

Expand full comment