
u/printoninja

New /learn article: why your synthetic LETF backtest probably overstates returns by ~60%
Just published https://sma200.trade/learn/leveraged-etf-borrow-cost
Background: I posted backtest numbers in r/LETFs last week with synthetic TQQQ going back to 1999. A commenter asked how my numbers compared to Testfolio. They didn't, by a lot. Turns out I had been using the simplified L × daily − ER/252 formula that almost every Reddit/forum synthetic LETF backtest uses, and it omits the daily borrow cost real leveraged ETFs pay on the swap-financing of their leveraged exposure.
Calibration vs real TQQQ over 2015-2024:
- Real TQQQ (ProShares fund): 20.4× wealth multiple
- Simple-formula synthetic: 33.0× (+62% overshoot)
- Borrow-modeled synthetic (^(IRX) + 40bps spread): 21.5× (within 5% of real)
The article walks through:
- The exact missing formula term and why every retail synthetic LETF backtest ignores it
- The calibration proof against real TQQQ
- Corrected 27-year synthetic TQQQ: B&H CAGR drops from 8.46% to 3.52%, SMA200 filter Sharpe edge drops from +0.141 to +0.019
- The refined framing: SMA200 filter's value scales with how much equity-vol-decay is in your portfolio. +0.238 Sharpe lift on a 75/25 UPRO/UGL portfolio, +0.019 on a 25/75. The filter is a portfolio construction tool, not a single-asset rescue.
Also open-sourced the harness as a standalone Python package: https://github.com/prismlfx/sma200-bt
MIT licensed, pip-installable, calibrated against real TQQQ, six pytest cases pinning the formula. Anyone can verify the article's numbers in about 10 lines of code (README walks through it).
This is also the public correction to the Reddit numbers I posted last week. Better to be wrong loudly and corrected publicly than confidently wrong forever.
I backtested the 200-day SMA on SOXL, TQQQ, and UPRO from inception. The Sharpe result wasn't what I expected.
A few days ago I posted a primer on the 200-day SMA strategy for LETFs (link below). In that post I said filtered strategies "typically run 0.3 to 0.7 higher in Sharpe than buy-and-hold." That was the general community claim. I went back and re-ran the numbers on my own backtest harness to check, and the data doesn't support it.. at least not on this window. This is the correction post.
It turned out to be more interesting than the original framing.
The setup
Pure mechanical SMA200 strategy:
- Long the LETF when daily close > 200-day SMA
- 100% cash when below
- Signal computed at close, position taken at next bar's close (no lookahead)
- No confluence indicators (no MACD, RSI, buffer band, anti-whipsaw block)
- 1 basis point per side transaction costs
- Total-return data (yfinance auto_adjust, dividends reinvested)
- From inception of each LETF through 2026-05-15
Comparison: buy-and-hold the same LETF over the same window. Same data, same costs.
The numbers
SOXL (since 2010-03-11, ~16.2 years)
| Metric | Buy-and-hold | SMA200 filter |
|---|---|---|
| CAGR | 41.5% | 28.5% |
| Max drawdown | -90.5% | -69.7% |
| Volatility (ann.) | 89.3% | 59.5% |
| Sharpe (rf=0) | 0.839 | 0.723 |
| Sortino | 1.182 | 0.794 |
| Trades per year | — | 3.3 |
| Time in market | 100% | 63.2% |
TQQQ (since 2010-02-11, ~16.2 years)
| Metric | Buy-and-hold | SMA200 filter |
|---|---|---|
| CAGR | 43.8% | 30.3% |
| Max drawdown | -81.7% | -50.0% |
| Volatility (ann.) | 61.0% | 42.1% |
| Sharpe (rf=0) | 0.905 | 0.842 |
| Sortino | 1.165 | 0.923 |
| Trades per year | — | 2.7 |
| Time in market | 100% | 74.3% |
UPRO (since 2009-06-25, ~16.9 years)
| Metric | Buy-and-hold | SMA200 filter |
|---|---|---|
| CAGR | 33.1% | 16.8% |
| Max drawdown | -76.8% | -56.7% |
| Volatility (ann.) | 51.3% | 31.7% |
| Sharpe (rf=0) | 0.817 | 0.651 |
| Sortino | 1.009 | 0.706 |
| Trades per year | — | 2.9 |
| Time in market | 100% | 73.3% |
What the data actually says
Three things stand out:
1. Pure SMA200 filtering underperforms buy-and-hold on Sharpe across all three LETFs.
Sharpe differences (filter minus B&H):
- SOXL: -0.116
- TQQQ: -0.063
- UPRO: -0.166
Small but consistent in the same direction. The conventional "filter improves Sharpe" claim doesn't hold across these tickers over this window. This is the part I had wrong in Post 1.
2. The filter consistently slashes max drawdown.
- SOXL: -90% → -70% (20 pp better)
- TQQQ: -82% → -50% (32 pp better)
- UPRO: -77% → -57% (20 pp better)
A 90% drawdown on SOXL is the textbook "wiped out" outcome. Going from -90% to -70% is the difference between destroyed and badly bruised. On TQQQ the filter's -50% is rough but recoverable - most retail holders would survive it psychologically. -82% buy-and-hold, much less clear.
3. The CAGR cost is real and large.
Buy-and-hold absolutely crushes the filter on raw return:
- SOXL: 41.5% vs 28.5% (-13 pp)
- TQQQ: 43.8% vs 30.3% (-13.5 pp)
- UPRO: 33.1% vs 16.8% (-16.2 pp)
The filter strategy still turned $10k into $577k on SOXL, $735k on TQQQ, $138k on UPRO over the windows. Just nowhere near what B&H did, and B&H benefited from the entire 17-year run being one of the strongest bull markets in equity history.
Why the filter case is actually behavioral, not mathematical
Here's what the Sharpe number doesn't capture: backtests assume you would hold through a 90% drawdown. In practice, people don't. They sell at the bottom, re-enter after recovery is confirmed, and capture a much worse return than the backtest implies.
The 200-day SMA filter is risk management, not return optimization. Its real value is that you can actually execute it without ego-collapsing during a bear. You exit at -10 to -20% from the top, not at -90%. That's psychologically holdable. Buy-and-hold of a 3x LETF, for most people, is not.
So when someone asks "does the SMA200 filter work on LETFs?" the honest answer is:
- If you're a backtest robot with infinite holding capacity: it underperforms B&H on Sharpe over this specific window.
- If you're a human with money you'd panic-sell at -70%: it probably saves you from yourself, which is the whole point.
Caveats worth naming
Don't over-cite these numbers without flagging:
Sample bias. 2009-2026 contains one of the strongest equity bull runs in modern history, plus two unusually V-shaped drawdowns (2020, 2022). A different sample: e.g. weighted toward the 2000-2012 NDX lost decade - would tilt this comparison meaningfully toward the filter. Bear-heavy regimes are where the filter would dominate.
The 10-month SMA warmup. The filter is forced into cash during the first 200 days of each LETF's data (no SMA exists yet). Skipping this handicap lifts filter CAGR by 1-3 pp across these names without materially changing the Sharpe story.
Pre-tax. Filter generates ~3 short-term capital gains events per year. B&H generates zero until exit. After-tax results widen further in favor of B&H for taxable accounts.
No regime decomposition. A bull-vs-bear breakdown would show the filter winning hands-down in 2022 and underperforming materially in 2017/2019/2023. Inception-to-now totals smear that out.
One bonus finding worth flagging
For UPRO specifically, computing the SMA200 on SPY (the underlying) and applying it to UPRO position works meaningfully better than computing the SMA200 directly on UPRO:
| Direct SMA on UPRO | SPY SMA → UPRO |
|---|---|
| CAGR | 16.8% |
| Max drawdown | -56.7% |
| Sharpe | 0.651 |
That's 8 percentage points of CAGR for free, plus a slightly better drawdown. Sharpe on the underlying-signal version basically matches buy-and-hold (-0.016 difference), but with the same drawdown protection.
For TQQQ, the QQQ-based signal is only marginally better than direct SMA on TQQQ (+0.007 Sharpe).
For SOXL, the SOXX-based signal is actually slightly worse (-0.049 Sharpe vs direct SMA on SOXL).
So the "track the underlying" claim that gets repeated in LETF communities has real evidence for UPRO/SPY, weak evidence for TQQQ/QQQ, and basically no evidence for SOXL/SOXX over this window. Worth its own post.. I'll get to it next week.
The honest takeaway
The 200-day SMA on LETFs is not a Sharpe-improver over very long bull-heavy windows. It's a drawdown manager that costs real CAGR. The pitch is "you can sleep at night and you won't panic-sell at the bottom," not "you'll outperform B&H."
Whether that's worth it depends on whether you'd actually hold a 3x LETF through -82%. If you would: you don't need this. If you wouldn't: this is the move.
I'm working on a Python notebook version of this backtest harness for GitHub so anyone can verify or critique the methodology directly. Will link when it's up.
Has this changed how you think about it? Or were you already running it as a drawdown filter rather than a return enhancer? Curious where the community shakes out.
What is the 200-day SMA strategy, and why does it work for LETFs?
If you've spent time in LETF trading communities, you've heard people talk about the 200-day SMA. Some treat it like gospel. Some dismiss it as too simple. Both sides usually skip the actual data.
Short version: it's not magic, and it's not what most posts about it claim. It's a trend filter that does one thing exceptionally well: it cuts max drawdown.. at a real cost in raw return. For leveraged ETFs specifically, that tradeoff often matters more than for regular index funds. This post is what it is and what it actually does.
What it actually is
The 200-day simple moving average is the closing price of an asset, averaged over the last 200 trading days. It's a lagging line that smooths short-term noise and tells you what the trend has been over roughly the last 10 months. Below the 200-day means the trend is down. Above means the trend is up. That's the entire mechanic.
The strategy in its simplest form: hold the LETF when price closes above the 200-day SMA. Move to cash (or the underlying ETF) when price closes below. Re-enter when price closes back above. One rule, applied at the close.
That's it. No options overlays. No fundamental analysis. No Pelosi tracking.
Why LETFs care about this more than QQQ does
If you hold QQQ through a 30% drawdown, you have to be down a comparable amount before you recover. Painful but recoverable. If you hold TQQQ through the same period, you're looking at something closer to a 60-80% drawdown.
And here's the part nobody warns new LETF holders about: even when the underlying fully recovers, the LETF often doesn't, because daily rebalancing in choppy markets eats value. That's volatility decay, and it's the actual reason buy-and-hold LETFs underperform expectations versus naive 3x math.
The 200-day SMA filter is one of the simplest mechanical ways to avoid the worst of this. You're not trying to time the bottom. You're trying to not be holding 3x exposure when the 200-day trend rolls over.
What it actually does to your numbers
I ran this strategy through my own backtest harness across SOXL, TQQQ, and UPRO from inception of each (2009-2010 through 2026-05-15). The honest finding, which surprised me a little:
On max drawdown — the filter wins decisively:
- SOXL: -90% (B&H) → -70% (filter), 20 pp improvement
- TQQQ: -82% → -50%, 32 pp improvement
- UPRO: -77% → -57%, 20 pp improvement
On Sharpe ratio — the pure filter actually underperforms over this window:
- SOXL: 0.84 (B&H) → 0.72 (filter)
- TQQQ: 0.90 → 0.84
- UPRO: 0.82 → 0.65
On raw CAGR — buy-and-hold dominates:
- SOXL: 41.5% → 28.5%
- TQQQ: 43.8% → 30.3%
- UPRO: 33.1% → 16.8%
If you've been reading conventional SMA200 content, the Sharpe direction is a surprise - most public posts on this claim the opposite. Over this specific 17-year window, which contains one of the strongest equity bull runs in modern history and two unusually V-shaped drawdowns, the math doesn't work in favor of the pure SMA filter on risk-adjusted returns. A regime with more time spent in extended bears would tilt that comparison meaningfully toward the filter.
A backtest deep-dive with full tables, methodology, and caveats is coming Monday.
Why the filter is a behavioral tool, not a return-optimization one
Here's what the Sharpe number doesn't capture: backtests assume you'd grit your teeth through a 90% drawdown on SOXL. In practice, most people don't. They sell at the bottom, re-enter near the top after recovery is confirmed, and capture a much worse return than the backtest implies.
The 200-day SMA filter changes the worst-case experience. You exit at -10 to -20% from the top, not at -70-90%. That's psychologically holdable. A 3x leveraged buy-and-hold position, for most retail traders, isn't.
So when someone asks "does the SMA200 filter work on LETFs?" the honest answer is:
- If you're a backtest robot with infinite holding capacity: B&H wins on Sharpe over this window.
- If you're a human who would panic-sell at -70%: the filter probably saves you from yourself.
What it would have done in the real bad years
The drawdown reduction shows up in specific historical episodes:
- 2008. A 200-day SMA filter on the S&P 500 gave a sell signal in early January 2008. If you'd held UPRO-equivalent leveraged exposure, you'd have exited near the top and missed most of the 80%+ drawdown that followed. (UPRO didn't launch until 2009 — this is the same signal applied to equivalent 3x S&P exposure for the prior period.) The reentry came in June 2009.
- 2020 COVID crash. Signal flipped in late February / early March depending on underlying. You'd have exited before the worst of March. Reentry came in May/June — late enough that you missed the literal bottom, early enough to catch the bulk of the V-shape.
- 2022 bear market. TQQQ peaked around $90 in November 2021. Buy-and-holders rode it to roughly $16 by October 2022 — an 82% drawdown. A 200-day SMA filter on QQQ gave a clean exit signal in January 2022 around the $65 level. You gave up about $5 of the top to the lag. You avoided the entire remaining ride down.
The pattern: small lag at the top, massive savings on the way down. That's where the strategy delivers — not in the Sharpe column.
Where it breaks
This isn't a free lunch. The honest problems:
Whipsaws. In sideways markets, price crosses back and forth across the 200-day repeatedly. 2015 was textbook.. multiple small losses while a buy-and-holder broke even. Common fixes include adding a 1-2% buffer above and below the line, waiting for the SMA itself to be sloping in the signal direction, or adding a second indicator like MACD or RSI for confluence. Each fix reduces whipsaws but lags signals, which means missed reentries on V-shaped recoveries.
Gap risk. Signals fire at the close. If you wake up to a 5% overnight gap below the 200-day, you're selling at the gap-down open, not at the prior close.
Tax drag. If you're not in a tax-advantaged account, every exit is a taxable event. The strategy fires roughly 2-3 times per year on a stable underlying, more in choppy years. Short-term capital gains can eat 20-40% of your PnL depending on bracket.
LETF vs underlying. Some traders compute the 200-day SMA on the underlying (QQQ for TQQQ, SMH for SOXL) rather than on the LETF itself. There's a strong case for it in some cases — for UPRO specifically, using SPY's SMA signal materially outperforms the direct SMA on UPRO over this window. For TQQQ the improvement is marginal. For SOXL it actually hurts. Dedicated post on that trade-off coming.
The honest bottom line
The 200-day SMA isn't a holy grail and it isn't a Sharpe-improver over very long bull-heavy windows. It's a 10-month trend filter applied at the close, and what it consistently does is cut max drawdown by 20-30 percentage points on 3x LETFs at the cost of meaningful CAGR.
Whether that tradeoff is worth it depends on whether you'd actually hold a 3x LETF through -82%. If you would, you don't need this. If you wouldn't, this is the move.
If you want to check the current signal on any ticker, I built a free tool for this at sma200.trade. The math is straightforward enough that I'll be putting it on GitHub too so people can verify or critique the methodology directly.
What's your experience using the 200-day SMA as a risk filter on LETFs? Pure mechanical, or part of a broader confluence stack? Curious where this community shakes out.
Welcome! A framework for deciding what to automate, delegate, or hand to an AI agent
Hey all. Starting this place because the helpdesk automation conversation is currently spread across r/sysadmin, r/msp, r/ITManagers, r/AI_Customer_Support, vendor blogs, LinkedIn echo chambers, and nowhere in particular. Wanted a focused space for IT and support practitioners actually building, scripting, and deploying this stuff to compare notes without the marketing noise.
To seed the discussion, here's a frame I've found useful for triaging repetitive helpdesk work. Three buckets, and most teams get them confused:
1. Automate it (write the script). Best for deterministic tasks with clear inputs and outputs: password resets when the user is verified, license assignments based on group membership, mailbox creation from HRIS events, offboarding sequences. PowerShell, Logic Apps, Make, n8n, whatever fits. Failure mode: trying to script things with too many edge cases. You spend 40 hours building something that breaks the first time HR sends a malformed input.
2. Delegate it (give the right human safe access). Best for low-skill but judgment-required tasks like resetting a password after verifying the user really is who they say they are, creating a guest account for a contractor, restoring a deleted file. These don't need IT involvement, but giving HR or a manager global admin to do them is malpractice. The right answer is scoped, delegated access.. JIT permissions, custom admin roles, or a purpose-built delegation tool. Failure mode: over-delegating (too much access for convenience) or under-delegating (everything still funnels through IT because "we don't trust the controls").
3. Hand it to an AI agent. Best for tasks that need natural-language understanding or judgment that's hard to express in code. Things like routing tickets to the right team, drafting first-response replies, summarizing long ticket threads for handoff, answering "how do I…" questions against your KB. Failure mode: treating the agent as a deterministic system. When it's wrong, it's confidently wrong, and without a human review loop on the high-impact actions, you'll be writing a postmortem within 90 days.
Most failed helpdesk automation projects I've seen pick the wrong bucket - usually using AI for something that should've been a script, or scripting something that should've been delegated.
What's the worst bucket-mismatch you've cleaned up?
Why your healthcare AI automation won't sell (and what clinics actually buy)
Worked IT at a mental health facility for a few years before going independent. The LinkedIn poll vs. what actually ships in healthcare AI is a massive gap.
Patient data analysis polls well because it sounds visionary.. "AI helps doctors make better decisions." But it almost never ships in real clinical environments at smaller orgs because of three problems nobody talks about:
- Liability assignment. The minute AI "influences" a diagnosis, the legal/insurance/credentialing chain has to figure out whose license is on the line when it's wrong. Most clinics aren't ready to answer that and won't pay for something that creates the question.
- EMR integration. The patient data lives inside Epic, Cerner, Athenahealth, Practice Fusion.. each with its own API, each with its own HIPAA business associate agreement to negotiate. The integration work is 80% of the project, the AI is 20%.
- Clinician trust. Takes years, not months. Even when the model is right, getting a doctor to defer to it requires building trust through low-stakes wins first.
Which is exactly why scheduling, intake, documentation, prior auths, and reminders ARE where adoption is actually happening. Low liability, lower integration friction, immediate time-back, no credentialing question. The "boring" wins fund the trust needed for the diagnostic stuff later.
The clinics I worked with would have happily paid for AI that chopped 30% off documentation time if it could actually provide results. Sell the boring stuff first.
(P.S. I'm currently validating an operating system for AAA operators to help structure discovery and onboarding for clients like this. If you run an agency and hate the admin work, check it out at aaaos.app)
The 18-hour onboarding problem nobody warns AAA operators about
Hey all.. I spent the last year and a half watching AI automation agency operators (myself included) hit the same wall: the work that pays you is buried under the work that doesn't.
Here's the math that destroys most new AAA operators:
Client 1: 18-20 hours to onboard. You don't have SOPs yet so you're building them in real time while trying to deliver. Discovery takes 6 hours because you don't know what to ask yet. The proposal takes 4 hours because you're inventing the format. Kickoff takes 3 hours because you don't have a script.
Client 2: 16 hours. You've got some SOPs but you're rebuilding them for the new vertical.
Client 5: 12 hours. Now you've got patterns, but no system.
Client 15: 4 hours. You've finally got real templates, a real discovery script, a real proposal format, and a real onboarding playbook.
The catch: most operators quit between client 3 and 8 because they're burning out on the unpaid scaffolding work. They've priced for "the automation" and they're delivering "the automation + 12 hours of unbilled discovery and onboarding." Margins implode.
The frameworks that compress this:
- Master discovery questionnaire. 30 core questions + 6-8 industry overlays. Same script every client, customized by vertical. Cuts week-1 from 12 hours to maybe 4.
- Workflow audit framework. Not "what do you want to automate" - "let me show you your process mapped" with a deliverable they can hold. Anchors value before you build anything.
- Modular SOW blocks. Every feature is a priced, titled block. New scope = new block, not a freebie. Kills the scope creep death spiral.
- 30/60/90 implementation roadmap. Signed at kickoff. Sets expectations on when Phase 2 ideas land so you stop fielding "but can you add X this week" emails.
- Branded ROI calculator. Generates a PDF that looks like a real consulting deliverable, not a Notion screenshot. Clients forward it to their bosses. Justifies your price.
- Weekly status email template. "In scope this week / parked / questions back to you." Documents the scope boundary every 7 days, in writing.
Honestly, running an AAA profitably isn't that you need better n8n skills. It's that you need a complete operating system around the work that covers discovery, proposals, onboarding, client management - one that compresses the unpaid hours so the paid hours actually pay.
------------------------------
Disclosure: I've productized this into "AAAOS" A Notion workspace with all 8 modules, the ROI calculator app, proposal templates, and a Loom walkthrough library. Currently in a 14-day validation sprint at $197 founding-member pricing (refundable $50 deposit, locked refund guarantee if it doesn't ship in 30 days). aaaos.app if you want to look. I'm the founder, Christian / Prismatic Enterprises.
Happy to answer questions about any of the frameworks above, deposit or no.. I've been writing the same answers in DMs forever, so anything that's useful gets shared either way.
Validating via pre-selling an Operating System for AI Automation Agencies? Looking for feedback
Hey crew.. quick context: I'm the founder of UserDesk and run a few products under Prismatic Enterprises. I've been seeing a lot of AAA operators with the same complaint coming up and wanted to explore it a bit. Onboarding new clients takes 80-100 hours per 5 clients because nothing's templated.
I've building a product to help that.. Notion workspace (discovery, workflow audit, proposal generator, onboarding playbook, blueprint library of 100+ automations), companion ROI calculator web app that exports to branded PDF, Google Docs proposal templates, walkthrough videos.
My thought is running a pre-sale this week to validate. $50 deposit gets a founding member spot at $197 (will be $297 at launch). Refund if I don't ship in 30 days.
Two questions:
If you run an AAA, what's the most important thing this needs to include? What's missing from the description above?
If you don't, does the offer landing page read clearly? Anything missing or misleading?
Will share results of the validation sprint here regardless of outcome.
Has anyone run a similar validation before? Any results you care to share? Appreciate the thoughts!
Built a free tool for you LETF degens.. let me know if you like these preview cards show or if should update anything!
Should be fairly self explanatory (and there's a little guide on the site if you aren't familiar with the 200 day SMA strategy for LETFs) - but let me know what you all think. Open to any feedback. Totally free.. no ads or anything. Just info. It's something I built for myself and figured others would probably be interested in :)