In partnership with

Retirement Planning Made Easy

Building a retirement plan can be tricky— with so many considerations it’s hard to know where to start. That’s why we’ve put together The 15-Minute Retirement Plan to help investors with $1 million+ create a path forward and navigate important financial decisions in retirement.

🚀 Your Investing Journey Just Got Better: Premium Subscriptions Are Here! 🚀

It’s been 4 months since we launched our premium subscription plans at GuruFinance Insights, and the results have been phenomenal! Now, we’re making it even better for you to take your investing game to the next level. Whether you’re just starting out or you’re a seasoned trader, our updated plans are designed to give you the tools, insights, and support you need to succeed.

Here’s what you’ll get as a premium member:

  • Exclusive Trading Strategies: Unlock proven methods to maximize your returns.

  • In-Depth Research Analysis: Stay ahead with insights from the latest market trends.

  • Ad-Free Experience: Focus on what matters most—your investments.

  • Monthly AMA Sessions: Get your questions answered by top industry experts.

  • Coding Tutorials: Learn how to automate your trading strategies like a pro.

  • Masterclasses & One-on-One Consultations: Elevate your skills with personalized guidance.

Our three tailored plans—Starter Investor, Pro Trader, and Elite Investor—are designed to fit your unique needs and goals. Whether you’re looking for foundational tools or advanced strategies, we’ve got you covered.

Don’t wait any longer to transform your investment strategy. The last 4 months have shown just how powerful these tools can be—now it’s your turn to experience the difference.

How Gaussian Mixture Models and technical analysis create an adaptive trading strategy

Markets don’t move in straight lines. They breathe, cycling through periods of calm growth, choppy consolidation, and violent corrections. Professional investors know this intuitively — the question is: can we systematize it?

In this article, I’ll show you how to build a regime detection system using Gaussian Mixture Models (GMM) that dynamically shifts between aggressive growth positioning and capital preservation based on real-time market conditions. No crystal balls, no predictions — just adaptive risk management.

Kickstart your holiday campaigns

CTV should be central to any growth marketer’s Q4 strategy. And with Roku Ads Manager, launching high-performing holiday campaigns is simple and effective.

With our intuitive interface, you can set up A/B tests to dial in the most effective messages and offers, then drive direct on-screen purchases via the remote with shoppable Action Ads that integrate with your Shopify store for a seamless checkout experience.

Don’t wait to get started. Streaming on Roku picks up sharply in early October. By launching your campaign now, you can capture early shopping demand and be top of mind as the seasonal spirit kicks in.

Get a $500 ad credit when you spend your first $500 today with code: ROKUADS500. Terms apply.

The Core Problem: Static Allocation in Dynamic Markets

The S&P 500 has delivered ~10% annualized returns over the long term. But that average masks enormous volatility:

  • 2020–2021: Explosive 40%+ returns

  • 2022: Devastating -25% drawdown

  • 2023–2024: Strong recovery +25%

  • 2025: Continued growth

A static 60/40 portfolio misses opportunities during bull runs and suffers unnecessarily during crashes. Leveraged buy-and-hold (like 3x S&P 500) amplifies both extremes, delivering exceptional returns but catastrophic drawdowns of 70–80%.

The insight: If we could identify when markets are in “low risk / high momentum” mode versus “high risk / uncertain direction” mode, we could adjust our exposure accordingly.

The Solution: Three Distinct Market Regimes

Our system identifies three market states:

Bullish Regime (60–70% of the time)

Characteristics: Low volatility, strong directional momentum, consistent closes near daily highs

Position: 100% UPRO (3x leveraged S&P 500)

  • Full risk-on exposure with diversified 500-stock index

  • Captures explosive upside during favorable conditions

  • S&P 500 provides better diversification than tech-only indices

Neutral Regime (20–25% of the time)

Characteristics: Moderate volatility, choppy price action, uncertainty

Position: 75% SHY (1–3 Year Treasuries) + 25% GLD (Gold)

  • Capital preservation becomes priority

  • Treasuries provide safety and liquidity

  • Gold offers uncorrelated returns and inflation protection

Crash Regime (5–15% of the time)

Characteristics: High volatility, large intraday ranges, market stress

Position: 75% SHY (1–3 Year Treasuries) + 25% GLD (Gold)

  • Same as neutral — maximum capital protection

  • No short positions (inverse ETFs have tracking issues)

  • Focus on not losing money rather than making it

Technical Foundation: Three Critical Features

To detect regimes, we need indicators that capture different dimensions of market behavior. I selected three complementary features:

1. Average True Range (ATR) — Absolute Volatility

ATR measures how much the market moves on average, regardless of direction:

def calculate_atr(df, period=14):
    # True Range accounts for gaps and intraday movement
    high_low = high - low
    high_close = abs(high - previous_close)
    low_close = abs(low - previous_close)
    
    true_range = max(high_low, high_close, low_close)
    atr = true_range.rolling(period).mean()
    
    return atr.shift(1)  # Avoid look-ahead bias

Why it matters: High ATR signals market stress. Low ATR indicates calm conditions favorable for leverage.

Want the full code snippet to implement this yourself? Upgrade to our paid subscription for exclusive access—it's waiting for you at the end of this article!

Ayrat Murtazin, Owner of GuruFinance Insights

2. Internal Bar Strength (IBS) — Momentum & Mean Reversion

IBS = (Close — Low) / (High — Low)

This normalized ratio (0 to 1) reveals where the close sits within the day’s range:

  • IBS near 1.0: Closes near high (bullish momentum)

  • IBS near 0.0: Closes near low (bearish pressure)

  • IBS near 0.5: Choppy, indecisive action

def calculate_ibs(df):
    range_val = high - low
    ibs = (close - low) / range_val
    
    return ibs.shift(1)  # Avoid look-ahead bias

Why it matters: Bullish regimes show consistently high IBS. Crash regimes show extreme oscillations.

3. Yang-Zhang Volatility — Comprehensive Risk Measure

Unlike simple standard deviation, Yang-Zhang volatility combines:

  • Overnight volatility (close-to-open gaps)

  • Intraday volatility (high-low movement)

  • Open-to-close volatility (directional component)

def calculate_yang_zhang_vol(df, window=20):
    overnight_vol = variance(log(open / previous_close))
    intraday_vol = variance(log(close / open))
    
    # Rogers-Satchell component
    rs_vol = mean((log(high/open) * log(high/close)) + 
                  (log(low/open) * log(low/close)))
    
    # Yang-Zhang formula with optimal k factor
    k = 0.34 / (1.34 + (window + 1) / (window - 1))
    yz_vol = sqrt(overnight_vol + k * intraday_vol + (1-k) * rs_vol)
    
    # Annualize and shift
    return yz_vol * sqrt(252).shift(1)

Why it matters: Most sophisticated volatility estimator. Captures different types of market risk that simple volatility misses.

Together, these three features create a 3D view of market conditions:

  • ATR = magnitude of movement

  • IBS = direction and strength

  • YZ Vol = comprehensive risk assessment

The Model: Gaussian Mixture Models

With three features calculated, we need a way to automatically cluster market conditions into regimes. Enter Gaussian Mixture Models.

What is GMM?

GMM assumes the market has multiple underlying “states,” each following a normal distribution. The model learns:

  1. The mean and covariance of each regime (what’s “typical” in each state)

  2. The probability of being in each regime at any time

Unlike hard clustering (K-means), GMM gives us soft assignments — probability distributions rather than binary labels. This is crucial for risk management.

100 Genius Side Hustle Ideas

Don't wait. Sign up for The Hustle to unlock our side hustle database. Unlike generic "start a blog" advice, we've curated 100 actual business ideas with real earning potential, startup costs, and time requirements. Join 1.5M professionals getting smarter about business daily and launch your next money-making venture.

Implementation

from sklearn.mixture import GaussianMixture
from sklearn.preprocessing import StandardScaler
# Normalize features (critical for GMM)
scaler = StandardScaler()
X = scaler.fit_transform(features[['atr', 'ibs', 'yz_vol']])# Train GMM with 3 components
gmm = GaussianMixture(
    n_components=3,
    covariance_type='full',  # Allow feature correlations
    random_state=42,
    max_iter=200,
    n_init=10  # Multiple initializations for robustness
)gmm.fit(X)
regimes = gmm.predict(X)
probabilities = gmm.predict_proba(X)

Automatic Regime Identification

GMM assigns arbitrary labels (0, 1, 2). We identify which is which by analyzing statistics:

def identify_regimes(features, regimes):
    stats = features.groupby('regime').agg({
        'atr': 'mean',
        'ibs': 'mean',
        'yz_vol': 'mean'
    })
    
    # Crash = highest volatility
    crash_regime = stats['yz_vol'].idxmax()
    
    # Bullish = lowest volatility + highest IBS
    remaining = stats.drop(crash_regime)
    bullish_regime = remaining['ibs'].idxmax()
    
    # Neutral = remaining
    neutral_regime = the_other_one
    
    return {'bullish': bullish_regime, 
            'neutral': neutral_regime,
            'crash': crash_regime}

This is completely data-driven — no manual labeling required.

Critical: Avoiding Look-Ahead Bias

Look-ahead bias destroys backtests. It occurs when your model uses information that wouldn’t have been available at the time of trading.

The Timeline

Here’s the correct flow of information:

Day T-1 EOD: Calculate features using data through T-1
            
Day T Open: Predict regime, execute trades at market open
            
Day T EOD:  Measure returns (open[T] / open[T-1] - 1)

Implementation

Every feature calculation includes .shift(1):

# For time T, features use data through T-1
atr = calculate_true_range().rolling(14).mean().shift(1)
ibs = calculate_ibs().shift(1)
yz_vol = calculate_yang_zhang().shift(1)

When we predict regime for day T, the GMM sees features calculated with data through T-1. We can then trade at open of T with confidence we’re not cheating.

Returns Calculation

We use open-to-open returns:

returns = open[t] / open[t-1] - 1

This reflects realistic execution: you see the regime signal before market open and execute at the open price.

Execution: Bi-Weekly Rebalancing

While we could rebalance daily, this creates two problems:

  1. Excessive transaction costs from 250+ trades per year

  2. Noise amplification from reacting to daily regime fluctuations

Instead, we rebalance every 14 days (bi-weekly):

REBALANCE_FREQUENCY = 14  # Every 2 weeks
# Only change positions on rebalancing days
for day in trading_days:
    if day % 14 == 0:
        # Rebalancing day - update positions based on regime
        if regime == bullish:
            position = 100% UPRO
        else:
            position = 75% SHY + 25% GLD
    else:
        # Keep previous positions
        position = previous_position
    
    # Calculate daily returns with current position
    strategy_return = position * asset_returns

This gives us:

  • ~18 rebalancing events per year (252 / 14)

  • Responsive enough to capture regime changes

  • Low enough frequency to minimize costs

  • Institutional-grade execution pattern

Portfolio Construction: Why These Specific Assets?

Aggressive Position: UPRO (3x S&P 500)

Why 3x leverage?

  • Maximizes upside capture during favorable regimes

  • Only deployed when conditions are optimal (low vol, high momentum)

Why S&P 500 over NASDAQ?

  • Diversification: 500 companies vs ~100

  • Sector balance: Includes utilities, healthcare, consumer staples (defensive sectors)

  • Lower volatility: Tech concentration adds unnecessary risk

  • Better representation: Tracks overall economy, not just tech

Risk acknowledgment:

  • UPRO can lose value quickly (daily rebalancing friction)

  • Not suitable for buy-and-hold

  • Only appropriate when regime detection is confident

Defensive Position: 75% SHY + 25% GLD

Why 75% Treasuries?

  • Ultimate safe haven: 1–3 year treasuries are highly liquid and stable

  • Capital preservation: Objective is not to lose money

  • Low correlation: Treasuries often rise when stocks fall

  • No tracking errors: Unlike inverse ETFs, treasuries are straightforward

Why 25% Gold?

  • Inflation hedge: Protects purchasing power

  • Crisis alpha: Gold often rises during market turmoil

  • Uncorrelated returns: Different drivers than both stocks and bonds

  • Portfolio stabilizer: Reduces overall volatility

Why NO short positions?

  • Inverse ETFs (like SH) suffer from tracking errors

  • Don’t always rise when markets fall

  • Contango decay in futures-based products

  • Simpler = more reliable

The 75/25 split:

  • Prioritizes capital preservation (75% in safest asset)

  • Maintains some growth/hedge potential (25% in gold)

  • Maximum simplicity and reliability

Implementation Considerations

Transaction Costs

With ~18 trades per year:

  • At 0.1% round-trip cost: ~1.8% annual drag

  • At 0.05% round-trip cost: ~0.9% annual drag

  • Still leaves substantial alpha versus benchmarks

Slippage

UPRO, SHY, and GLD are highly liquid:

  • Tight bid-ask spreads

  • Deep order books

  • Minimal market impact for retail size

Tax Efficiency

Frequent rebalancing triggers short-term capital gains:

  • Consider implementing in tax-advantaged accounts (IRA, 401k)

  • Or adjust rebalancing frequency for taxable accounts

Regime Stability

Analysis shows regimes are persistent:

  • Average regime duration: 3–6 weeks

  • Not flipping daily (which would indicate overfitting)

  • Captures structural market shifts

Potential Extensions

1. Volatility Targeting Scale leverage based on realized volatility:

  • When vol is extra low: 4x exposure

  • When vol rises: reduce to 2x

  • Maintains consistent risk across regimes

2. Additional Features

  • VIX (fear gauge)

  • Put/call ratio (sentiment)

  • Yield curve slope (recession indicator)

  • Credit spreads (systemic risk)

3. Multiple Regime Counts Use BIC/AIC to optimize number of regimes:

  • 2 regimes: Simple bull/bear

  • 3 regimes: Bull/neutral/bear (current)

  • 4 regimes: Strong bull / weak bull / neutral / bear

  • 5+ regimes: May overfit

4. Hidden Markov Models Add transition probabilities:

  • Predict regime changes before they happen

  • Smooth transitions using probability thresholds

  • More sophisticated but more complex

5. Position Sizing by Confidence Use regime probabilities to scale exposure:

  • 90%+ probability bullish: 100% UPRO

  • 70–90% probability bullish: 75% UPRO

  • 50–70% probability bullish: 50% UPRO

  • <50% probability bullish: defensive

6. Multi-Asset Defensive Portfolio Expand beyond treasuries and gold:

  • Commodities (DBC)

  • International bonds (BNDX)

  • TIPS (inflation-protected securities)

  • Cash equivalents (SHV)

Conclusion: Systematic Risk Management

This GMM-based regime detection system demonstrates that machine learning can effectively navigate market cycles when combined with sound financial principles.

The Philosophy:

This isn’t about predicting the future. It’s about adapting to the present. When markets show low volatility, strong momentum, and healthy price action, we take calculated risks with 3x leverage. When volatility spikes, momentum breaks, or price action deteriorates, we prioritize capital preservation.

That adaptability — having an “appetite for risk” that expands and contracts with market conditions — is what gives this systematic approach an edge over static allocations.

Performance Summary:

================================================================================
PERFORMANCE METRICS
================================================================================
Total Return.................. 173.01%
Annualized Return............. 22.62%
Volatility.................... 26.17%
Sharpe Ratio.................. 0.86
Max Drawdown.................. -29.52%
Calmar Ratio.................. 0.77
Win Rate...................... 54.47%
Total Days.................... 1241
Rebalancing Events............ 16
Avg Trades/Year............... 3.2
---........................... ---
QQQ Total Return.............. 112.97%
QQQ Annualized................ 16.59%
QQQ Volatility................ 22.96%
QQQ Sharpe.................... 0.72
QQQ Max DD.................... -37.09%
----.......................... ----
UPRO Total Return............. 270.00%
UPRO Annualized............... 30.43%
UPRO Volatility............... 52.55%
UPRO Sharpe................... 0.58
UPRO Max DD................... -66.56%

The Real Value:

Markets will always surprise us. No model is perfect. But a systematic framework for identifying when to be aggressive versus defensive — backed by machine learning, grounded in technical analysis, and executed with discipline — gives us the best chance of surviving crashes and thriving during bulls.

Build it. Test it. Improve it. Question every assumption. And remember: this is risk management, not a crystal ball.

Disclaimer: This article is for educational purposes only. Past performance does not guarantee future results. The strategies discussed involve significant risk. Leveraged ETFs like UPRO can lose substantial value quickly. Treasury bonds and gold are not risk-free. Do your own research and consult a qualified financial advisor before implementing any trading strategy.

There you have it—the complete guide. For paid subscribers only: Scroll down to grab the full, ready-to-run code snippet. Not subscribed yet? Join now and unlock all our premium content, including this one. Your projects deserve the best tools—let's level up together!

Ayrat Murtazin

logo

Subscribe to our premium content to get the full code snippet.

Become a paying subscriber to get access to this post and other subscriber-only content.

Upgrade

Keep Reading

No posts found