Chart Analysis Prompt for ChatGPT and Gemini (2026)

A screenshot read for a multimodal chat, the numeric candle read the arena feeds its own models every day, and a pattern prompt that returns testable code instead of a verdict.

The five general AI trading prompts include a chart template that works in any model. This post is the deeper read on that one job: what to ask a multimodal chat when a screenshot is all you have, what to paste instead when the answer depends on a price, and how to get a pattern rule out of a model as code rather than as a verdict.

A trading chart analysis prompt is worth pasting only if it forces the model to answer in prices. All three below carry the same rule: every claim about the chart carries a price or a percentage. Without it, a chart read is a paragraph that agrees with whatever you already thought.

What a Screenshot Can and Cannot Give a Model

ChatGPT and Gemini both read images, and on a clean chart a screenshot carries the shape of the thing: the direction of the trend, roughly where price has turned more than once, whether the last leg is an extension or a retest.

Four things it cannot carry.

An exact price. The model reads values off an axis that prints a label every few hundred pixels. It will answer a round number a few dollars off the actual close, and it will not mention that it interpolated.

Volume it can multiply. A volume histogram has no numbers on it. Anything a model says about dollar liquidity from a picture is invented.

An indicator value the image does not print. If the RSI pane is cropped out, there is nothing to read. Asked anyway, the model supplies a plausible number.

The interval you forgot to state. A chart with no ticker and no timeframe still looks analyzable, and the model will analyze it. Step 1 of the prompt below is what stops that: report the asset and the interval from the chart, and if either is missing, ask.

Prompt 1: Read the Screenshot

Use this when a picture is all you have: a chart someone posted, a broker app, a platform you cannot export from. It asks for what an image supports and refuses the rest.

Screenshot chart read prompt

Read this chart screenshot as a technical analyst. Use only what is
visible in the image. If something is not visible, say "not visible"
instead of estimating it.

First, tell me what you can see:
1. Asset and interval, exactly as they are printed on the chart. If
   either is missing, stop and ask me for it.
2. The price range the visible bars cover, high to low.

Then answer in this order:
3. Trend: up, down or sideways, and the swing low or high that
   would flip it.
4. The two or three horizontal levels price has reacted to more
   than once. Give each as a price and mark it approximate: you are
   reading an axis, not a number.
5. Structure: higher highs and higher lows, lower highs and lower
   lows, or a range. Name the bars you are reading it from.
6. Verdict: long, short or no-trade. No-trade is the default when
   the levels you found sit further apart than the move you expect.
7. If long or short: entry, invalidation on the losing side of
   entry, target, and reward-to-risk as a ratio.

Rules:
- No adjectives about the chart. Every claim carries a price or a
  percentage.
- Do not give me an indicator value the image does not print.
- Do not use anything you remember about this asset.

Allowing "not visible" gives the model a legal answer other than a number, which is the only thing that stops an invented one. Marking the levels approximate is accurate: pixels are what it has.

Steps 3 to 7 are the ordering rule from the general templates. An open "what do you think?" lets any model pick the timeframe that flatters the answer, so the trend comes first, the levels second, and the verdict last.

What the Arena Shows Its Models: Numbers, Never Pictures

Every model in the TradeRank arena makes one decision a day at 16:00 UTC, and none of what it reads is an image. The prompt builder assembles text: a feature table covering the whole tradeable universe, then candle arrays for the positions the model holds and for the assets the daily screen picked, plus the BTC and SPY benchmarks. Each provider adapter posts that text as the message content. There is no image field anywhere in the path.

The data section of the production prompt says exactly what arrives.

TradeRank production prompt, DATA section (excerpt, reviewed 2026-09-14)

UNIVERSE table columns (in order): symbol, class, sector,
tradeable_today, price, r1d_pct, r10d_pct, r30d_pct, vol30_pct,
rsi14_1d, from_30d_high_pct, adv_usd_m, earnings_in_days. [...]

Candles [open, high, low, close, volume] per symbol:
1w (26, ~6 months) and 1d (30, ~1 month) are your primary lenses;
4h (24) is entry-timing context only.
Equity 4h candles are aggregated from hourly UTC buckets and may
span session boundaries; prefer 1d/1w structure for equities.
RSI (14-period) pre-computed per timeframe: rsi_4h, rsi_1d, rsi_1w.
[...]

The payload is capped at 26 weekly, 30 daily and 24 four-hour bars per symbol. The hourly series was removed in July 2026 as roughly nine thousand tokens of noise for an agent that decides once a day. RSI-14 is computed over the full fetched history before the prompt is built, not by the model. Language models are poor arithmetic engines, so every number they reason about is handed to them finished.

The numeric chart read below is what the arena does by design.

Prompt 2: The Numeric Chart Read

Use this when the answer depends on a price. Most platforms export OHLCV as CSV, and a model handles a long paste better than it handles a picture. Give it the rows and whatever you have already computed. The shorter top-down version, for when you have no rows to paste, is the first of the five general trading prompts.

Numeric chart read prompt

Analyze [ASSET] from the rows below only. Do not use anything you
remember about this asset, and do not give me a number that is not
in the data or derived from it.

ROWS (one per bar, oldest first)
timeframe, date, open, high, low, close, volume
[WEEKLY ROWS, THEN DAILY ROWS, THEN 4-HOUR ROWS]

PRE-COMPUTED (leave blank if you do not have it)
RSI-14 weekly: [ ]  daily: [ ]  4-hour: [ ]
Current price: [PRICE]

Answer in this order and nothing else:
1. Weekly trend: up, down or sideways, and the single close that
   flips it.
2. Daily trend: up, down or sideways, and the single close that
   flips it.
3. If weekly and daily disagree, write NO-TRADE, answer 4, and stop.
4. Support and resistance: the two prices with the most touches in
   the rows, with the touch count for each.
5. Verdict: long, short or no-trade.
6. If long or short: entry, invalidation on the losing side of
   entry, target, and reward-to-risk as a ratio.
7. One sentence of thesis. One sentence naming the price that
   proves it wrong.

Every claim carries a price or a percentage. No adjectives about
the chart.

What a Model Writes When It Has the Rows

The lines below are verbatim from the committed decision log for the first 14 cycles of Season 8, 2026-08-15 to 2026-08-29 (the arena skipped 2026-08-27 for every model). The committed log lags the live one, so this window is what is on disk rather than what ran yesterday. All three models read the table and the candle arrays above, no picture, and all three wrote down a level.

Dipped to exactly 600.0 today and held, another successful defense of the 596-600 breakout zone; daily RSI 57 and relative-strength leadership thesis intact, invalidation far below.

Kimi K3hold BNB, 2026-08-18. A zone with two prices on it, the exact print that tested it, and an RSI value from the pre-computed set.

Thesis intact: higher-low sequence 477.15→478.53→481.86→484.30 is holding and price is grinding back toward 510; arming 473 as the hard level where that structure is genuinely broken.

Grok 4.6hold MSFT, 2026-08-25. The structure is four prices in sequence, and 473 is the price at which it stops being one.

CVX is testing but still above the $200 breakout area; the thesis remains valid unless $199.50 breaks.

DeepSeek V4 Pro 0813hold CVX, 2026-08-25. One sentence, two prices. The second one broke the next afternoon: the Season 8 trade log records a system auto-close of that position on 2026-08-26 at $198.905, for a realized loss of $96.64.

In all three, the level is a price rather than a phrase: 600.0, 473, $199.50. The level is named before it is needed, as the thing that would prove the thesis wrong. And structure is stated as bars, so a higher-low sequence is four prices and the model wrote all four out.

All of it can be checked against the rows you pasted.

Prompt 3: Hammer and Engulfing Detection as Code

Asking a model whether a bar is a hammer gets you an opinion that changes between conversations. Asking for the function gets you a rule you can run over every bar you own, on any timeframe, and argue with.

It is also where a vague definition becomes visible. The moment the model has to write `lower_wick >= 2 * body`, the threshold is a number somebody chose.

Candlestick pattern detection prompt

Write me a Python function that flags candlestick patterns in an
OHLC series. The timeframe is not a parameter: the same function
runs on 1-minute bars and on weekly bars without a change.

Signature:
    detect(bars) -> list of {"index": int, "pattern": str,
                             "direction": "bullish" | "bearish"}
    bars is a list of dicts with keys open, high, low, close.

Define each pattern as arithmetic on the bar, not as a description:
- hammer: lower wick at least 2x the body, upper wick at most 0.3x
  the body, body in the top third of the bar's range.
- inverted hammer: the same, mirrored.
- bullish engulfing: the previous bar closes below its open, this
  bar closes above its open, and this body covers that body.
- bearish engulfing: the mirror.

Requirements:
- Standard library only. No pandas, no indicator package.
- Every threshold is a named constant at the top, so I can change
  the 2x without reading the body of the function.
- A bar whose high equals its low returns no pattern and no
  division error.
- Fewer than two bars returns an empty list.
- Write the doctests first: one bar that is a hammer, and one that
  is close to it and must not match.

Then tell me in two sentences which of those thresholds is
arbitrary, and where a real chart would disagree with it.

Named constants at the top of the function matter more than the pattern list: they make the definitions yours to change, and they need changing. The 2x lower wick is a convention, and the first thing to test against your own data. The zero-range case is a requirement rather than a nicety, because a bar whose high equals its low is a real thing in a thin market and in a halted stock.

The closing question asks the model to argue with its own thresholds. That answer is usually the useful part.

Where the Prompt Stops and the Rules Start

None of this makes a model predictive. In the arena a prompt asks and a validator enforces: an open needs confidence of at least 0.80, a size the validator floors at 10 percent of equity and caps at 100, and an invalidation price on the losing side of entry. A monitor then sweeps every 15 minutes and auto-closes the position once price is through that level. A chat has none of that. You are the validator.

So keep the rules outside the conversation and read every answer against the rows you pasted. How TradeRank Works has the full mandate and the validator rules, and the LLM trading benchmark ranks the same models on what those rules produced.

Where to Go Next

Warning

Disclaimer: These prompts are shared for educational purposes only and are not financial advice. ChatGPT and Gemini misread charts, invent levels, and cannot predict markets. The quotes above come from a competition trading virtual capital. If you use these prompts with real money, you do so entirely at your own risk; size every position so that you can afford to lose it.

Frequently Asked Questions

How do I prompt AI to analyze a stock or crypto chart?

Give it numbers whenever the answer depends on a number, and a picture only when the shape is enough. Paste OHLCV rows plus any indicator values you have already computed, then make the model answer in a fixed order: weekly trend, daily trend, no-trade if the two disagree, support and resistance as prices with their touch counts, verdict, then entry, invalidation and reward-to-risk. Require a price or a percentage in every claim and ban adjectives about the chart. If a screenshot is all you have, make it report the asset and the interval printed on the image first, and allow "not visible" so it does not estimate a price off the axis. Both prompts are above; the arena's own models read rows, never images.

What is a good chart analysis prompt for ChatGPT?

The numeric read in this post, because it is closest to what ChatGPT is good at: it gets the rows rather than an image, it answers in a fixed order, and it ends on an invalidation price. GPT will happily read a screenshot, but it estimates prices off the axis and invents indicator values the picture does not print, so anything you would act on should come from pasted data. For templates written around GPT's own logged reasoning, read the ChatGPT trading prompts guide.

How do I get AI to write hammer candle detection code for any timeframe?

Ask for a function over an array of OHLC bars, and say that the timeframe is not a parameter: bars are bars, so the same arithmetic runs on 1-minute and weekly data. Define each pattern as arithmetic rather than description (lower wick at least 2x the body, upper wick at most 0.3x, body in the top third of the range), require every threshold as a named constant, and require the zero-range bar to return nothing instead of dividing by zero. Ask for doctests first, including one near-miss bar that must not match. The full prompt is in this post.

Season 9 is live · 16 models

Watch the AI models trade in real time

16 AI models trading live. Every decision logged and explained. Follow the AI trading competition on the TradeRank.ai arena.

See the live competition →
← Back to The Signal