Key takeaways · 6
ret21dis the close-to-close return over the trailing 21 trading sessions, about a calendar month of trading. The window entry,P0, is the close exactly 21 bars back, so the field needs 22 bars of history to exist and reads blank on anything younger.- Because
retis measured close to close, a stock that spiked 40% three weeks ago and gave most of it back posts aret21dnowhere near 40%.maxup21dmeasures to the intraday high instead and would show that same spike whether or not it held, the reason this screen filters onret. stage, aliasedwsorweinstein, is the model's read of where a stock sits in the four-phase Weinstein cycle: 1 Basing, 2 Uptrend, 3 Topping, 4 Decline. Of the four, only Stage 2 describes a stock inside an active markup.screen ret21d>=25 stage=2runs against the full universe rather than a capped leaderboard, and the two predicates combine with an automatic AND: a name has to clear the return floor and carry the Stage 2 label at the same time.- A Stage 2 read is the model's current classification, built fresh from the last close; it can flip to a different stage the very next session, so treat it as tonight's read rather than a fixed property of the stock.
- The field needs 22 bars of history to compute, so a stock that listed within the last month has no
ret21dyet to screen on. Like the rest of the terminal, the read is end-of-day and point-in-time.
Every gainers list has the same shape, and the same problem
Type "biggest stock gainers this month" into any search bar and a dozen sites answer with the same list: tickers ranked by how much they are up over the last several weeks, biggest move first. Stock screeners and finance newsletters run some version of it constantly, because raw percentage gain is the easiest number in the market to sort by.
The trouble is what that number leaves out. A stock down eighty percent from its high that bounces thirty percent off the bottom posts the same headline gain as a stock breaking out of a proper base on rising volume. A short squeeze in a broken name and a one-day buyout rumor that faded within the week both clear a twenty-five percent threshold too. All four show up identically on a raw list; only one of them is a trend actually worth following.
What ret21d counts, and what it lets go
ret21d is the close-to-close return over the trailing 21 trading sessions, roughly a calendar month. The window entry, P0, is the close exactly 21 bars ago: last close divided by that entry close, minus one, times a hundred. The field needs 22 bars of history to compute and reads blank on anything younger. ret21d>=25 keeps names up at least a quarter over that stretch.
That close-to-close measurement is a choice. maxup21d answers a related but different question, how far the stock traded above its entry close at any point in the window, measured to the intraday high rather than the close. A stock can print a maxup21d of fifty percent and a ret21d well below it, because the spike arrived mid-window and mostly reversed before the close that matters. ret only counts what held into the last print, which is the point of using it here.
Where stage fits into that same number
stage, aliased ws or weinstein, is the model's read of where a stock sits in the four-phase Weinstein cycle: 1 Basing, 2 Uptrend, 3 Topping, 4 Decline. Stage 2 is the only one of the four describing a stock inside an active markup, the phase a trend-following swing trader is generally trying to buy into. Stage 1 is still building a base, Stage 3 is losing momentum near a top, Stage 4 is in decline.
Two stocks can post an identical ret21d of plus twenty-five percent from opposite places on that cycle. One fell hard for months and bounced a quarter off a beaten-down low, still classified Stage 4. The other was already trending and simply added another leg, classified Stage 2. The return number alone cannot tell them apart; pairing it with stage=2 does.
Same ret21d, two different stages. One path is a bounce inside a downtrend; the other is a trend still running.
Running `screen ret21d>=25 stage=2`
screen filters the whole universe, not the 100-row cap leaders applies, so a name clearing the floor never gets left off the list before you see it. Space-separated predicates all have to hold at once, so ret21d>=25 stage=2 keeps only names clearing both the return floor and the Stage 2 label together.
Add confirmed=1, the stage_confirmed flag, to tighten further: screen ret21d>=25 stage=2 confirmed=1 requires the weekly moving-average fan behind the Stage 2 read to clear a stricter bar than the one that earns the label in the first place, so an unconfirmed Stage 2 is the same structure at a more marginal reading. Read as one sentence, the base command says: of the names up at least a quarter over the last month by closing price, keep the ones already classified as trending rather than basing, topping, or falling.
Typed live: the return floor and the stage filter decoded together, then run against tonight's list.
What the two floors do not decide for you
A Stage 2 label is the model's classification of where a stock sits on the cycle, built from price and moving-average behavior as of the last close. It can flip to Stage 3 the very next session, so the label describes tonight, nothing more.
The window has its own edge too. A stock that listed within the last month has no ret21d to screen on yet, the same blank the terminal shows for any field that needs more history than a young name has behind it. What the two predicates hand you is a shortlist of names up a quarter with an intact trend label attached; whether a given name is early in that leg or stretched thin near the end of it is still a call for the chart. The terminal is a Pro feature at $28 a month, grandfathered: whatever you pay at signup is what you keep paying.
Frequently asked questions
How do I find last month's biggest stock gainers?
Type screen ret21d>=25 stage=2 in the tickerstance terminal. ret21d is the close-to-close return over the trailing 21 trading sessions, about a calendar month, and screen runs the predicate against every ticker in the universe instead of a capped leaderboard, so nothing clearing the floor gets left out.
What is a Stage 2 uptrend?
Stage 2 is one label in the four-phase Weinstein cycle the terminal tracks as stage, aliased ws or weinstein: 1 Basing, 2 Uptrend, 3 Topping, 4 Decline. It describes a stock inside an active markup, the phase a trend-following swing trader is generally trying to buy into rather than a base, a top, or a decline.
Why do monthly gainer lists show falling stocks?
A raw gainers list ranks purely by percentage move, and a dead-cat bounce off a multi-year low or a short squeeze in a broken name can post the same large percentage gain as a stock breaking out of a proper base. Pairing the return with stage=2 filters those out, since a name still inside a Stage 4 decline keeps that label even after a sharp bounce.
What is ret21d?
ret21d divides the last close by the close exactly 21 trading sessions ago, subtracts one, and multiplies by a hundred, a close-to-close return over about a calendar month. The field needs 22 bars of price history to compute and reads blank on anything younger.
How is ret21d different from maxup21d?
ret21d is measured close to close, so it only counts a move that held into the last print. maxup21d measures to the highest intraday high reached during the same window, so it can show a spike that later faded. A screen built to find stocks still trending uses ret, since maxup would let a reversed spike through.
How do I avoid dead-cat bounces in a gainers screen?
Add a stage filter alongside the return floor: screen ret21d>=25 stage=2 keeps only names the model classifies as an ongoing Stage 2 uptrend. A name whose recent gain came while it was still labeled Stage 4, a decline, does not clear the filter, even if the return itself cleared the same threshold.