Skip to main content
Reads

Terminal5 min readUpdated Jul 20, 2026By Sverre Moe

Stocks Up 50 Percent in 3 Months: Why the Ruler You Pick Changes the List

Search "stocks up 50 percent in 3 months" and the list you want feels obvious: the names that ran the hardest over the last quarter. What's missing from the phrase is where you're supposed to measure from and measure to. maxup3m answers it one way, the highest a stock reached against where it started; ret3m answers it another, the close-to-close return. Add an rs floor and the list narrows from "ran hard once" to "ran hard and is still running." The tickerstance terminal screens for exactly that combination.

Key takeaways · 6

  1. maxup3m, aliased mfe3m (maximum favorable excursion), measures the highest HIGH a stock printed over the trailing 63 trading bars against its close 63 bars back. It reads the run to the high, not the close, so it is always greater than or equal to the close-to-close return over the same window.
  2. ret3m is the close-to-close return: what a position held the whole window actually earned. A stock can print a maxup3m of +50 and a ret3m closer to +18, illustratively, if it spiked and then faded before the window closed.
  3. The gap between maxup3m and ret3m is the fade, how much of the best move a stock has already given back by today's close. A wide gap on its own says the peak has passed; it doesn't say the stock is finished moving.
  4. Both fields need 64 sessions of daily bars, the entry close plus 63 sessions of highs, to exist at all. A recently listed stock just hasn't built up that history yet, so the field sits blank until it has.
  5. screen maxup3m>=50 rs>85 runs the whole universe, without the 100-row limit leaders carries, for stocks whose run to the high cleared 50% while rs, the three-month relative-strength percentile, still ranks in the top 15%. Writing both predicates side by side is enough; the terminal treats it as AND.
  6. A big maxup3m paired with a collapsed rs reading is a warning, not a candidate, the run happened and appears to be over. The same maxup3m paired with rs>85 says the strength behind it hasn't evaporated yet.

The list every screener promises doesn't say from where

Type that query and you're picturing a straightforward list: names that ran hardest over the last quarter. The catch sits inside the word "up." Up from where, measured to what. A stock's closing price 63 trading bars ago is one starting line. The highest price it touched at any point since is a different, larger number, and a screen built on one instead of the other hands back two different lists from the same universe on the same night.

The tickerstance terminal keeps both readings as separate fields because they answer different questions. ret3m is the close-to-close return, what a position held the whole window actually earned. maxup3m is the maximum run-up, how far the stock got at its best moment along the way, whether it held there or not. Before screening for "up 50%," the question worth answering first is which of the two you mean.

Measuring to the high, not the close

maxup3m, also written mfe3m (maximum favorable excursion, trader shorthand for the best a position ever looked), fixes an entry point 63 trading bars back at that day's close, then scans every high printed since for the largest gain above it. The math is plain: highest HIGH in the window, divided by the entry close, minus one, times 100. It is measured to the high a stock reached, not to where it happens to sit today.

That distinction produces real gaps. A stock that spiked to a maxup3m of +50 and has since faded to trading only 18% above its entry close, illustratively, still carries a +50% maxup reading; its ret3m for the same stretch reads closer to +18%. The 32-point difference between the two is the fade, how much of the best move has already been given back by today's close. maxup3m can also read negative, for a stock that has never once traded above the close it started the window at.

maxup vs retThe high is not the close
the fade: maxup - retmaxup: +50% vs P0ret: +18% vs P0entry closewindow highfinal closemaxup measures to the high. ret measures to the close. They agree on direction, rarely on size.

maxup3m measures to the high the stock reached; ret3m measures to where it closed. The shaded gap is what got given back.

Ran hard once is not the same as still strong now

A large maxup3m on its own says only that a stock ran hard at some point in the last quarter, not that the run is still going. Plenty of names spike on a single catalyst and print an eye-catching maxup number, then spend the following weeks giving it back: the buyers who chased the top are left holding shares while the stock grinds toward where it started. Screening maxup3m alone surfaces both that stock and the one still climbing, with nothing in the number to tell them apart.

rs (rs_3m_pctile, the three-month relative-strength percentile) answers the second half of the question: is the stock still outperforming right now. Requiring rs>85 keeps only names ranked in the top 15% of the universe, which means whatever demand produced the run-up hasn't evaporated. A maxup3m near 50 paired with a collapsed RS reading reads as a warning more than a candidate, the move happened and it's over. The same maxup paired with rs>85 says the move hasn't rolled over yet.

Running `screen maxup3m>=50 rs>85`

screen maxup3m>=50 rs>85 reads as one sentence once the two floors are separated. screen runs against the whole universe rather than the 100-row cap leaders applies, so nothing clearing the bar gets left off before you see the list. maxup3m>=50 keeps stocks whose highest print over the trailing 63 sessions reached at least 50% above the close 63 sessions back. rs>85 adds the second floor, still in the top 15% of the universe on three-month relative strength right now. Two predicates written side by side both have to hold at once; the terminal ANDs them without needing a connector word.

Add | sort maxup3m and the survivors get ordered by run-up size. Leave off a direction and the terminal defaults to descending, so the stock with the largest maxup reading sits at the top of the list, exactly where the original search was pointing.

Reading the commandThe run-up can outrun the price you remember

Typed live: the command decoded clause by clause, with a worked example of a run-up measured to the high rather than the close.

What the screen can't tell you, and where the chart takes over

The window fields need history before they exist at all. maxup3m needs 64 sessions, the entry close plus 63 sessions of highs to scan, so a stock that listed within the last few months returns blank instead of a number. Read that blank the way any other young-name gap gets read on the terminal: the data hasn't accumulated yet, not a zero.

The read never goes past the close: screen maxup3m>=50 rs>85 finds stocks that ran hard and are still strong right now, and stops there. It doesn't say where to get in, and sizing the position or judging what's left of the move is still the reader's job. That call belongs to the chart. /terminal ships with tickerstance Pro at $28 a month, grandfathered: once you're in, the rate doesn't move.

Frequently asked questions

How do I find stocks that went up 50% in 3 months?

Run screen maxup3m>=50 rs>85 in the tickerstance terminal. maxup3m measures the highest price a stock reached over the trailing 63 sessions against its close 63 sessions back; rs>85 keeps only names still ranked in the top 15% of three-month relative strength, filtering out runs that have already faded.

What is maximum favorable excursion (MFE)?

Maximum favorable excursion, MFE, is trader shorthand for how far a position moved in its favor at its best point, regardless of where it later closed. tickerstance's maxup3m field, aliased mfe3m, computes it over a 63-bar window: the highest HIGH printed, divided by the close 63 bars back, minus one.

What's the difference between maxup3m and ret3m?

ret3m is the close-to-close return over 63 trading bars, what a position held the whole window actually earned. maxup3m measures to the highest HIGH printed anywhere in that window rather than the current close, so it is always greater than or equal to ret3m. A stock that spiked and faded can show a maxup3m of +50 with a ret3m closer to +18, illustratively.

Why is maxup3m blank for some stocks?

The field needs 64 sessions of daily bars, an entry close plus 63 sessions of highs to scan. A stock that listed within the last few months doesn't have that much history yet, so maxup3m returns blank rather than a guessed number.

Why pair maxup3m with rs in a screen?

A large maxup3m only confirms a stock ran hard at some point; it says nothing about whether that strength is still intact. Adding rs>85, the three-month relative-strength percentile, filters for names still outperforming right now, separating a run that's still going from one that already rolled over.

How do I sort by the biggest run-up in the terminal?

Add | sort maxup3m to the end of a command. Leave off a direction and the terminal defaults to descending, so the stock with the largest run-up to its high sits at the top of the list.