I Built Eight Trading Strategies. The Dumbest One Won.

I spent several weeks building a systematic backtesting framework in Python — eight quantitative trading strategies, ranging from Richard Dennis’s 1983 Turtle Trading system to a modern Gaussian channel filter with multi-indicator signal confluence. Each strategy has its own entry logic, position-sizing model, and exit rules. Each was implemented bar-by-bar with no look-ahead bias, signals firing on close and filling at the next day’s open.

Then I ran them all on four different assets — SPY, QQQ, IBIT, and GLD — over a 2.5-year window (January 2024 to June 2026) and printed a leaderboard.

Buy and Hold won. Three times out of four.


The Contestants

Eight strategies competed head-to-head, each starting with $10,000, long-only, no leverage, no commissions:

Strategy Core Idea
BB+MACD Bollinger Band breakout confirmed by MACD momentum
Mean Reversion Buy below the lower Bollinger Band; sell at 5% profit
Adaptive Supertrend Direction flips on a volatility-adaptive trailing band
Trend Breakout ATR-sized N-day channel breakout with Supertrend regime gate and pyramid sizing
EWO+RSI Elliott Wave Oscillator + RSI + Money Flow Index momentum
Gaussian Channel Cascaded IIR low-pass filter (Gaussian poles) + Stochastic RSI confluence
Turtle Trading Richard Dennis’s 1983 55-day channel breakout with ATR-based unit sizing
Anti-Turtle Trading The same system, with buy and sell logic reversed

And a ninth “strategy” that required zero research to implement: Buy and Hold.


The Results

                           SPY       QQQ       IBIT      GLD     Wins
─────────────────────────────────────────────────────────────────────
  BB+MACD (v2)            +4.66%   +10.93%   +61.28%   +21.30%   1
  Mean Reversion         +39.95%   +45.62%    +0.20%   +45.80%
  Adaptive Supertrend     -9.17%   +21.72%   +48.95%   +35.22%
  Trend Breakout          +0.92%    +3.79%   +12.24%   +37.39%
  EWO+RSI                +14.35%   +13.19%    +4.18%    -4.59%
  Gaussian Channel       +11.37%    +7.14%   +51.90%   +63.99%
  Turtle Trading         +10.35%   +19.17%   +11.62%   +60.00%
  Anti-Turtle Trading    +25.79%   +21.82%    -8.85%   +28.35%
  Buy & Hold             +57.10%   +77.74%   +28.99%  +107.14%   3

What the Data Says

1. Buy and Hold Is Embarrassingly Good on Trending Assets

On SPY, QQQ, and GLD, no active strategy came close. Buy and Hold returned +57%, +78%, and +107% respectively — and that last number is not a typo. Gold had an extraordinary bull run driven by geopolitical tension, central bank accumulation, and de-dollarization narratives. Every active strategy that dipped in and out of GLD left gains on the table. The best active performer on gold was the Gaussian Channel at +64% — still 43 percentage points behind doing nothing.

On SPY and QQQ, the story is the same. These markets trended up strongly and relatively smoothly over the period. Any strategy that exited a position — for a trailing stop hit, a momentum reversal, a regime flip — gave up days of upside it never recovered.

The lesson is not that the strategies are bad. It’s that trend-following systems are designed to ride intermittently trending markets, not unbroken multi-year bull runs. When the market barely corrects, the exit signal never fires, and the strategy that stayed in from day one wins by default.

2. The IBIT Exception: Active Strategies Can Win on Volatile Assets

Bitcoin is a different beast. IBIT — the BlackRock spot Bitcoin ETF — returned only +29% on a buy-and-hold basis over this period, despite Bitcoin famously crossing $100,000. The reason is path dependency: if you bought in January 2024 and held, you rode both the massive rally and the subsequent drawdowns. Active strategies that sidestepped some of the volatility compounded better.

BB+MACD led with +61%. Gaussian Channel returned +52%. Adaptive Supertrend returned +49%. All three beat Buy and Hold by a wide margin.

This is the asset class where active management has a real theoretical edge: high volatility with no structural upward drift guarantee means that when you are in the market matters, not just that you are.

3. BB+MACD: Lottery Winner, Not a Strategy

The headline result — BB+MACD beating everyone on IBIT with a +61% return — deserves a footnote. This is the same strategy that produced a cumulative 125% total return on Google over 22 years. That is not a typo either; it is genuinely that bad on large-cap equities over a long horizon. It averages roughly 3.6% per year on a company that 10x’d in that time.

BB+MACD won on IBIT in this specific 2.5-year window. But a strategy that fails on GOOG over two decades and succeeds on a volatile crypto ETF in a narrow window is not demonstrating edge — it is demonstrating noise. A single lottery ticket wins sometimes too.

4. Turtle Trading: The Most Honest Active Strategy

The most interesting active result is Turtle Trading. It did not win on any symbol, but it produced double-digit returns on every single asset: +10% on SPY, +19% on QQQ, +12% on IBIT, +60% on GLD.

No other strategy managed that. BB+MACD was in single digits on SPY. Mean Reversion collapsed to +0.2% on IBIT. EWO+RSI lost money on GLD. Turtle Trading, a system designed in 1983 with three inputs and no data fitting, just quietly showed up in every market and did something.

The reason is structural: ATR-based position sizing and channel breakout entry are asset-agnostic. The system does not know whether it is trading soybeans or Bitcoin. That generality, which looks like simplicity, is actually the mechanism of robustness.

It still trailed Buy and Hold on every conventional asset. But if you ran Turtle Trading across a diversified portfolio and added systematic rebalancing, you would have the skeleton of something real.

5. Trend Breakout: The One That Got Away

My personal favorite among the strategies I built was Trend Breakout: a regime-filtered N-day channel breakout with ATR-normalized unit sizing and a pyramiding mechanic borrowed from the original Turtle rules. Theoretically, every component is principled — the Adaptive Supertrend gate, the position sizing formula, the trailing stop. It is a coherent, internally consistent system.

On SPY it returned +0.92% over 2.5 years. That is not a typo.

The failure mode is a mismatch between timeframe and regime. Trend Breakout is designed to find breakouts — moments when price escapes its recent range and continues. SPY in 2024–2026 did not break out; it just steadily rose. New 20-day highs were constant, the regime stayed bullish, and every pyramided entry was interrupted before it could compound because the trailing stop was too tight relative to the slow, grinding uptrend.

The strategy works. The market just did not cooperate with the conditions it was designed for.


Why Beating Buy and Hold Is So Hard

The deeper lesson here is not about any individual strategy. It is about the structural handicap that any active strategy faces.

Buy and Hold has three properties that are almost impossible to replicate simultaneously:

  1. Zero friction — no slippage, no opportunity cost from being out of the market
  2. Perfect holding — it never exits during recoveries from drawdowns
  3. Full capture of compounding — every day of appreciation compounds on every prior day

An active strategy must have a very large edge in timing just to compensate for the times it is out of the market earning zero while prices recover. In a sustained bull market, being out even 20% of the time at the wrong moments costs more than most alpha can recover.

This does not mean active strategies are useless. In sideways or volatile markets, they shine. The Turtle system’s GLD result (+60%) on what turned out to be a runaway trend is impressive even if it was 47 points behind the index. In a flat or mean-reverting market, even a mediocre strategy would dominate Buy and Hold simply by avoiding capital sitting idle.


Conclusion

Four months of evenings, eight strategies, thousands of lines of Python, and the clearest conclusion in quantitative finance: for conventional assets in a sustained bull market, it is very hard to beat doing nothing.

Buy and Hold won on SPY (+57%), QQQ (+78%), and GLD (+107%), and it was not close in any case. The one exception — IBIT — is an asset class where volatility is so extreme that timing genuinely matters, and even there the winning strategy (BB+MACD, +61%) is one with a poor long-term track record that may simply have gotten lucky in a 30-month window.

None of these results mean the strategies are bad or that building them was pointless. Turtle Trading’s consistency across all four assets shows that principle-based, volatility-aware systems generalize better than parameter-tuned momentum signals. Trend Breakout’s theoretical elegance is real — it is just waiting for a market environment that matches its assumptions.

But if someone asks whether they should run an active strategy on their S&P 500 allocation, the honest answer, backed by this data, is no. Buy the index. Reinvest the dividends. Go outside.


All backtests are daily bar simulations on raw (unadjusted) OHLCV data. Initial capital: $10,000. No commissions, no slippage, no look-ahead bias. Signals fire on bar close; fills at next open. Past performance does not predict future results.

Posted in Computers, Money, programming | Leave a comment

Quant Leaderboard v4

Posted in Money | Leave a comment

Quant Leaderboard v3

commit 63b22e5a04d77ed2285155f8ca46a952e0d42008

Posted in Computers, Money | Leave a comment

Quant Leaderboard v2

commit 24e830c1c2939380449257e1d0794bf8195bb51d

Posted in Computers, Money, programming, Software | Leave a comment

Quant Strategies Leaderboard

Posted in Computers, Money, programming, Software | Leave a comment

What I’m Investing In Now

Posted in Money | Leave a comment

Setting up Google ads for Atlassian Marketplace App

Recently I published an app on Atlassian Marketplace. Making some notes here on how to setup Google Ads and optimize for conversions instead of clicks or impressions. The notes might be buggy and will keep refining them as I learn more. Overall I found Google ads setup to be extremely hard and kept running into many issues – too many to document. So just making note of the final steps.

Step 1: Create custom event in GA4 dashboard (goto Admin -> Data Display -> Events or something like that) w/ event_name equals click and event_label equals Cloud Install button click and mark it as a Key event. I got this event name by poking around with https://tagassistant.google.com/ and stumbling on this:

{
  event: "click",
  gtm: {
    uniqueEventId: 70,
    start: 1780685173616,
    ...
  },
  dimension1: "compliance-bot",
  dimension2: "2001000",
  content_group2: "Cloud",
  content_group4: "Paid via Atlassian",
  content_group3: "Jira",
  referrer: "https://marketplace.atlassian.com/apps/1646512322?gtm_de" +
            "bug=1780685171232",
  category: "appListing",
  poweredBy: "AMKT_FRONTEND",
  page_title: "MedTech Compliance Tracker | Atlassian Marketplace",
  hostingType: "CLOUD",
  partnerId: "566877100",
  appKey: "compliance-bot",
  appId: "1646512322",
  pricingModel: "PAID_VIA_ATLASSIAN",
  pageViewId: "55f489e0-e5ee-4613-8fd1-66fa3e8fce01",
  atlEventId: "3610fcee-c38e-4af5-be44-25501304249f",
...
  eventModel: {
    event_category: "Convert",
    event_label: "Cloud Install button click",
    send_to: "G-850EDEE3WX"
  }
}

Step 2: Now you go to Google Ads dashboard and create a conversion action that tracks this event (and delete the default event pre-populated by Google ads otherwise it interferes with this one):


Posted in Computers, programming, Software | Leave a comment

Options Wheel Trading Bot

The wheel strategy is a technique to buy a stock low, sell it high and keep repeating ad infinitum (hence the term wheel). Read more about it here. Interested in a bot that can run this strategy for you on auto-pilot? You pick a stock. The bot handles the rest.

Pricing

$2,500 — one-time fee or $49/mo recurring subscription

Contact

Contact if interested.


Options trading involves substantial risk of loss and is not suitable for all investors. This software automates a defined trading strategy but does not guarantee profits. Past performance is not indicative of future results.

Also checkout my free stock indicator

Posted in Money | Leave a comment

Windows and WSL2 Cleanup

Windows Cleanup

Identify large files and folders

use WinDirStat

du -sh C:\Users\siddj\AppData\Local\Microsoft\vscode-cpptools\ipch

Cleanup

powercfg /h off
  • powercfg /h off turns of Hibernate mode and removes c:\hiberfil.sys
  • delete unused .mp4 and other video files in Screen Recordings folder
  • uninstall unused programs

reduce System Restore / Shadow Copies

Windows stores restore snapshots here.

You can’t see it directly, but it may consume lots of space.

Check usage:

Open Admin PowerShell:

vssadmin list shadowstorage

Example output:

Used Shadow Copy Storage space: 18 GB
Allocated Shadow Copy Storage space: 20 GB

Reduce it

Open System Protection:

System Properties
 → System Protection
 → Configure

Set disk usage to something like:

3–5 GB

Or delete restore points.

delete Windows Component Store (WinSxS). This contains old Windows update files. Location: C:\Windows\WinSxS:

check size:

dism /online /cleanup-image /analyzecomponentstore

cleanup:

dism /online /cleanup-image /startcomponentcleanup

delete Windows Update Cache. Location: C:\Windows\SoftwareDistribution\Download

net stop wuauserv
del /s /q C:\Windows\SoftwareDistribution\Download\*
net start wuauserv

Other directories to clean:

rm -rf ~/.cursor

WSL2 Cleanup

Identify large files and folders

sudo du -xhd1 / 2>/dev/null | sort -h
du -hd1 ~ | sort -h
du -h ~/.cache/pypoetry/virtualenvs -d 1 | sort -hr | head -n 30

Common culprits: ~/.cache, ~/.vsode-server, ~/.npm, ~/.local, ~/.gradle

Cleanup

rm -rf ~/.vscode-server/data/CachedExtensionVSIXs
rm -rf ~/.vscode-server/data/User/workspaceStorage
rm -rf ~/.cache/vscode-cpptools/ipch
npm cache verify
pip cache purge

also remove unused poetry virtual environments

Compact WSL2

Powershell:

wsl --shutdown
Optimize-VHD -Path "C:\Users\siddj\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" -Mode Full

Set maximum size of WSL2

edit ~/.wslconfig under Windows and set:

defaultVhdSize=230GB

References

Posted in Computers, programming, Software | Tagged , | Leave a comment

How to spell check PDF file?

Online: https://t.co/8STYFz9f6i

I would recommend using the command-line for this. Here are the steps courtesy of ChatGPT. These steps are for Windows:

Step 1: Install Poppler for Windows

In Powershell, run:

 winget install --id oschwartz10612.Poppler -e

Log. This will give pdftotext program. Verify the version:

PS C:\Users\siddj> pdftotext -v
pdftotext version 4.00
Copyright 1996-2017 Glyph & Cog, LLC

Step 2: Install codespell – the spell checker

Again in Powershell:

py -m pip install codespell

Log. This installs codespell spell checker but if you try to run it you will get error as its not added to the PATH by default.

 WARNING: The script codespell.exe is installed in 'C:\Users\siddj\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

So do that. Instructions for how to do this can be found elsewhere.

Step 3: Run it!

pdftotext -layout resume2.pdf - | codespell -
41: · Developed a content management sysem for hosting an annual Data Science Showcase at J&J.
        sysem ==> system

Well worth it!

Posted in Computers, programming, Software | Tagged , | Leave a comment