How to find stocks in strong uptrends with ChatGPT or Claude
Reviewed
Ask it
Using Monk.trade, find liquid stocks in strong uptrends: above rising 50, 150 and 200-day averages, near their 52-week highs. Rank them by 12-month return.
Opens with the question filled in; nothing is sent until you press send. In ChatGPT, you can also type @ and choose Monk.trade. Not connected? Help
Precise version: the same rule every time
Using Monk.trade, check the last completed daily session for common stocks averaging at least $20M in daily trading value. Keep stocks whose close is above the 50-day simple moving average, with the 50-day above the 150-day and the 150-day above the 200-day, and the 200-day higher than a month (21 sessions) earlier. Require the close to be at least 30% above the 52-week low and within 25% of the 52-week high. Rank by 12-month price return and show the five strongest.
What you get back
A starting list for research. It does not recommend any trade.
Example · run · data to
| Symbol | Close | 12-mo return | From high |
|---|---|---|---|
| MRNA | $241.46 | +917% | -7.5% |
| CDNA | $76.33 | +426% | -16.0% |
| KOD | $91.02 | +403% | -12.5% |
| SYRE | $96.59 | +320% | -12.3% |
| PACS | $50.20 | +303% | -2.9% |
298 stocks passed at the Nov 5 close, and 89 lacked enough history to decide. The leaders are mostly drug developers, and MRNA and KOD each nearly tripled in a single session in the past three months. MRNA and SYRE each filed an 8-K with item 1.01 in the last 60 sessions, so the pending-deal variation leaves them out.
US stocks, ETFs and futures. The free plan runs 20 queries a day on daily bars; Pro adds intraday.
Then ask
Paste these into the same chat, after the first answer, so your AI knows which results you mean.
Chart the top three with their 50, 150 and 200-day averages.
How did each company’s revenue change from a year earlier in its latest report?
Did any of these file an 8-K with item 1.01 or receive a tender offer in the last 60 sessions?
Any insider buying in these over the past three months?
What counts
A trend template is a checklist growth traders use to keep only stocks already in a strong, orderly uptrend. The price sits above its 50, 150 and 200-day averages, those averages are stacked in that order, the 200-day average is rising, and the price is well off its yearly low and near its yearly high. Ranking the survivors by 12-month return stands in for relative strength.
The rule Monk.trade uses: common stocks averaging at least $20M traded a day, checked on the last completed session. The close must be above the 50-day average, the 50-day above the 150-day and the 150-day above the 200-day, with the 200-day higher than 21 sessions earlier. The close must be at least 30% above the 52-week low and no more than 25% below the 52-week high.
New to these terms?
- Moving average
- The average closing price over the last so many days. A 200-day average shows the long trend; a 50-day average shows the recent one.
- Stacked averages
- The shorter averages sit above the longer ones (50 above 150 above 200). That order appears when prices have been rising for months.
- 52-week high and low
- The highest and lowest prices reached in the past year, measured here as 252 trading days.
- Relative strength
- How a stock has performed compared with other stocks. This page uses the plain 12-month price return as a stand-in.
- Completed session
- A trading day that has closed, so its prices are final.
Variations
Within 10% of the 52-week high
“Using Monk.trade, run the same trend template on the last completed session, but require the close to be within 10% of the 52-week high. Keep common stocks and the $20M average daily trading value floor, and rank by 12-month return.”
MonkQL
from stocks let s50 = sma(close, 50) let s150 = sma(close, 150) let s200 = sma(close, 200) include type == "common" and sma(close * volume, 20)[2] >= 20000000 where close[1] > s50[1] and s50[1] > s150[1] and s150[1] > s200[1] and s200[1] > s200[22] and close[1] >= 1.3 * lowest(low, 252)[1] and close[1] >= 0.9 * highest(high, 252)[1] show close[1] as prior_close, 100 * (close[1] / close[253] - 1) as return_12m unit percent, 100 * (close[1] / highest(high, 252)[1] - 1) as from_high unit percent sort return_12m desc take 5Leave out pending deals
“Using Monk.trade, run the same trend template on the last completed session, but leave out stocks that filed an 8-K with item 1.01 (a material agreement, such as a merger agreement) or were the subject of a tender offer filing in the last 60 sessions. Rank by 12-month return.”
MonkQL
from stocks let s50 = sma(close, 50) let s150 = sma(close, 150) let s200 = sma(close, 200) include type == "common" and sma(close * volume, 20)[2] >= 20000000 where close[1] > s50[1] and s50[1] > s150[1] and s150[1] > s200[1] and s200[1] > s200[22] and close[1] >= 1.3 * lowest(low, 252)[1] and close[1] >= 0.75 * highest(high, 252)[1] and not filings(form = "8-k", item = "1.01", window = 60) and not filings(form = "sc to-t", window = 60) show close[1] as prior_close, 100 * (close[1] / close[253] - 1) as return_12m unit percent, 100 * (close[1] / highest(high, 252)[1] - 1) as from_high unit percent sort return_12m desc take 5Rank by 6-month return
“Using Monk.trade, run the same trend template on the last completed session, but rank the matches by 6-month price return instead of 12-month.”
MonkQL
from stocks let s50 = sma(close, 50) let s150 = sma(close, 150) let s200 = sma(close, 200) include type == "common" and sma(close * volume, 20)[2] >= 20000000 where close[1] > s50[1] and s50[1] > s150[1] and s150[1] > s200[1] and s200[1] > s200[22] and close[1] >= 1.3 * lowest(low, 252)[1] and close[1] >= 0.75 * highest(high, 252)[1] show close[1] as prior_close, 100 * (close[1] / close[127] - 1) as return_6m unit percent, 100 * (close[1] / highest(high, 252)[1] - 1) as from_high unit percent sort return_6m desc take 5
Check before you act
- Nothing on this page is a signal to buy or sell. Prices can keep moving against you, and you can lose money.
- The query reads the bar before the newest, which is the last completed session while the market is open. Before the open or after the close the newest bar is already complete, so the query reads the session before it. This example ran during the Nov 6 session and read Nov 5. Ask your AI to check the newest session instead.
- The 12-month return is the price change only. Prices account for stock splits but not dividends, and it is not a published relative strength rating.
- Stocks need about 253 sessions of history for the 12-month return and the rising 200-day check. Newer listings are reported as undecided.
- A ranking by return favors stocks that jumped on one piece of news, such as trial results or a buyout offer. Check the chart and recent filings before reading a match as a steady trend.
- Item 1.01 covers any material agreement, including loans and licensing deals, so the pending-deal variation also drops some stocks with no buyout.
The query
The MonkQL your AI writes
from stocksScan active US stocks on regular daily bars.
let s50 = sma(close, 50)Name the 50-session simple moving average of the close.
let s150 = sma(close, 150)Name the 150-session average.
let s200 = sma(close, 200)Name the 200-session average.
include type == "common" and sma(close * volume, 20)[2] >= 20000000Keep common stocks with at least $20M in average daily trading value over the 20 sessions before the completed bar.
where close[1] > s50[1] and s50[1] > s150[1] and s150[1] > s200[1] and s200[1] > s200[22] and close[1] >= 1.3 * lowest(low, 252)[1] and close[1] >= 0.75 * highest(high, 252)[1]Use the last completed bar, [1]. The close must be above the 50-day, the averages stacked 50 over 150 over 200, and the 200-day higher than 21 sessions earlier. The close must be at least 30% above the 52-week low and within 25% of the 52-week high.
show close[1] as prior_close, 100 * (close[1] / close[253] - 1) as return_12m unit percent, 100 * (close[1] / highest(high, 252)[1] - 1) as from_high unit percentShow the completed close, the price change over 252 sessions and the distance below the 52-week high.
sort return_12m descRank by 12-month return, strongest first.
take 5Return up to five stocks.
Ask your AI to show the query it ran. The example came from run 01a1b1ea-2e68-7aa3-9711-a8fb61da25b3.
Research only. Not investment advice. Read the risk notice