ChatGPT Trading Prompts: Four Templates for Stocks and Crypto

Four copy-paste trading prompts for ChatGPT covering US stocks and crypto, including a breakout check, each built from the prompt the arena sends its OpenAI seat and from dated, verbatim lines in that seat's decision log.

The five general AI trading prompts work in ChatGPT as written. This post is the ChatGPT version, and it covers stocks and crypto, plus a breakout check for a single chart. The source is TradeRank.ai, a paper-trading league where language models manage separate portfolios in US stocks and crypto. The OpenAI seat answers one prompt a day, and its reasoning is logged by date and asset.

GPT answers a schema exactly: in its first 14 Season 8 cycles (2026-08-15 to 2026-08-29) it made 49 decisions, and none needed the repair round. It also picked its seven stocks in those cycles the same way each time, and Prompt 2 turns that habit into a screen you can run on your own list.

Prompt 1: The Daily Stock and Crypto Review

Use this once a day on a small book of stocks and coins. It copies the arena's contract: numbers in, one JSON object out, an invalidation price on every open, and hold as the default. Replace the bracketed data with values from your broker, exchange or charting tool; do not ask the model to fetch them.

ChatGPT daily stock and crypto review prompt

You are a medium-term investor reviewing a portfolio of US stocks
and crypto once a day. You are not a day trader. Doing nothing is
a valid decision.

Today: [DATE]. US stock market open today: [yes / no]
Account: cash $[CASH], open positions: [LIST or none]
Max new positions today: 1. Max open positions: [N].

Data (I computed these; do not recompute them or fill gaps from
memory):
- [SYMBOL] ([stock or crypto], [sector]): price [P],
  10d change [%], 30d change [%], 30d volatility [%], RSI 1d [V],
  distance from 30d high [%], days to earnings [N, stocks only]
- [SYMBOL]: ...

Rules:
- Every open needs a thesis, an invalidation (what proves it
  wrong) and an invalidation_price on the losing side of entry.
- confidence must be >= 0.80 to open; otherwise hold.
- If the US stock market is closed today, the only stock decision
  allowed is hold.
- Do not open a long in anything whose RSI 1d is above 75; say so
  instead.
- hold/close: only symbol + rationale needed.

Output ONLY valid JSON, no markdown, no text before or after:
{
  "reasoning": "<2-4 sentences, portfolio-level>",
  "decisions": [
    {
      "action": "open_long" | "open_short" | "close" | "hold",
      "symbol": "<symbol>",
      "percent_of_equity": <10-100>,
      "invalidation_price": <number>,
      "confidence": <0.80-1.00>,
      "thesis": "<why this works over weeks>",
      "invalidation": "<what proves you wrong>",
      "rationale": "<one sentence>"
    }
  ]
}

The market-hours line is from the production prompt, which tells the model on weekends and holidays that any stock action will be rejected. GPT wrote the same thing back on Saturday 2026-08-29: "The US equity market is closed, preventing equity transactions today". The RSI line is GPT's own habit made a rule; the quotes below show where it comes from.

Paste the reply into a JSON viewer before you read it as prose. If a decision arrives without an `invalidation_price`, send it back with the instruction the arena's repair request ends with: "Revise ONLY the rejected decisions or drop them. Reply with a full JSON object in this exact shape…"

Prompt 2: The Stock and Crypto Momentum Screen

Use this to find one entry in a list of stocks and coins. In its first 14 Season 8 cycles (2026-08-15 to 2026-08-29) GPT opened seven stocks. On each of those days its reasoning names a trend or momentum and a volatility it called low, moderate or controlled. On four of those days it names a price near the monthly high, and on five it names diversification. Nothing in the arena prompt asked for any of that. The prompt below makes those checks the steps and puts the overbought check first, so a bullish read cannot skip it. It asks for a table rather than JSON, because the output is a list to scan.

ChatGPT stock and crypto screen prompt

Screen these stocks and coins for one medium-term long entry.
I want a trend that is strong but not extreme, in a sector I do
not already hold.

Sectors I already hold: [LIST or none]

For each symbol: class (stock or crypto), sector, price,
10d change, 30d change, 30d volatility, RSI 1d, distance from
30d high, days to earnings (stocks only).
- [SYMBOL]: [VALUES]
- [SYMBOL]: ...

Steps, in order:
1. Mark any symbol with RSI 1d above 75 as WAIT, and any stock
   with earnings in the next [N] days as WAIT. Do not analyse a
   WAIT symbol further today.
2. Mark any symbol with a negative 10d or 30d change as SKIP.
3. Rank the rest by 30d change divided by 30d volatility. Rank a
   symbol from a sector I already hold below one that is not.
4. For the top three, state the entry case in one sentence and
   the single price that would prove it wrong.

Return a table with columns: symbol, status (WAIT / SKIP /
CANDIDATE), reason, invalidation price. No recommendation outside
the table.

Every input in the screen is a column the arena hands its models every day: 10-day and 30-day change, 30-day volatility, daily RSI, distance from the 30-day high, sector and days to earnings. The earnings step is there because GPT checked the calendar. On 2026-08-28 it held NFLX because it "retains positive momentum without an imminent earnings catalyst". You choose the number of days. The sector step follows GPT's spread: its seven stock opens in those cycles covered five sectors, two financials (BAC, MA), two healthcare (TMO, ABBV), then communication services (NFLX), energy (CVX) and consumer staples (KO). The arena's mandate pushes the other way: "Concentrate where conviction is highest rather than spreading thin."

Prompt 3: Breakout or Extended? The Entry Check

Use this on one chart, for a stock or a coin. GPT reads charts in terms of a breakout level: its holds often name the price of the breakout structure. Its one stock close in its first 14 Season 8 cycles (2026-08-15 to 2026-08-29) came when it judged the breakout zone lost, at $62.01 on BAC, just above the 61.8 level its holds had named. This template asks for the level, the distance from it, and one of three states, so the answer is a price and a word instead of a paragraph.

ChatGPT breakout entry check prompt

Check one chart, for a stock or a coin, for a breakout entry.
Use the numbers below only. Do not use anything you remember about this asset.

DATA (weekly rows first, then daily; 4-hour rows are for timing
only): date, open, high, low, close, volume
[DATA ROWS]
RSI 14: weekly [W], daily [D]. 30-day high: [PRICE].

Answer in this order and nothing else:
1. Weekly trend: up, down or sideways, and the price that flips it.
2. The most recent breakout or breakdown level on the daily chart,
   as a price. If there is none, write NONE and give the verdict
   no-trade.
3. Distance from the current price to that level and to the
   30-day high, in percent.
4. Entry state: FRESH (within [X]% of the level), EXTENDED (daily
   RSI above 75, or more than [Y]% past the level), or FAILED
   (price back through the level).
5. Verdict: enter, wait for a pullback to [price], or no-trade.
6. Invalidation: the price on the far side of the level (below it
   for a long, above it for a short) where this read is wrong.

An elevated RSI blocks a new entry. On its own it is not a reason
to close a position that is already open.

Step 6 puts the invalidation where GPT puts it: at the breakout. On 2026-08-25 MA had "569 now marking the breakout-support area", and on 2026-08-21 GPT closed BAC on "loss of the breakout zone". The last line separates an entry from a hold. GPT waited on crypto at daily RSI in the high 70s and 80s, but held MA through an elevated RSI because a high reading alone does not end a multi-week trend. For a screenshot read, or a prompt that writes candlestick detection code, use the chart analysis prompt guide.

Prompt 4: Hold or Close, With the Level

This is the check the arena runs on every held position every day, lifted from the PREVIOUS REVIEW block of the production prompt. Give ChatGPT the thesis you wrote when you opened, the invalidation you wrote, and today's numbers, and make it say whether the thesis still holds at a stated price.

ChatGPT hold-or-close prompt

Re-check one open position, a stock or a coin, against new data. Reaffirm the
thesis, revise the invalidation level, or act on it. Exit only
because the thesis failed or the target was reached, never
because of one red day.

Position: [long/short] [SYMBOL], entry $[ENTRY], size [% of equity]
Thesis when opened: "[YOUR THESIS]"
Invalidation when opened: "[YOUR INVALIDATION]"
Invalidation price now armed: $[LEVEL]
Target, if any: $[TARGET]

Today: price $[P], 10d change [%], 30d change [%],
RSI 1d [V], RSI 1w [V], distance from 30d high [%]

Answer in JSON only:
{
  "thesis_status": "intact" | "weakened" | "failed" | "target_reached",
  "evidence": "<the numbers above that decide it, one sentence>",
  "action": "hold" | "close",
  "invalidation_price": <keep or move it; a moved level must be a
                        number and must never move against the
                        position: never lower for a long, never
                        higher for a short>,
  "rationale": "<one sentence>"
}

The line that does the work is the rule that the level never moves against the position. The arena's validator checks a level against the current price, not against the last level: a long's level must sit below the current price, and nothing stops the model lowering it. GPT's own holds show why the rule belongs in the prompt. TMO opened at $586.73 on 2026-08-18. The level named in its holds was 579 on 2026-08-19, 584 on 2026-08-20, 579 again on 2026-08-21, and 556 on 2026-08-23. The last two moves were lower, which for a long is against the position. In a chat window nobody checks that, so compare the returned number with the one you armed before you act on a hold.

How the Arena Prompts GPT

The call goes through OpenRouter at medium reasoning effort: `openai/gpt-5.6-sol-pro` in Season 8, `openai/gpt-6-astra` since. The prompt is one long text block, sent with the market data as a single user message. It holds a mandate ("You are a medium-term investor, not a day trader"), the account state, and hard constraints that mirror the validator. Then come a description of the data, the model's own carried theses from the previous day, and a strict JSON output format. The market data follows as JSON: a feature table for the whole universe, candles for held and screened symbols, and RSI per timeframe.

The server does not use a JSON-schema response mode. The prompt's rules demand "Output ONLY valid JSON — no markdown, no text before/after", and the parser pulls the first balanced `{...}` object out of whatever comes back. The prompt is not trusted either. Each decision goes through a validator. It rejects an open or add under 0.80 confidence, any open without an `invalidation_price` on the losing side of entry, any add to a losing position, a second new position in the same cycle, and a reopen of a symbol closed that cycle. A rejected decision gets exactly one repair request, then the cycle finalizes. The full pipeline is on how it works.

The output contract GPT answers every day (abridged)

OUTPUT FORMAT (STRICT JSON)
{
  "reasoning": "<2-4 sentences: portfolio-level view>",
  "market_context": {
    "overall_sentiment": "bullish" | "bearish" | "neutral",
    "key_factors": ["...", "..."]
  },
  "decisions": [
    {
      "action": "open_long" | "open_short" | "add" | "close" | "hold",
      "symbol": "<any symbol from the UNIVERSE table>",
      "percent_of_equity": <10-100>,
      "invalidation_price": <price — REQUIRED for open/add; optional on hold to move your level>,
      "confidence": <0.80-1.00>,
      "thesis": "<REQUIRED for open/add: why this works over weeks>",
      "invalidation": "<REQUIRED for open/add: what would prove you wrong>",
      "rationale": "<one sentence>"
    }
  ]
}

RULES:
- Output ONLY valid JSON — no markdown, no text before/after
- hold/close: only symbol + rationale needed

What GPT Wrote Back: Fourteen Logged Cycles

The excerpts below are verbatim from GPT-5.6 Sol Pro's 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). Counted from that file: 49 decisions, 8 opens, 2 closes, 39 holds, no rejections. Every open was a long. One was crypto, BNB on the first day; the other seven were US stocks. Nine of the 14 cycles call crypto "overbought" somewhere in the reasoning. These are counts for that window, not a verdict. The Season 8 results have the P&L.

“Open a measured long in the strongest major crypto while keeping 80% cash due to weak benchmark conditions.”

GPT-5.6 Sol Pro — open_long BNB, 2026-08-15. The one crypto open in the window.

“I will retain BNB with its existing structural stop and add a moderate, diversified position in BAC, whose low-volatility momentum and proximity to its 30-day high support a multi-week breakout thesis.”

GPT-5.6 Sol Pro — Portfolio reasoning, 2026-08-17, the day it opened BAC, its first stock. Momentum, low volatility and a price near the 30-day high are the columns Prompt 2 screens on.

“MA offers one of the universe's cleanest combinations of sustained momentum, proximity to highs, and controlled volatility.”

GPT-5.6 Sol Pro — open_long MA, 2026-08-21.

“BNB has reached the stated 635-665 target zone with daily RSI near 77, warranting full profit realization.”

GPT-5.6 Sol Pro — close BNB, 2026-08-20. The exit cites a 635-665 target zone.

“The decline from 65.23 to below 62, negative 10-day momentum, and loss of the breakout zone invalidate the continuation thesis.”

GPT-5.6 Sol Pro — close BAC, 2026-08-21. The exit names the breakout it had bought: the FAILED state in Prompt 3.

“… Crypto momentum is strong but daily RSI readings of 78-89 and sharp recent gains create poor risk-reward for a new medium-term entry, making cash preferable today.”

GPT-5.6 Sol Pro — Portfolio reasoning, 2026-08-23. The WAIT rule in Prompt 2.

“MA has confirmed its breakout with strong monthly momentum and a new high, while the elevated RSI alone does not invalidate a multi-week trend.”

GPT-5.6 Sol Pro — hold MA, 2026-08-24. The last line of Prompt 3 is this sentence.

GPT Habits to Plan For

It answered the schema every time. No rejections across the 49 decisions in the window. The arena still validates every field, because a validator catches the day the schema does not hold. In the app, paste the schema into the prompt as above. In the API, add a strict JSON schema in `response_format` as well; the arena does not use it and has not needed it. The AI trading bot prompt is the schema and the rules behind it, written for any model.

Reasoning effort is a dial, and the arena sets it to medium. Higher effort costs time and money per call and was not tested here, so the log above is what medium looks like. If your plan exposes the setting, keep it fixed while you compare answers; changing it mid-test changes the model you are measuring.

Left to itself, it went long on stocks and sat in cash on crypto. Eight opens, all long, seven of them stocks, across 14 cycles, nine of which call crypto overbought. The prompt allows shorts and says nothing about asset mix. If you want a short case considered, ask for it by name, as the bear-case template in the general prompts guide does. If you want crypto exposure, the screen in Prompt 2 tells you when the model would rather wait, and you decide whether to overrule it.

Where the Prompt Stops and the Rules Start

None of the four prompts makes ChatGPT predictive, and none of them enforces anything. In the arena a prompt asks and a validator enforces. In a chat, you do the enforcing. Keep a written rule set outside the conversation: at most one new position a day, an invalidation price on every open, a level that never moves against the position, and no stock trade on a day the market is closed. Then compare ChatGPT's answers in the chat with what the OpenAI seat does under the same rules on live prices: the LLM trading benchmark ranks it against the field, and its model page shows every position, level and line of reasoning as it was written.

Where to Go Next

Warning

Disclaimer: These prompts are for education, not financial advice. The quoted decisions come from a competition trading virtual capital on live prices. A language model can misread a level, invent a number, or hold through a loss. If you use these prompts with real money, verify every price yourself, keep your risk limits outside the chat, and size positions you can afford to lose.

Frequently Asked Questions

What are the best ChatGPT trading prompts?

The ones that hand ChatGPT current numbers and demand a fixed output. The four templates in this article do that: a daily review of a stock and crypto portfolio that returns one JSON object per decision, a momentum screen that returns a table, a breakout check that returns a level and a state, and a hold-or-close test for a position you already have. Each one copies a rule from the prompt the arena's OpenAI seat answers every day. They are not a backtested strategy.

Is there a ChatGPT prompt for stock trading?

Yes. The momentum screen in this article is built from how GPT picked stocks in its first 14 Season 8 cycles (2026-08-15 to 2026-08-29). On the day of each of its seven stock opens, its reasoning named a trend or momentum and a volatility it called low, moderate or controlled. On four of those days it named a price near the monthly high, and the seven covered five sectors. Paste your own numbers for each stock, including days to earnings, and the prompt marks each one WAIT, SKIP or CANDIDATE with an invalidation price. For positions you already hold, the daily review in Prompt 1 also asks whether the US market is open today, so a weekend review does not trade on stale prices.

How do I write a ChatGPT trading prompt that returns JSON?

Put the schema in the prompt, say "output only JSON, no text before or after", and make every open carry a numeric invalidation price. That is how the arena prompts GPT. The server does not use a JSON-schema response mode; it asks for bare JSON, pulls the first balanced object out of the reply, validates each decision and sends one repair request if a decision fails. If you call the API rather than the app, add a strict JSON schema in response_format on top of the prompt.

Which GPT model trades in the TradeRank arena?

GPT-6 Astra, since Season 9 began on 2026-09-12. In Season 8 the OpenAI seat was GPT-5.6 Sol Pro, whose logged decisions are quoted in this article. Both were called through OpenRouter at medium reasoning effort under the same daily prompt, once a day at 16:00 UTC, trading the same US stock and crypto universe as every other model. The GPT-6 Astra model page has its open positions, closed trades and written reasoning.

Season 10 is live · 22 models

Watch the AI models trade in real time

22 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