How to find tight price ranges with ChatGPT or Claude
Reviewed
Ask it
Using Monk.trade, find stocks near their 52-week highs that are trading in their narrowest range in three months.
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 traded a day. Find stocks whose 10-session high-to-low range, at least 3.5% wide, is the narrowest in 60 sessions, with a close within 5% of the 52-week high.
What you get back
A starting list for research. It does not recommend any trade.
Example · run · data to
| Symbol | Close | 10-day range | From 52w high |
|---|---|---|---|
| NIQ | $19.93 | 7.3% | -3.7% |
Only NIQ matched at the Nov 5 close, and 90 stocks had less than a year of history to check. This strict test often finds just a few stocks; the variations below loosen it and returned 15 and 3 matches.
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 these over the past six months with the 10-day high and low marked.
Any news or 8-K filings on these in the past month?
Any insider buying or selling in these over the past three months?
How did revenue change in their latest quarterly filings?
What counts
A tight range forms when a stock's highs and lows stay close together for two weeks or more. This scan compares each stock's 10-session range with its own ranges over 60 sessions, so a normally jumpy stock and a normally calm one are judged fairly.
The rule Monk.trade uses: common stocks averaging at least $20M traded a day, checked on the last completed session. The 10-session range, from highest high to lowest low, must be at least 3.5% wide and the narrowest in 60 sessions, and the close must be within 5% of the 252-session high.
New to these terms?
- Range
- How far apart the highest and lowest prices were over a stretch of days, shown as a percentage of the low.
- Volatility
- How much a price usually swings. A narrow range means the stock has been unusually calm.
- 52-week high
- The highest price a stock reached in the last year, about 252 trading days.
- Moving average
- The average closing price over the last so many days. When it is rising, the stock is in an uptrend.
- Completed session
- A trading day that has closed, so its prices and volume are final.
Variations
10-session range of 3.5% to 6% above a rising 50-day average
“Using Monk.trade, check the last completed session for common stocks averaging at least $20M traded a day with a 10-session high-to-low range between 3.5% and 6%. Require the close to be above a 50-day SMA that is higher than 10 sessions earlier.”
MonkQL
from stocks let rng = 100 * (highest(high, 10) / lowest(low, 10) - 1) include type == "common" and sma(close * volume, 20)[2] >= 20000000 where rng[1] >= 3.5 and rng[1] <= 6 and close[1] > sma(close, 50)[1] and sma(close, 50)[1] > sma(close, 50)[11] show close[1] as prior_close, rng[1] as range_10d, sma(close, 50)[1] as sma_50 sort rng[1] asc take 520-session range under 8% in $50M+ liquid stocks
“Using Monk.trade, check the last completed session for common stocks averaging at least $50M traded a day with a 20-session range between 3.5% and 8%. Require the close to be within 5% of the 52-week high.”
MonkQL
from stocks let rng = 100 * (highest(high, 20) / lowest(low, 20) - 1) include type == "common" and sma(close * volume, 20)[2] >= 50000000 where rng[1] >= 3.5 and rng[1] <= 8 and close[1] >= 0.95 * highest(high, 252)[1] show close[1] as prior_close, rng[1] as range_20d, 100 * (close[1] / highest(high, 252)[1] - 1) as from_high sort rng[1] asc 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.
- A cash buyout or tender offer can hold a stock just below the deal price near its 52-week high. Deals still awaiting approval can leave ranges above 3.5%. Check recent Form 8-K Item 1.01 and Schedule TO-T filings.
- A narrow range only says the stock has been calm. The price can break out in either direction.
- Stocks with fewer than 252 trading sessions lack a full 52-week comparison and are reported as undecided.
- Ranges can narrow before earnings or regulatory decisions, then jump past nearby prices when the news arrives.
The query
The MonkQL your AI writes
from stocksScan active US stocks on regular daily bars.
let rng = 100 * (highest(high, 10) / lowest(low, 10) - 1)Measure the 10-session high-to-low span as a percentage of the 10-session low.
include type == "common" and sma(close * volume, 20)[2] >= 20000000Keep common stocks averaging at least $20M traded a day over the 20 sessions before the completed bar.
where rng[1] >= 3.5 and rng[1] <= lowest(rng, 60)[1] and close[1] >= 0.95 * highest(high, 252)[1]Use the last completed bar, [1]. Keep ranges at least 3.5% wide that are the narrowest in 60 sessions, with the close within 5% of the 252-session high.
show close[1] as prior_close, rng[1] as range_10d, 100 * (close[1] / highest(high, 252)[1] - 1) as from_highShow the completed close, the 10-session range and the distance from the 52-week high.
sort rng[1] ascPut the narrowest ranges first.
take 5Return up to five stocks.
Ask your AI to show the query it ran. The example came from run 01a1b169-5cd3-7810-8731-5331d6bc9ad0.
Research only. Not investment advice. Read the risk notice