Can On-Chain Data Beat Uniform Accumulation?
--
Jihye Jeong — Georgia Tech OMSA Bitcoin Analytics Practicum
Regular dollar-cost averaging — just buying the same amount every month — is a really solid strategy. You set it up, you forget about it, and you don’t stress over whether today is a good day to buy. For most traditional assets, it makes perfect sense. But when I looked at Bitcoin, I was a little skeptical. Bitcoin has a very predictable four-year rhythm, largely driven by its halving schedule. Because it goes through such obvious cycles of huge crashes and massive recoveries, treating every single day as “equally good” to buy seemed like a missed opportunity. I wondered if this uniform approach was actually optimal, or just convenient. So, for my final Georgia Tech OMSA practicum, I decided to test it with data.
I started by checking the most common story you hear in the crypto community: that the period right after a halving is the absolute best time to buy. The data actually showed something completely different. Yes, that post-halving window technically has the highest average forward return, sitting at 20.1%. But the results are all over the place because people are just guessing. The real sweet spot? The middle of the bear market, about 50% to 80% through the four-year cycle.
Prices look terrible during this phase, and trader sentiment is usually dead. But the data showed a strong right skew during this period. That basically means most of the buys you make when things look this bleak eventually recover in a really big way. It turns out the best accumulation window isn’t when everyone is excited; it is deep in the bear phase when everyone is quietly suffering. I paired this cycle data with the MVRV Z-score, a metric that checks if the average Bitcoin holder is currently sitting on a profit or a loss. The relationship was incredibly clean. When the Z-score dropped 2 deep value territory below, the future returns were consistently strong.
Using these ideas, I put together a hand-crafted Rule-Based DCA Model. I gave the biggest weights to MVRV (43%) and the halving cycle position (22%). But then I hit a wall with the 2022 data. The pure Bitcoin metrics could not see the massive interest rate hikes coming from the Fed. To fix this blind spot, I brought in some macro reality checks, like the M2 money supply, Fed policy, and a Fear & Greed index. I even applied a cubic transformation to the Fear & Greed index so the model would only react aggressively during extreme market panic.
When you are building something like this, it is very tempting to throw in every cool-sounding metric you can find. I wanted to see if I could make it even better, so I tested seven other signals — things like Google Trends, Binance funding rates, and stablecoin supply. The result of that ablation study was pretty humbling. Almost all of them actually made the model worse.
I realized that these extra metrics were basically just repeating the same market fear that MVRV already caught, just adding noise and diluting the good signals. The only new signal that actually helped was the HashRate Puell Multiple. Unlike the other metrics that track regular investors, this one tracks the miners. It spots those brutal moments when electricity costs get too high, and miners simply have to shut down and give up. That capitulation gave my model a completely different angle on market bottoms, enabling it to perfectly capture the FTX crash bottom in late 2022. In the end, this hand-crafted model worked. Over 2,557 rolling one-year tests from 2018 to 2026, it collected 5.86% more satoshis per dollar than standard DCA, winning 64.2% of the time. Compounding an extra 5.8% over a four-year cycle amounts to a very real number of Bitcoin.
But I kept thinking about whether a machine learning algorithm could do this even better. I set up a strict walk-forward pipeline to train seven different ML models. Honestly, my first attempt was a complete failure. I asked the models to predict whether the price would rise over the next 30 days. Because of that, the algorithms just learned to buy momentum — they were buying more when prices were already pumping. That is the exact opposite of what a smart DCA strategy should do.
I realized I was asking the wrong question. I changed the target from “will the price go up?” to a “contrarian cheapness” score. I wanted the model to determine whether the next 30 days would be cheaper than the past year’s average. Once I made that switch, things finally clicked.
The XGBoost model handled this beautifully. Looking at out-of-sample data from 2020 onward, the XGBoost model achieved a 100% win rate against the uniform DCA. It never lost across 1,840 different 1-year windows, finishing with a mean ratio of 1.128.
So, which model is actually better? It depends entirely on what kind of ride you want. My Rule-Based model acts pretty aggressively. It can multiply your daily buy by up to 90 times when it sees a generational bottom. That gets you a higher total return, but you have to live with a 74.2% win rate. This means that about once every four years, you might actually underperform the “do nothing” approach because of weird macro shocks or early bull runs.
The Machine Learning model is totally different. It caps its bets to stay safe, meaning it won’t buy as heavily at the absolute bottom. It trades away some of that explosive upside just to make sure you get a perfectly consistent, stress-free victory over standard DCA every single year.
Whichever way you lean, the big takeaway for me was clear. Buying Bitcoin blindly works, but buying a little more when it hurts the most works much better. The beauty of building a system like this is that it forces your hand. It makes you click buy when the news is terrible, and your emotions are telling you to stop.
If you are curious about the code, the backtest engine, or just want to poke around the data yourself, I have put everything up on GitHub.
Check out the full Project Repository here : https://github.com/jjh1773/bitcoin-analytics-capstone-spring26-team19
Check out the full report of my work here : https://github.com/jjh1773/bitcoin-analytics-capstone-spring26-team19/blob/main/reports/final/Practicum_final.pdf