Key takeaways · 6
- Traders journal MFE (maximum favorable excursion) and MAE (maximum adverse excursion) per trade. The same pair exists per stock, per window:
maxup3mandmaxdd3m, aliasedmfe3mandmae3min trader vocabulary. maxup3mcompares the highest HIGH inside the trailing 63 bars against the close from 63 bars ago, the window's entry price, not the close-to-close return, so it can read higher than the stock's actual gain.maxdd3mtracks a running peak seeded at that same entry close and reports the worst peak-to-trough slide anywhere in the window. It always reads at or below zero.- Read together, the pair sorts into four shapes: big run with a shallow slide, big run with a deep slide, small run with a shallow slide, small run with a deep slide. Only the first is worth study time.
- That first quadrant is what
screen maxup3m>=40 maxdd3m>-15 | select ticker maxup3m maxdd3m rsreturns: the entire universe checked against both floors, cut down to four named columns. - Both fields need 64 bars of history to exist, the window plus the entry bar, so a stock younger than about three months just doesn't have a reading yet.
A trading journal already keeps this pair
A disciplined trade journal tracks more than entry, exit, and P&L. Two more numbers matter: how far the position moved in your favor before you got out, maximum favorable excursion, and how far it moved against you before it worked, maximum adverse excursion. A trade closed for a small gain that never printed heat and one closed for the same gain after round-tripping through a 15% drawdown are different trades wearing an identical P&L line.
The same pair exists independent of any trade you actually took. Over any trailing window, a stock has its own best-case run and worst-case slide, whether you were in the name or just watching it. tickerstance carries that pair as maxup and maxdd, and the terminal spells them the way a journal would too: mfe and mae are aliases for the same two fields.
The two rulers, exactly
Both fields anchor to the same starting point: the close exactly N bars back, the window's entry price. For a 3-month window that's the close 63 sessions ago, and the field needs one bar more than that, 64 total, to exist at all. maxup3m then compares the highest HIGH printed anywhere inside those 63 bars against that entry close. That's a different question than the close-to-close return: a stock can print maxup3m of +50 and still be up only 20% today, because the high arrived mid-window and the stock gave part of it back before now.
maxdd3m measures the opposite extreme, and it does it with memory. A running peak starts at the entry close and ratchets upward with every bar's high; the drawdown is measured from that peak down to each bar's low, and the worst reading in the window is what gets reported. The number is always at or below zero. A reading of -8 means the worst peak-to-trough slide anywhere in the window was 8%, even on a stock that never closed below its entry price. It catches the pullback a close-only view would miss entirely.
Four shapes, one worth a screen
Plot the two numbers against each other and four shapes fall out. Big run-up with a shallow slide is the strong-and-orderly profile: a stock that proved it could move and rarely gave much back on the way. Big run-up with a deep slide made the same case for how far it can travel, but a holder paid for it in stress, the kind of ride that shakes out anyone without a plan for the drawdown.
Small run-up with a shallow slide is quiet, which cuts two ways: maybe it's early, coiling before the move shows up, or maybe it's just dead, going nowhere without volatility in either direction. Small run-up with a deep slide is the shape to skip, a stock that took a real hit and has nothing to show for it. screen maxup3m>=40 maxdd3m>-15 keeps only the first quadrant, big run-up, shallow slide, and drops the other three before you ever see the list.
Run-up against drawdown sorts into four shapes. The screen keeps only the top-left quadrant: a big run-up that never gave back much on the way.
Running the screen
screen maxup3m>=40 maxdd3m>-15 | select ticker maxup3m maxdd3m rs filters the whole universe, not the row cap a leaderboard command applies, for names that ran up at least 40% at the high while never sliding more than 15% off their own peak, both measured over the trailing 63 bars. Writing the two predicates next to each other is enough, the screen requires both; maxdd3m>-15 reads the way a shallow-drawdown floor always does here, greater than -15 means closer to zero, so it's the shallow side of the line, not the deep side.
The same command in journaling vocabulary is screen mfe3m>=40 mae3m>-15, the alias spelling for anyone who thinks in trade-log terms first. | select ticker maxup3m maxdd3m rs then narrows the board to four named columns, space or comma separated works the same way, so the shape reads at a glance instead of getting buried in the rest of the row. Adding rs, the three-month relative-strength percentile, keeps current outperformance in view next to the window's history: a stock can have posted the right shape three months ago and be fading right now, and the extra column is what catches that.
Typed live: the run-up floor, the drawdown floor, and the select pipe that narrows the board to four columns.
What the shape does not tell you
A quadrant built from 63 bars is a record, not a forecast. The stock that ran 40% and only gave back 12% over the last quarter proved it could do that once; nothing in maxup3m or maxdd3m promises the next 63 bars look the same. Read it as one data point about a stock's temperament under the conditions it already traded through, not a guarantee those conditions repeat.
Both fields need the full 64 bars of history to compute, so a stock that IPO'd within the last three months returns a blank rather than a number, the same honesty rule a blank Power reading follows on a young name. Everything here is end-of-day and point-in-time; the terminal reports the shape, never what to do with it. The terminal itself is a Pro feature, $28 a month, grandfathered for anyone who signs up now.
Frequently asked questions
What is MFE and MAE in trading?
MFE, maximum favorable excursion, is how far a trade moved in your favor before you exited. MAE, maximum adverse excursion, is how far it moved against you before it worked. tickerstance applies the same pair to a stock over any trailing window rather than a specific trade, as maxup and maxdd, aliased mfe and mae.
How do I screen stocks by risk and reward?
screen maxup3m>=40 maxdd3m>-15 | select ticker maxup3m maxdd3m rs runs across every ticker in the universe, keeping names with a 40%-plus run-up whose deepest slide off the peak stayed inside 15%, both over the trailing 63 bars, then trims the board to four columns so the shape is easy to read.
What does the select command do in the tickerstance terminal?
| select narrows a screen's output to named columns, space or comma separated. screen ... | select ticker maxup3m maxdd3m rs drops every column except those four, so a wide result set reads at a glance instead of scrolling past fields you didn't ask for. Unknown column names are silently dropped rather than erroring.
What is maxup3m?
maxup3m, aliased mfe3m, compares the highest HIGH printed anywhere in the trailing 63 bars against the close from 63 bars ago, the window's entry price. It measures to the intraday high rather than the close, so it can read higher than the stock's actual close-to-close gain over the same stretch.
What is maxdd3m?
maxdd3m, aliased mae3m, tracks a running peak seeded at the close from 63 bars ago and measures the worst peak-to-trough decline anywhere in that window, always at or below zero. A reading of -8 means the deepest slide from a running high was 8%, even if the stock never closed below its entry price.
Why are maxup3m and maxdd3m blank for some stocks?
Both fields need one bar more than the window itself, 64 sessions for a 3-month read, to fix an entry close and cover a full trailing window. A stock trading for less than about three months, a recent IPO, simply doesn't have that history yet, so the terminal leaves the field blank instead of forcing a value.