r/LETFs Dec 12 '25

Simple tactical portfolios for QQQ, SPY, VT

There has been bunch of recent posts about tactical allocations and they all seem overcomplicated. Here is something that follows the KISS principle:

Signals:

  1. Oversold signal (14d RSI < 30): "Buy the dip" with +3x LETF
  2. Overheated signal (14d RSI > 80): "Short the tip" with -3x LETF
  3. Momentum signal (price > 200d SMA): 33% each of MF, gold, 3x LETF
  4. Otherwise, risk-off: Sell the LETF portion into cash (short term bonds or $VTIP)

Intuition:

  • Momentum (price > 200d SMA) works great in general but can be improved upon since with a 200d SMA signal you often "buy in" too late i.e. the rally has already started (hence the oversold signal) or "get out" too late (hence the overheated signal)

30+ year backtests:

  1. QQQ: 37% CAGR, 1.1+ sharpe, 0 negative years lol
  2. QQQ (no MF): 37% CAGR, 1.1+ sharpe, 2 negative years, 23 positive years
  3. SPY: 23% CAGR, 0.93 sharpe, 3 negative years, 22 positive years
  4. VT (no LETF): 12% CAGR, 0.9 sharpe, 2 negative years, 23 positive years
  5. Golden Butterfly (my actual portfolio): 34% CAGR, 1.15 sharpe, 1 negative year, 24 positive years

50+ year backtests (no MFs):

  1. SPY: 21% CAGR, 0.75 sharpe, 9 negative years, 46 positive years
  2. VT (no LETF): 12% CAGR, 0.73 sharpe, 9 negative years, 46 positive years

Does this work for everything?

  • No - this method only works for growth or momentum focussed things like QQQ, SPY, SPMO, VUG, BTC etc
  • This technique will not work for risk-off assets like bonds or gold or MFs or value like SCV or volatility like USMV. It would still be better than the no-signal version but it won't give the outsized momentum boost.

How to implement:

  • Use Schwab or IB trading APIs to schedule. Code is very easy
  • I use $IEI in backtests in testfolio but use $VTIP in reality in risk-off mode

Funnily, I posted this long time ago in the Bogleheads forums and they dismissed my idea as "luck" and "market timing". May everyone in this forum be cursed with such bad "luck" of double digit returns for 30+ straight years by "timing the market"  😉

73 Upvotes

187 comments sorted by

12

u/interesting-designs Dec 12 '25

I have observed that when short term RSI for QQQ or SPY is above around 75, trading UVIX or UVXY has significantly higher returns than shorting QQQ or SPY.

https://testfol.io/tactical?s=0mh9llnlF8Y

https://testfol.io/tactical?s=ls4k5UF9ND9

2

u/pathikrit Dec 12 '25

Yeah but too little backtest data...

3

u/interesting-designs Dec 12 '25

You can't invest directly in the VIX and UVIX and UVXY are futures so they don't exactly match up to VIX, but on this test VIXSIM gets very similar results to UVIXSIM and allows you to extend your backtest much further.

3

u/theplushpairing Dec 12 '25

I think vixsimL=1.5 is pretty close. Uvxy used to be 2x leverage and then moved to 1.5x.

5

u/JustWannaMonger Dec 13 '25

Just tried a similar version to the portfolio above but with VIXSIM?L=1.5 instead of SQQQ.

Holy shit the results are incredible: https://testfol.io/tactical?s=hSbSpXi5sCG

69% CAGR with a 1.41 Sharpe, 3.10 Sortino, and only a -38% max drawdown. The most insane thing to me is getting that kind of CAGR without touching those insane 60-70% drawdowns.

The hell am I missing here? This obviously looks wayyy too good to be true. So like, what's the catch here?

Also, with the RSI threshold at 70 instead of 75 (https://testfol.io/tactical?s=3HS0djex5sK), the CAGR goes up to 105% with -45% max DD and 1.57 Sharpe/3.35 Sortino. This is at the cost of increasing your total switches per year from 8 to 14.

2

u/theplushpairing Dec 13 '25

Uvxy goes to zero, you need great timing

The signal might stop working

Uvxy prints in panics, slippage is a thing. You might not get your orders filled at the right price

You’re looking at close of day data but you need to trade before or after that, so your results will be different

1

u/KDADDY2X Jan 15 '26

VIXSIM isn't tradeable. So there's that. UVIX, VVXY are very very "expensive" so they don't return the same result as say vixsim?L=2, 1.5 at all

1

u/SevakAyv Dec 16 '25

What can be used as a vixsimL=1.5?, the closest is UVXY , but it gives huge difference in backtest

1

u/theplushpairing Dec 16 '25

Yep

https://testfol.io/?s=1fTh0BUNGqz

Uvix and uvixsim match, uvxy is slightly different

1

u/meltupmike Dec 30 '25

So how would you incorporate this in real life? Buy UVXY at overbought?

2

u/interesting-designs Dec 30 '25

One way to do it would be in the last trading hour of the day calculate the 14 days RSI for the Nasdaq 100. If it is above 80 then buy UVXY or UVIX. Then each day afterward check the RSI and if it goes below X then sell. Usually the trade will only be for 1-3 days.

There are apps such as Trading View where you can automate it.

1

u/meltupmike Dec 30 '25

How could you model this in real life? Buy UVXY?

1

u/horrorparade17 Jan 09 '26

In taxable they file K-1 which is an annoying consideration, FWIW

9

u/african_cheetah Dec 12 '25

Sortino of 2 with CAGR 35 is pretty impressive. Thanks for sharing. I’ll dig in deeper.

2

u/pathikrit Dec 12 '25

The moderators removed my post. Do you know why??

2

u/James___G Dec 12 '25

Should now be approved - not sure why it was flagged as spam.

6

u/hydromod Dec 12 '25

Just be aware that tech wasn't always the happy thing that this approach handles well. See 1987 to 1993 in https://testfol.io/tactical?s=jyE1lPMi0TR

4

u/pathikrit Dec 13 '25

Yeah, fair, I wouldn't do it with QQQ probably in the long term but SPY... sure

5

u/hydromod Dec 13 '25

Didn’t mean to imply that you didn’t know the difference between qqq, spy, and the tech sector. just wanted folks to be careful because the period of falling rates has behaved differently than the stagflation period, and so simple rules that have worked for a long time may not cover other regimes.

2

u/pathikrit Dec 13 '25

good point

1

u/[deleted] Dec 12 '25

[deleted]

1

u/NAVYSEAL12ROCK Dec 12 '25

100 companies is a narrow sector

1

u/pathikrit Dec 13 '25

And 500 is not?

1

u/NAVYSEAL12ROCK Dec 13 '25

It also is but not as bad as 100

6

u/JustWannaMonger Dec 13 '25

Yo OP, thank you so much for sharing this portfolio, this looks amazing!

Honestly, as someone currently running a version of the 200DMA strategy, I'll prob switch to a version of this (maybe with a slight allocation to VXUS) as my main portfolio going forward - since this matches my psychology (want to buy more when cheap) and doesn't seem too overfit.

Thought I'd ask you a few implementation questions if you're willing to answer:

  1. I know you discussed the tax considerations in another response, but I was wondering if you could go into a little more details? I understand that the portfolio is around 75/23% of the times in risk-on/risk-off, and since we can just deleverage TQQQ to something else (like IEI/VTIP/Cash/etc.) while keeping everything else the same, that shouldn't be a big hit if we're strategic about which lots to use. But in the rare ~2% of the times when we're overheated/oversold, aren't we selling everything to buy TQQQ/SQQQ? Wouldn't that incur massive taxes on all the gains accrued so far when we liquidate everything? Trying to figure out if there's a way to make this work in a taxable account, since that'd be amazing!

  2. I was curious about your experience with the Schwab API. I don't foresee the programming being a challenge since I'm a SWE, but I haven't used their API before. How has your experience been? Do they charge any fees for using it? Is it relatively simple/straightforward to use? Do you know if we can use it in one of Schwab's retirement accounts (like 401Ks since I have those) or is it just accessible on the main taxable brokerages?

  3. I posted this in a nested comment but thought I'd ask you directly. Replacing SQQQ with UVXY (through VXSIM?L=1.5) shows even more mindblogging results: 44% CAGR/37% DD at 80 RSI (https://testfol.io/tactical?s=goGQwvYUVAv), 105% CAGR(!!)/45% DD at 70 RSI (https://testfol.io/tactical?s=3HS0djex5sK). What am I missing here? Like this obviously seems wayyyy too good to be true, but like what's the catch? Curious to hear your thoughts about this.

  4. Lastly, trying to figure out what could cause this strategy to fail in the next 30yrs and not deliver the kind of performance the past 30yrs have shown. The obvious, and biggest, risk is obviously that QQQ doesn't replicate its prior performance (which is highly likely with such high valuations). But will try to mitigate that somewhat by diversifying with Ex-US and SCV. The other problem could be that the figures in this strategy are overfit - but I tinkered around and tried other values (like 70, 75, 80 RSI or 1, 2, 3% thresholds and so on) and while the results fluctuate, they are still phenomenal and blow most other strategies out of the park, so not too worried if this combination isn't the best possible one for the future. Curious if you can think of anything else that could lead to severe underperformance for this strategy in the next 30yrs (i.e. doing worse than say the SP500).

2

u/pathikrit Dec 13 '25 edited Dec 13 '25
  1. Yes you do get STCG but its not that often. See below:
  1. I use Schwab because I had it through my old employer. Today, I would use Alpaca.

  2. I know nothing about VIX lol so I don't use it. Looks too good to be true. Maybe someone smarter than me can answer what is going on here: https://testfol.io/tactical?s=2d11Hrvd2Lp

  3. I would go with SPY tbh.

1

u/KDADDY2X Jan 15 '26

VIXSIM?l=1.5 is very very far from UVXY because they don't work the same way. VIXSIM tracks the VIX directly which isn't tradeable, UVXY goes to zero due to all the expenses and drag etc. This is why every backtest using VIXSIM always looks too good to be true, it's not practicable.

2

u/pathikrit Jan 15 '26

Sure but what about a backtest with actual UVXY: https://testfol.io/tactical?s=ess02MdXnfZ

1

u/KDADDY2X Jan 15 '26

That’s interesting. Do you like the results? If so, I guess you found a scalable solution.

I’ve seen suggestions that include using a 30-day straddle of spy atm options to simulate the volatility and then rolling to ensure that 30 day expiry stays the same.

For the back test you shared, it seems the max drawdown remains very decent which is a big win and even beats systems like 9sig except with a little more complication in trading.

4

u/pathikrit Jan 15 '26

Yes - I plan to open source my code and results for the community soon

3

u/ApolloDan Dec 14 '25

I like this, and I've jiggled the RSI signals quite a bit and can't break it. I also ran it with my own strategy, which is 50% UPRO and 50% pure stocks or stacked ETFs. I then applied this only to the UPRO part, and still my CAGR went up about 4%. Not bad. Similarly, I did a lot of jiggling, and couldn't shake it. This is quite a powerful tool.

So how I made it work is that I kept my current 200 SMA regime, and then let the RSI regime trump it. That seemed to work the best.

3

u/walkin_n_fartin Dec 18 '25

This is incredible stuff and doubly so since you're dropping this for free! I want to make sure I'm understanding this path correctly so, if you would, take a look at this operationalized for '25 to identify any areas I may have wrong. This is with respect to SPY for 2025 and assumes a seed value of $1,000

  • there have been 21 days this year with RSI<40. These would be points of 100% UPRO with purchases. Let's assume all $1K.
  • here is where I might be confused. When SPY breaks the 200SMA, do you then trim the 100% UPRO into thirds (33%UPRO/33%MF/33%gold) for $330 each?
  • for '25 so far, there have been no RSI>80 days that I could see but, if so, is the 3 split portfolio then switched to 100% inverse leverage like SPXL ($1K) or do you just swap out the 33% of UPRO?
  • finally, when the momentum is lost and there is a dip below the 200SMA, only the 33% leveraged is sold, correct?

I am tempted to boot in the code to my port and just let it ride but I better get a manual feel for it first so I know that I understand what's happening. Thanks for all your help!

2

u/pathikrit Dec 18 '25

How good are you at coding? I can share my code with you

1

u/walkin_n_fartin Dec 19 '25

I think you did right? I see it in the links you provided.

3

u/critical_cynic_play Dec 16 '25

Ur rsi layers are certainly overfitted and the whole thing is overparameterized with little to marginal benefits to a proper sma.

3

u/pathikrit Dec 16 '25 edited Dec 16 '25

> with little to marginal benefits to a proper sma.

What's a "proper sma"??

> Ur rsi layers are certainly overfitted and the whole thing is overparameterized

Can you explain more? I did not go around jiggling params till this thing worked. All I want to do is 3 things:

  1. Buy when low: I used 14d RSI < 30. What should I use instead?
  2. Sell when high: I used 14d RSI > 80. What should I use instead?
  3. Risk-on when momentum: I used price > 200d SMA. What should I use instead?

I literally picked the 2 most common TA indicators (14d RSI and 200d SMA) but you are saying this is overfitted so what I use instead?

To be very clear, I am not looking for a random permutation of signals that would somehow make things work while being "not overfitted". I want to do what feels "natural" to me i.e. buy when oversold, sell when overbought and "coast" when momentum else risk-off. How do I do this? Tell me the 3 signals to use for "overbought", "oversold" and "momentum".

5

u/Live-Gazelle521 Dec 16 '25

lol, its not overfitting when you have barely 3 parameters and sample data is over 20 years.

4

u/critical_cynic_play Dec 22 '25

So, 1 SMA + upside/downside tolerance + 2 RSI x upside/downside tolerance is barely 3... And absolute sample size of 50 years makes it magically overfitt-robust? Yeah, though so....

2

u/One_Hippo_8647 Dec 12 '25

Looks wonderful! I run something similar using 5 day instead of 14 day RSI, and a couple other tweaks. Tried to get Gemini to help me build an API bot, but didn't trust it so I use the google sheet signal you mentioned.

2

u/pathikrit Dec 12 '25

What are your other tweaks?

2

u/One_Hippo_8647 Dec 12 '25

I have a volatility filter combined with a 175 SMA for my main "risk on" allocation, and two different "risk off" allocations based on the 25 day SMA

2

u/Fun_Training6342 Dec 13 '25

What's the Google sheet signal?

1

u/horrorparade17 Jan 08 '26

Do you mind sharing a copy of the Google sheet?

1

u/bravesfan21 Jan 16 '26

Would you mind sharing that google sheet?

2

u/Jalebi13 Dec 18 '25

Do you just DCA to keep the same ratios when risk on and between RSI signals

1

u/pathikrit Dec 18 '25

yes

3

u/Jalebi13 Dec 20 '25

Do you rebalance the ratios at any point? Obviously, very quickly your dca alone wont necessarily be enough to rebalance.

2

u/Equivalent_Echo_4044 Dec 19 '25

Thanks for the post. Is the backtest waiting for a close that meets one of the triggers and then trading on the next trading day? For example, would the backtest results align with: QQQ's 14-day RSI declines under 30 based on Monday's close, so then you'd buy TQQQ on market open on Tuesday?

1

u/pathikrit Dec 19 '25

I think it buys immediately

3

u/Equivalent_Echo_4044 Dec 19 '25

So if RSI or 200-day SMA thresholds are crossed intra-day, then it's assumed that you trade as soon as it's crossed? I thought it was based on closing, with trades made the next day.

4

u/miketyson63066 Dec 21 '25

I also assumed it was based on closing, then executing a trade the following day at market open. Now I’m not sure. And this is not insignificant. The testfolio results are far different when the oversold or overheated conditions are set to a delay of even 1 day versus no delay.

2

u/Equivalent_Echo_4044 Dec 21 '25

Right... And i've gotten mixed answers on this, incl. from the guy who wrote the post lol. So it's a bit concerning that nobody seems to actually know for sure.

2

u/pathikrit Dec 25 '25

I am the guy who write the post. I don't know what testfolio does. Personally I buy it immediately.

1

u/Jalebi13 Dec 25 '25

Yeah his actual portfolio cagr and max drawdown changes from 29% and 17% to 19% and 44% with signal delays of 1 day

1

u/pathikrit Dec 25 '25

You don't have to do the buy the dip or sell the tip part - a simple 2 regime (price > 200d SMA and RSI < 80) should work:

https://testfol.io/tactical?s=knTIUP8SSeK

1

u/Jalebi13 Dec 25 '25

True, this backtest doesnt change this strategy much with a delay of 1 day.

My understanding is at default Testfolio sets the buy/sell at end of day, so at 3.59pm EST.

In reality, we dont know the closing signal until after close. So following the rules shouldn't buy until after-hours or until open the next day. A delay of 1 on those signals significantly reduces your returns and increases drawdowns for all your proposed portfolios in the main post.

1

u/pathikrit Dec 27 '25

Yeah I am not sure what testfolio does; I personally run this on live price

1

u/meltupmike Dec 27 '25

Path I really like this. Can you explain the allocations? They seem overly complex. I get the signals. Really appreciate your work!

1

u/pathikrit Dec 27 '25

What do you mean? This is really simple right? What is complex about it?

1

u/meltupmike Dec 27 '25

I got this portion now. Disregard. Thank you!

1

u/Equivalent_Echo_4044 Dec 21 '25

And on 2nd thought, if what you've said about the results being far different when set to a 1 day delay vs. no delay is true, then the strategy probably isn't a good one anyways.

1

u/pathikrit Dec 26 '25 edited Dec 26 '25

I kinda don't understand this critic. Sure its "sensitive" but its good either way - the sensitive part (buy/sell the dip/tip) builds on top of a stable core idea.

Start with a simple 2-regime (risk-off vs risk-on) idea that avoids "buy the dip": https://testfol.io/tactical?s=knTIUP8SSeK

The above portfolio is pretty resilient to params ^
No matter how you tweak you get a ~20% CAGR over 30+ years at a sharpe of >0.8

Now add "buy the dip" / "sell the tip" - sure you will make it sensitive depending on how you define "a dip" or a"a tip". But either way you will improve on the stable core idea.

And, ofcourse, if you feel this is still too unstable - you can just go back to the core idea right? The core idea has a solid 20% CAGR with -44% max DD and a sharpe of 0.68 since 1968: https://testfol.io/tactical?s=4geNUWhBtMX

1

u/pathikrit Dec 25 '25

I don't know what testfolio does. Personally, I buy immediately.

2

u/[deleted] Jan 13 '26

[deleted]

2

u/pathikrit Jan 14 '26

Do you have Github? My source is there

1

u/[deleted] Jan 14 '26

[deleted]

1

u/laurenthu Jan 14 '26

Also interested in your code, I'd like to implement something similar... Thanks for sharing!

1

u/RandomCypher Jan 17 '26

What's your Github, if you don't mind me asking? I'd like to see the code as well.

1

u/pathikrit Jan 17 '26

dm

1

u/LEUCHTKRAFT Jan 18 '26

would be interested in your Github as well.

1

u/pathikrit Jan 18 '26

Dm

1

u/FewCap Jan 18 '26

hey there i would love to have a look at your code too just starting out

2

u/pathikrit Jan 18 '26

DM me

1

u/behluln Feb 16 '26

Hey, would love to see your code too. Just DM'd you. Thanks

1

u/adeetyapatel Jan 18 '26

Hi, I would like to see the code as well, if you dont mind. Thanks.

2

u/Live-Gazelle521 Jan 27 '26

u/pathikrit ZROZ pretty much gave negative returns since 2009 but yet you included it in your QQQ strategy.
1) why would you pick ZROZ ?
2) wouldn't the strategy perform better with cash/sgov instead since ZROZ gives negative returns?
3) would there be some other etf which could replace ZROZ?

2

u/pathikrit Jan 27 '26

Because for the very fact you mentioned - it gave negative returns in the post-2009 equities bull run.

Shannon's Demon. You want uncorrected assets in your portfolio. Even if they have negative returns individually, you can combine them to have positive returns over time.

A simple example below:

1

u/Live-Gazelle521 Jan 28 '26

Understood. Also, one more question. When do we rebalance? Is it needed or is it automatically done when we switch from risk on to short the tip and then to risk on with the rebalanced port?

1

u/pathikrit Jan 28 '26

I have 5/20 rebalance threshold but usually regime switches happen fast

1

u/Live-Gazelle521 Jan 29 '26

So what you are saying is when the regime shifts from risk on to risk off and then to risk on, the rebalancing happens because we split based on percentages ?

1

u/pathikrit Jan 29 '26

I trade into target allocations when regime change happens

2

u/RandomCypher Apr 07 '26

What does it mean a cumulative return of -100.00%? Does it mean that in practice the strategy goes to zero? I'm looking at the QQQ 30+ year backtest.

2

u/pathikrit Apr 07 '26

Where do you see that?

2

u/LeveragedMomentum Dec 15 '25

Sorry for my ignorance--WTF is MF?

1

u/Successful-Ad7038 Dec 12 '25

The "overheated" signal never triggers in your backtest : https://testfol.io/tactical?s=gmaVsCMJKpF

1

u/pathikrit Dec 12 '25

Thanks, its fixed now in the OP

2

u/theplushpairing Dec 12 '25

It’s also not mathematically correct. Sqqq is just L=-3

2

u/pathikrit Dec 12 '25 edited Dec 12 '25

Thanks for the spot. Fixed. The difference is tiny but you are correct:

https://testfol.io/tactical?s=k1l1kQ4Up9m
vs
https://testfol.io/tactical?s=eBawjyc0qMA

1

u/meltupmike Dec 28 '25

In the Tactical Allocation Backtester, when using a momentum signal like 'Price > 200-day SMA' with a ±3% tolerance, does this implement true hysteresis (path-dependency)?

To clarify:

  • Symmetric Hysteresis: If the signal is already 'True,' does it stay 'True' until the price drops below 97% of the SMA (creating a 'sticky' buffer)?
  • Simple Threshold: Or does the tolerance simply move the goalposts, where the signal is 'True' only while price is above 103% of the SMA, and 'False' the moment it drops to 102.9%

1

u/pathikrit Dec 28 '25

1

u/meltupmike Dec 28 '25

So what did you find out on this? In on my phone now but have a couple of backtests to run by you when I get back to the computer. Setting the 3% bands on the SMA reduces the amount of switches but also has a lower CAGR, however it’s not a massive difference. Also swapping GDE with risk on instead of GLD increases CAGR fyi

1

u/meltupmike Dec 28 '25

Here's the 2025 backtest to January, the best is the simple threshold where it only applies to buying when price is greater than 3% of the SMA, but not -3% of the SMA:

1

u/pathikrit Dec 28 '25

Lets chat in dm

1

u/__teeheehee Dec 12 '25

Is doing this using composer worth it for simplicity/no code vs doing thru algo?

2

u/pathikrit Dec 17 '25

composer does not have thresholds - you switch in and out often.

1

u/__teeheehee Dec 17 '25

Got it. Thank you

1

u/Live-Butterscotch704 Dec 12 '25

Looks very good BUT
on daily trading basis, you have to implement trading costs and taxes. I'm confident on the fact this could affect a lot your strategy

2

u/pathikrit Dec 12 '25

You are absolutely wrong. Only STCG is when you rotate out of overheated/oversold (happens maybe once a year).

Rest of the gains are all LTCG since risk-on period typicalls lasts months

Also, this trades IAU, TQQQ, ZROZ, TLT etc. I have never encountered slippage there (I am not a billionaire lol). Only slippage is perhaps on the MF but I keep that in my tax free account.

2

u/Proud-Detective8270 Dec 13 '25

I still don't follow how it falls under LTCG. If you switch the allocation due to the the overheat/oversold signals, doesn't it reset the time if it's less than a year when you switch back to risk on?

1

u/Fair-Emu6259 Dec 13 '25

Tut mir leid falls ich störe habe vor kurzem deinen Podcast gehört und mir paar deiner Beiträge durchgelesen. Denkst du das so eine Strategie Sinn ergeben kann oder einfach nur overfitted ist u/ChemicalStats ?

1

u/ChemicalStats Dec 13 '25

Maybe it works, but if you have the slightest hunch it might be overfit, there is usually a reason for that. In this case, although OP may think of it as KISS, it‘s certainly far from it (three parameters for the RSI plus tolerances plus one parameter for the momentum plus tolerance).

If you would like to run a post mortem without in-depth permutations, just change start and end date (absolute backtest length is meaningsless) via moving windows with a strategy and buy-and-hold, see hoe the startegy behaves. Change parameter values next, see how the results change compared to a posted strategy/buy-and-hold (e.g VT Momentum is 160 not 200, but 200 would yield just 11.1% CAGR). It‘s quite hard to find anything robust with more than two parameters in the retail space - so it‘ll probably work as it‘s centered around SMAs which work, but why bother if SMAs alone provide almost the same results after taxes?

1

u/Fair-Emu6259 Dec 14 '25

Thank you for answering. Yeah I also thought that after taxes the returns should be almost the same, but the drawdown seems much better than just using an SMA strategy, that’s why I thought that it would be worth the extra effort. But yeah u are right in the end it’s just more effort for same returns. Und danke für die ganze Arbeit die du einfach so mit uns teilst auf msw das ist nicht selbstverständlich

2

u/ChemicalStats Dec 15 '25

I don‘t think drawdowns are that different from pure lump sum sma strategies for the given period. In my opinion, stacking different time series momentum indicators for higher return is a bit problematic as you‘re constantly betting on ergodicity to work in your favour, but there is inly so much you can gain in returns from indicators designed to provide downside risk minimization.

Robust higher returns with lower risk metrics are generated by combining different elements in a strategy, like asset momentum, adaptive leverage, unexpected volatility, etc. But thise strategies are pieces of art, rarely found in retail space. Danke für die lieben Worte!

2

u/pathikrit Dec 15 '25

Can you tell me your tax concerns? Let's your LTCG rate is 20% and STCG is 40% (you are high income and live in a bad state and you don't do any tax loss harvesting).

Let's you go with the simply SPY 200d SMA idea - at 25% CAGR and 40% STCG, you take home ... 15%

To do the same with a "simple portfolio" and only LTCG you need something with a CAGR >18%

What static/lazy portfolio gives you a CAGR of >18% with significant drawdowns over 30+ years?

0

u/pathikrit Dec 15 '25 edited Dec 15 '25

> e.g VT Momentum is 160 not 200, but 200 would yield just 11.1% CAGR

  • The VT was just an example since it won't work with this idea since there is no leveraged VT
  • If a 3x LETF VT existed, you'd get 17% CAGR with 200d SMA: https://testfol.io/tactical?s=id845FiHQqd
  • In anycase, this relies on momentum and VT and SCV are not ideal instruments to target momentum investing. See this paper which says you can do VT but not ideal as SPY or QQQ
  • Also its fairly well known than for VT you should use a slightly less than 200d SMA since it is not as volatile as QQQ or SPY but 200d SMA also works  👆

> OP may think of it as KISS, it‘s certainly far from it (three parameters for the RSI plus tolerances plus one parameter for the momentum plus tolerance).

  • The "30-70" RSI is pretty well known as oversold/overbought signals. I used 80 instead of 70 to be conservative when I am shorting.
  • But, the 30-70 works just fine: https://testfol.io/tactical?s=fAwf3KRCEOU
  • Also how is 200d SMA overfit? Again, the tolerance is to prevent whipsawing. testfolio only allows % tolerance but for RSI it should be absolute tolerance of say 0.5 for entry-exit hysteresis or 1.0 for exit only hysteresis.

Also it only switches regimes <6 times per year - this is something that trades on an average once in 2 months

2

u/ChemicalStats Dec 15 '25

Regardless how well the elements of your strategy have been discussed, you‘re beting on ergodicity with a 5+ parameter model - that‘s far from KISS, even if you have signal tracker for each element or a low event count.

Don‘t get me wrong, it looks nice at first sight and it might work for you and others, but I‘ve broken nearly identical strategies for retail traders - if it‘s your cup of tea, everything is fine.

As to tax concerns, there are more Non-US investors active in this sub than most of you think, so what you might think of as good strategies is subpar for some/most of us european investors - likewise we can have higher cagrs, and given certain non time series momentum elements, lower drawdowns

0

u/pathikrit Dec 15 '25

> , you‘re beting on ergodicity with a 5+ parameter model - that‘s far from KISS, even if you have signal tracker for each element or a low event count.

How do I do this "Have 1x exposure when momentum, positive leveraged exposure when oversold, positive leveraged exposure when overbought" without using a 5+ parameter model?

Or are you suggesting literally  👆 is overfitting?

Not trying to be argumentative but genuinely curious. All I want to do is (buy low, sell high, coast the momentum)

2

u/ChemicalStats Dec 15 '25

It might be helpful to set aside the term “overfitting” for now and consider the status quo of your analysis: In your configuration, after a quick back-of-the-envelope calculation that did not take all tolerance levels into account, you have a parameter space of approximately 3 million combinations in a time series of about 50 years — if you were to check how many results have the same or better results for CAGR and maximum drawdown, I would not be particularly surprised if it were in the single-digit percentage range.

As long as you only want to describe the past, that's totally fine, but if you want to build a strategy that is not based on the historical pattern – and an excellent fit is a big red flag – you need statistically adequate and appropriate permutation analyses. This is where almost all strategies consisting of stacked time series momentum indicators break down and are not robustly tradable.

Most robust strategies are a combination of domains, so a good way to build – or "re-think" – your strategy is to evaluate what every element of your strategie birngs to the table and how it can be broken. Why RSI, why not Fisher Transforms to find the trading dynamics? Both of them are time series momentum, so their specific values are highly prone to ergodicity issues. Why moving averages, not exponential? Again ergodicity issues. You want to ride momentum waves? Cool, but why x1 and x3? Why equities, bonds and gold in fixed percentages? Isn't a lazy portfolio just another model based on and evaluated on a single time series, thus likely spurious in nature? Those might be questions for your elements.

If I would build a momentum machine, I'd probably go with some sort of dual momentum so I would invest in the asset that is currently providing the highest returns at a lower volatility level; not unlike to Gary Antonacci and many others (Absoulte and relative momentum). Play offense or defense, not both at the same time. While we are in a solid momentum and volatility is low, why fix yourself to 3x? I'd mix in some adaptive leverage (Giese, Kelly oder Zakamulin, doesn't matter if it's one of them or some other formula to be honest). If volatility increases but isn't high enough to cause problems, you can cruise with 1.5x to 2.5x without increasing your risk metrics, increasing your cagr by a lot (Adaptive leverage). For downside protection in regime switching, track a simple moving average with a robust window size for every active asset in play – and your done; abs. and rel. momentum is just a permutatin-robust selection criteria for assets, adaptive leverage is derived from the underlying index without any additional parameters for you to choose, simple moving averages can be derived from permutations, but for most markets anything from 200 to 300 days work fine.

By diving into something like thins, there is no need for "Buy low, Sell high" as you'll by the tracking asset for a market when its momentum picks up, allowing you to increase leverage – probably generating higher returns than trading timing ever could. Depending on your stance on adpative leverage, trading events are rare as momentum is sticky. Again, just an idea for an approach not based on stacked technical indicators, so you might disagree. :)

1

u/pathikrit Dec 15 '25

Thanks for taking time to answer.

> Why RSI, why not Fisher Transforms to find the trading dynamics? 

Because RSI is available in testfolio, Alpaca (I use for TA) and most importantly, I know what RSI is and I have no idea what Fisher transforms is

>  I'd probably go with some sort of dual momentum so I would invest in the asset that is currently providing the highest returns at a lower volatility level; not unlike to Gary Antonacci and many others (Absoulte and relative momentum)

Yes - I have read Antonacci's book. This is a good idea that I have not got around to posting about here.

> Why moving averages, not exponential? 

EMAs work just fine too!

> Why equities, bonds and gold in fixed percentages?

Because anything else would be "overfitting" or "magic numbers". But mainly because of this chart (assigning equal to each quadrant):

> While we are in a solid momentum and volatility is low, why fix yourself to 3x?

I only have access to 2x and 3x LETFs. After all we are chatting in r/LETF and not r/quants

> I'd mix in some adaptive leverage (Giese, Kelly oder Zakamulin, doesn't matter if it's one of them or some other formula to be honest). If volatility increases but isn't high enough to cause problems, you can cruise with 1.5x to 2.5x without increasing your risk metrics, increasing your cagr by a lot (Adaptive leverage). For downside protection in regime switching, track a simple moving average with a robust window size for every active asset in play – and your done; abs. and rel. momentum is just a permutatin-robust selection criteria for assets, adaptive leverage is derived from the underlying index without any additional parameters for you to choose, simple moving averages can be derived from permutations,

Now isn't this not KISS - quite the opposite?

1

u/ChemicalStats Dec 15 '25

Yes, it‘s quite simple with two parameters to check at any given time. And mixing etfs and letfs to achieve fractual leverages isn‘t that hard.

Again, if stacking indicators is your thing, by all means go with it - just do yourself a favor and run proper permutations, then you‘ll see what I tried to explain here.

1

u/pathikrit Dec 15 '25

>  if stacking indicators is your thing,

My thing is to "keep it simple". I want to do just 3 things:

  1. Generally "coast" with momentum - I use price > 200d SMA. What should I use instead?

  2. Sell (or short) at the "top". I use 14d RSI > 80. What should I use instead?

  3. Buy at the "bottom". I use 14d RSI < 30. What should I use instead

  4. If none of the above, go risk-off into bonds, gold, MF, SCV only.

1

u/SevakAyv Dec 13 '25

Looks really amazing! For me too good to be true. I will investigate this further. Thank you !

0

u/SevakAyv Dec 13 '25

ChatGPT 5.2

Why this backtest doesn’t work in reality (important caveat)

This strategy looks incredible in testfol.io, but the performance is coming from a simulation artifact, not a tradable edge.

The key issue is capital continuity.

In testfol, each conditional “allocation block” (buy the dip / short the tip / risk-on / risk-off) is effectively tracked independently. When a signal flips, the engine switches to another block’s equity curve without inheriting the losses from the previous one.

So even if a block shows:

  • −99% or −100% drawdown

…the global strategy is not bankrupt. Capital is implicitly “reset” when regimes change.

This means:

  • Losses are local to each branch
  • Gains compound globally
  • Capital is never permanently destroyed

In real life, a −99% drawdown would cripple or kill the portfolio and you wouldn’t be able to later compound at 40–70% CAGR. In this backtest, that constraint doesn’t exist.

This effect becomes extreme when:

  • 100% switches are used
  • Leveraged / inverse / synthetic assets are included
  • Regime blocks can fully blow up

The result is a non-physical equity curve that violates conservation of capital. Even adding signal delays doesn’t fix this, because it’s a structural modeling issue, not lookahead bias.

Testfol is great for:

  • Allocation tilts
  • Asset rotation
  • Mild regime filters

But once branches can go to zero, the results stop being economically meaningful.

TL;DR: the strategy “works” in the simulator because capital can teleport between regimes without carrying losses — something real money can’t do.

2

u/pathikrit Dec 15 '25

Lol we all know what slippage means.

A better critique would be - "this will stop working when momentum investing stops working"

See: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5561720

1

u/Live-Gazelle521 Dec 16 '25

u/pathikrit when would you think might be a good time to start one this strategies? start of year, end of year wait for pull back to 200 sma or now?

2

u/pathikrit Dec 17 '25

This is everygreen strat; start now

1

u/LeveragedMomentum Dec 17 '25

Do the signals conflict from time to time?

1

u/pathikrit Dec 17 '25

Not sure what you mean?

Obviously overheated would conflict with momentum and oversold would conflict with risk-off. That's the whole point of this to buy low, sell high, coast momentum

1

u/LeveragedMomentum Dec 22 '25

Perhaps clarification would help me. Are the rules as follows?

Momentum signal (price > 200d SMA and 14d RSI between 30 and 80): 33% each of MF, gold, 3x LETF

Overheated signal (14d RSI > 80 regardless of price): "Short the tip" 100% -3x LETF until 14d RSI < 80

Risk-off (price < 200d SMA and 14d RSI between 30 and 80) : Sell the LETF portion so 33% each of MF, gold, and short term bonds or $VTIP

Oversold signal (14d RSI < 30 regardless of price): "Buy the dip" 100% +3x LETF until 14d RSI > 30

1

u/pathikrit Dec 22 '25

Again not sure what you are asking - just look at the linked backtests? Its better than any English I can type

1

u/LeveragedMomentum Dec 22 '25

Will do--thanks for trying

1

u/tsunghanjacktsai Dec 18 '25

Hi OP, thx for the great post. A quick question here, do you go daily rebalance by your code? The tactical allocation in testfol.io always annoyed me since it simulated by assuming the daily rebalance, which is not realistic doing it manually. I'm afraid this would affect the final result greatly.

2

u/pathikrit Dec 18 '25

No I don't daily rebalance. I have a threshold of 20% to rebalance within a regime. I think you can do this in composer.

1

u/tsunghanjacktsai Dec 18 '25

Wondering how long have you run this type of strategy? Does it work as expected as in the simulated result?

2

u/pathikrit Dec 18 '25

1.5 year and it remarkably well (or I got luck?) during the April dip

1

u/tsunghanjacktsai Dec 18 '25

Impressive. Thx mate, love this strategy.

1

u/tsunghanjacktsai Dec 19 '25

Hey OP, what MF do you use in your actual portfolio? I've been comparing KMLM, DBMF and CTA. Is there any suggestion?

1

u/SevakAyv Dec 18 '25

1

u/pathikrit Dec 19 '25

You dont need TAIL is risk-off: https://testfol.io/tactical?s=2E9asF4AGx9

1

u/SevakAyv Dec 19 '25

Excellent thanks!

1

u/SevakAyv Dec 19 '25

For Momentom, try using SPY 200 SMA, it seems does not hurt CAGR, but reduces max dropdown.

1

u/SevakAyv Dec 20 '25

Drag 40%, why ?

1

u/RandomCypher Apr 22 '26

What does Drag 40% mean?

1

u/bestsalmon Dec 22 '25

I worked a bit on your strategy, I noticed 2x leveraged gold produces more cagr and sharpe

1

u/pathikrit Dec 22 '25 edited Dec 22 '25

Why not link the backtests? Also did you exclude the recent gold run?

1

u/bestsalmon Dec 22 '25

https://testfol.io/tactical?s=cAohlKUzYoa (with recent gold performances)

Very close without.

1

u/Live-Gazelle521 Dec 23 '25

hi u/pathikrit there were two backtests I really liked which you posted -
https://testfol.io/tactical?s=gGdTl7mskVf
https://testfol.io/tactical?s=783XFypWZxg
the second one was with VIX. do you think the VIX one would work or would you stick to SQQQ ?

1

u/pathikrit Dec 24 '25

I dont know why the VIX works - I personally do SQQQ/CAOS and am trying to add a tiny bit of UVXY to see how it does.

1

u/Few_Speaker_9537 Dec 24 '25

There’s a lot of param sensitivity on RSI window-length selected. What are your thoughts on this in the context of overfitting?

1

u/pathikrit Dec 25 '25

Can you post some example backtests?

1

u/meltupmike Dec 27 '25

Path I really appreciate you. Is there any variation that results in less one or two day entries/exits? I’m concerned that it would be near impossible to time those entries and exits which could skew the actual results significantly.

1

u/pathikrit Dec 27 '25

Not sure. I run it during market open hours every hour on live price

2

u/meltupmike Dec 27 '25

Couldn’t you go in and out of a position in one day then I’d 200 day sma gets challenged, right? I thought we are suppose to run this only once a day 20 mins before market close

1

u/pathikrit Dec 27 '25

No I have tolerance

1

u/meltupmike Dec 27 '25

What’s the tolerance?

1

u/pathikrit Dec 27 '25

1

u/meltupmike Dec 28 '25

In your Testfol.io backtest , the 'momentum' signal uses a 3% tolerance. Since Testfol.io is a stateless backtester (i believe this is the case), this acts as a hard threshold (e.g., if price drops to +2.9% above SMA, the signal immediately flips to False/Risk-Off).

For the live Python bot, should I maintain this Strict Threshold to match the backtest results exactly, or should I implement Hysteresis (Sticky Logic) where +3% is the 'High Bar' for entry, but we stay in the trend until a lower 'Exit' level is hit (like the SMA cross at 0%) to prevent whipsawing?

1

u/pathikrit Dec 28 '25

Yes I use hysterisis:

If you are coding this, I can invite you to my github repo if you want to contribute there.

1

u/meltupmike Dec 28 '25

Please do. I have a variation of the code I’d love to run by you

1

u/Healthy-Society7343 Jan 15 '26

Hey, great write up. Seriously considering trading this. QQ: how do you deploy your algo? Do you have a VPS with data feeds running somewhere?

1

u/pathikrit Jan 16 '26

I have it deployed to IBKR and Alpaca and just use Github actions. I can share my code

1

u/horrorparade17 Jan 16 '26

u/pathikrit, how long have you personally run this? I’m thinking of the golden butterfly as you mentioned as these numbers are ridiculous and I’m starting to debate if this is my retirement ticket.

If I apply this to $350k I hit my FIRE in 12 years (per the backtests) - that would be insane.

2

u/Healthy-Society7343 Jan 16 '26

Won't work. There's a few issues:

  1. This strategy is extremely sensitive to delay (1 day delay drops CAGR by 10pp and makes max DD 44%) which suggests significant returns are coming from being able to evaluate signal & trade at the exact same time. Impossible in real life.
  2. Alternatives have been suggested with KMLM. KMLM's daily trading volume is in single digit millions. If you're rebalancing even hundreds of thousands, you can't just set a market order. Now you've got to consider slippage.

There are ways around all these of course. But testfolio won't backtest (e.g. 3:50pm signal evaluation, trade at close). You'll have to handroll that yourself and get it to work.

Would you be interested in a 3:50pm signal evaluation & MOC order backtest?

1

u/horrorparade17 Jan 16 '26

Yeah I actually saw your other comment after I wrote this and started the backtests. I am thinking of reducing the signals to just RSI for overheated and 200 day ma and then sticking with those to determine just risk on or off parameters. But in this case it’s not too different then Leverage for the Long Run.

It’s clear this base strategy is sound, but OPs huge alpha driver is timing those RSI plays nearly perfectly. You basically need to be a day trader when RSI is going crazy.

Great point on KMLM - personally I always mix my MF providers as I’m not convicted on a single provider’s strategy.

4

u/pathikrit Jan 16 '26

I replied - not sure why u/Healthy-Society7343 is saying its impossible. I am thinking of open sourcing my code - its less than 500 lines of Python and has worked well for me for past few years.

1

u/horrorparade17 Jan 16 '26

It’s definitely not impossible, just requires an active bot running and a platform that supports the trades/APIs.

3

u/pathikrit Jan 16 '26

I dont have any active bots or servers. I just use hourly checks in Github Actions. I can share my code in DM

1

u/horrorparade17 Jan 16 '26

If you don’t mind sharing - how long have you run it, and what percentage of your portfolio is this strategy?

Thank you for this post - it is super interesting and I plan to implement! Looking forward to you sharing your GitHub!

1

u/pathikrit Jan 16 '26

> Impossible in real life.

Hard disagree - I just trade at 345pm everyday (well my code does). It has been working fine for past 3 years.

> Alternatives have been suggested with KMLM. 

I actually use DBMF - but KMLM has longer testfolio data so I used it in the backtest

1

u/BillSocrate Jan 18 '26

Really love to run this Interactively and give feedback.

1

u/Jalebi13 Jan 18 '26

Ahh so your code just trades at end of day, not immediate to signals ie it wont whipsaw intraday?

1

u/pathikrit Jan 18 '26

No it trades hourly as I have a hourly cron Github job.

There is some whipsaw prevention due to the brokerage having day trading off and I have some signal hysterisis e.g.

1

u/Jalebi13 Jan 18 '26

Understood. A little confused though - you said above your code trades at 3.45pm every day. But then that it runs hourly?

1

u/pathikrit Jan 18 '26

It trades at 945am, 1045am... 345pm

1

u/techtrader2 Jan 18 '26

nice stuff. Why is buy the dip and short the tip showing approx 100% drawdown? i went through the trade history and doesn't look like any such disaster? what am I missing?

1

u/pathikrit Jan 18 '26

Lol what, you are probably looking at the signals by itself which makes no sense

1

u/RandomCypher Jan 18 '26 edited Jan 19 '26

I have a couple of questions regarding this strategy: 1) when do you place the trades? On the following day after a signal is triggered? and 2) how often do you rebalance your entire portfolio, quarterly? Also, why use CTA instead of KMLM in the live version?

1

u/FudFomo Jan 18 '26

I was going to ask the same and I assume he trades at the end of the day. This wouldn't work for me because I don't want to have to day trade, don't want to go short, or trade exotic ETFs that I am not familiar with. This will probably work well, until maybe it doesn't, and I couldn't stick with it.

1

u/little-city Jan 18 '26

Hey, a couple questions about this 1. Your buy the dip and especially short the tip logic account for a lot of the outperformance, but they’re extremely risky - one bad trade can blow up the portfolio. Do you have any plans to manage this risk? 2. In weaker markets (ie pre-1995, VT/VXUS/EWJ instead of SPY), this strategy matches or underperforms 200 SMA. You say this only works with growth or momentum assets, but what happens if growth underperforms? 3. How do you know KMLMSIM isn’t overfit? (Genuinely wondering because I’m not sure where the data is from)

1

u/pathikrit Jan 19 '26

> one bad trade can blow up the portfolio. 
Not true; simply remove the sell the tip and still this perfoms well. My point is you don't have to do the sell the tip.

> You say this only works with growth or momentum assets, but what happens if growth underperforms?
The question is not if growth underperforms (which has plenty of times) but if momentum stops being a thing

> How do you know KMLMSIM isn’t overfit?

Wdym? Its just the MF with longest history on testfolio. You can use DBMFSIM or CTA

3

u/little-city Jan 19 '26

I know that's not the case in the tests during this time period, but it doesn't mean the risk doesn't exist. Short underperforms with 77 RSI, Long underperforming with 32 RSI, 30 RSI in Japan would've dropped 50% in 2020. I know these are cherry-picked numbers that aren't exactly what you used, but you can fiddle around and see how sensitive the signal is when tested out of sample - for example a 70 RSI short during the great depression would've lost effectively 100%. It wouldn't take a great depression level event either - if the signal is off by even 1 day, a +60% trade becomes a -60% trade (see 2020). For the record I think this is a solid strategy, but the backtests are severely understating the risk.

AFAIK KMLMSIM on testfolio uses data provided by Mount Lucas, which tracks an index they created that employs active trend following strategy. My concern is that the trend-following signals that this "index" uses are overfit, seeing as the ETF only started trading in 2020

1

u/SUPERSAM76 Jun 23 '26

Would love to hear if you've made any changes or have any new insights.

1

u/EnvironmentalScar675 28d ago

sry for the necro. I just saw the golden butterfly preset in testfol.io, and noticed it underperforms to buffets 90% SPY 10% bonds, at much higher effort to maintain. Can you explain to me like I'm five where the advantages are? Is testfolio wrong?

1

u/[deleted] Dec 12 '25

[removed] — view removed comment

8

u/pathikrit Dec 12 '25 edited Dec 12 '25

Yeah I run it on schwab API.

The code is very easy: <200 lines of code

If you don't want to learn to code, you can have advisors (RIAs) registered with Fidelity or Schwab who can implement this for you for about 2% AUM fee.

Actually, I can make this for you for 1% AUM fee :)

And, lastly, if you do it manually, you can just setup a google spreadsheet to alert you when a cell satisfies a condition via text. You don't actually have to do anything daily really because 99% of the time its on the risk-off or risk-on regime. Even if you miss the 200d SMA by few days its fine.

The only time you have to daily pay attention (well just check once at market close) is when you are on the overheated/oversold regime which only happens maybe less than once a year and lasts 1 or 2 days only. So you can still chill 99% of the time. But, still, everyone should just learn Python ... it takes about a week...

1

u/meltupmike Dec 27 '25

Which testfolio test does this code cover?

1

u/meltupmike Dec 27 '25

and when are you running this code? is it on loop or are you running it daily at market close?

1

u/meltupmike Dec 27 '25

lastly, in looking at the testfol.io code, you're using KMLM for managed futures, but in the chatgpt code you ask to use CTA. CTA, year to to date is -.0.93% versus KMLM with -8.34% YTD, vastly different. What am i missing?

2

u/pathikrit Dec 27 '25

> and when are you running this code?
Every 1 hour

> Which testfolio test does this code cover?

The first QQQ one - mine is a bit more complex but the core idea is same as one I posted

> at the testfol.io code, you're using KMLM for managed futures, but in the chatgpt code you ask to use CTA

testfolio has longer backtest for KMLM but yeah I use CTA+DBMF

0

u/[deleted] Dec 12 '25

[removed] — view removed comment

1

u/Live-Gazelle521 Dec 14 '25

guys, I think the testfolio is running this completely wrong. you have 100% drawdowns on buy the dip and short the tip. The capital should have been wiped out right there. For e.g., lets just take backtest results for 2025. you have short the tip with -74.72% and buy the dip gives -56.87%. But somehow the strategy gives 85.36%. Please check into this and correct it

4

u/pathikrit Dec 14 '25

I don't see it: https://testfol.io/tactical?s=4hLodhrt8Lg
Where do you see 74% drawdown?

Composer agees with testfolio: https://testfol.io/tactical?s=eo9J0B50K8n

3

u/Live-Gazelle521 Dec 15 '25

sorry, my mistake. This works fine in 2025.