Trade Observations
Stop Guessing and Start Observing

Two Sides of Risk: Using MAE and MFE to Govern Stops

February 1, 2026
#trading-systems#risk-management#machine-learning#futures

The problem with a single stop model

Most stop logic tries to answer one question:

Should I still be in this trade?

But in practice, there are two very different states a trade can be in:

  1. A trade that is in danger
  2. A trade that has earned confidence

Treating both with the same logic leads to:

  • stops that are too loose early
  • stops that are too tight late
  • or worse: model-driven martingale behavior

I wanted something cleaner and more defensible.


Two independent questions

Instead of asking “where should my stop be?”, I split the problem into two independent probability questions:

1. MAE question (loss-side)

At this level of adverse excursion, what is the probability the trade still recovers?

This governs when to exit.

2. MFE question (profit-side)

At this level of favorable excursion, what is the probability the trade ultimately fails?

This governs when a trade has earned protection.

These are not symmetric questions, and they should not share a single threshold.


The data

For each 1-minute snapshot of every trade, I computed:

  • True MAE-to-date (using high/low)
  • True MFE-to-date (using high/low)
  • regime (PA-FIRST, ATM-FIRST)
  • contextual features (ATR, EMA slope, distance to EMA, time-in-trade)
  • final trade outcome (win / loss)

Each snapshot was labeled with the final outcome of the trade.


The models

I trained Gradient Boost classifiers to estimate:

  • P(recover) as a function of MAE-to-date
  • P(fail) as a function of MFE-to-date

Important detail:
I did grouped train/test splits by trade_id to avoid leakage.

The output of the models is not used directly in live trading.
Instead, I derive policy thresholds from the probability curves.


What the models found

For the PA-FIRST regime:

MAE (danger side)

  • At ~9.9 points MAE,
    P(recover) < 0.20

➡️ Once a trade is down ~10 points, recovery odds collapse.

This becomes a model-backed kill switch.


MFE (confidence side)

  • At ~5.1 points MFE,
    P(fail) < 0.20

➡️ Once a trade has made ~5 points, odds of finishing red are very low.

This marks the confidence zone.


Why this matters

These thresholds were learned from independent models, yet they fit together naturally:

ZoneConditionMeaning
Pre-confidenceMFE < 5.1Trade has not earned safety
ConfidenceMFE ≥ 5.1Trade likely finishes green
DangerMAE ≥ 9.9Recovery odds collapse

This gives a non-overlapping, asymmetric framework:

  • You earn flexibility via MFE
  • You lose flexibility via MAE

No single model has to do everything.


How this is used live

In my live system:

  • MAE threshold

    • overrides all optimism
    • forces stop tightening
    • acts as a hard risk governor
  • MFE threshold

    • allows tighter stop locks
    • disables stop loosening
    • does not justify adding size

Crucially:

Stops always dominate adds.


Why not just add size at high MFE?

Because:

  • exit edges are robust
  • add edges are fragile
  • tail losses kill systems

Instead of adding size, I use MFE to change stop behavior, not exposure.


The takeaway

A single stop model tries to answer too many questions.

Splitting the problem into MAE (danger) and MFE (confidence):

  • makes the logic interpretable
  • produces stable thresholds across models
  • aligns with how risk actually behaves

Earn flexibility with MFE.
Lose flexibility with MAE.

That framing has held up far better in replay and live trading than any single “optimal stop” model I’ve tested.


More detailed notebooks and schema designs are linked throughout this site as I continue to evolve this framework.