Paper: A Profitable Day Trading Strategy For the U.S. Equity Market
In a previous post, I looked at the paper Can Day Trading Really Be Profitable?, a paper claiming that a 5-minute Opening Range Breakout (ORB) on QQQ and TQQQ dramatically outperformed buying and holding the index. One of my criticisms was that this was a single symbol strategy. Everyone already knows QQQ had a great decade, so it's not hard to show a great backtest that uses this symbol. Back then, I mentioned that the authors also released a follow-up paper that dynamically selects "Stocks in Play" every day, and the top voted comment was that I should talk about it. I finally got around to looking at this and ended up writing my own backtest using a library called PyBroker. I also ran the strategy in a live environment for an extended period of time. And in the coming series, I'll be walking through how you can do all of this yourself end-to-end.
The paper is titled A Profitable Day Trading Strategy For The U.S. Equity Market and it was published in February of 2024. The claim is that a 5-minute ORB applied to the top 20 "Stocks in Play" each day returned over 1,600% from 2016 to 2023, net of commissions, with a Sharpe ratio of 2.81. For reference, the S&P 500 returned 198% over the same period.
If you're like me, these numbers sound exciting, but also make you a bit skeptical since the strategy itself is fairly simple. What got my attention is that QuantConnect published an independent backtest of it, and it seemed to hold up. So I decided to investigate this further and see if there were any potential problems.
In this series, I'll first discuss the rules of the strategy. Then in a follow up, I'll write a backtest of the strategy using PyBroker, an open source backtesting library that I haven't yet discussed on my channel. This strategy will showcase some of the new features of PyBroker version 2, that was just released last week.
Then, I'll go over how to code the strategy for live trading and deploy it to a real server so you can run it yourself if you want to. Or alternatively, you'll be able to use my code as a template for running your own strategies.
Now why am I going to code a live version of this strategy? Why not just believe the backtest? The problem with most backtests is that they run under perfect, historical conditions inside of a notebook. My belief is the only way to see the reality of such a strategy is in a live market, where you will need to deal with real connectivity issues, monitoring, logging, slippage, and other issues you will only see in a live trading environement.