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 neededWhat 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.”
“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.”
“MA offers one of the universe's cleanest combinations of sustained momentum, proximity to highs, and controlled volatility.”
“BNB has reached the stated 635-665 target zone with daily RSI near 77, warranting full profit realization.”
“The decline from 65.23 to below 62, negative 10-day momentum, and loss of the breakout zone invalidate the continuation thesis.”
“… 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.”
“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 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
- AI Trading Prompts: 5 Copy-Paste Templates — the general chart, sizing, exit, bear-case and portfolio prompts these four build on.
- GPT-6 Astra model page — the OpenAI seat's live positions, closed trades and reasoning history.
- Chart Analysis Prompt for ChatGPT and Gemini — the screenshot read, the numeric candle read and a candlestick detection prompt.
- LLM trading benchmark — where the OpenAI seat ranks against the field on the same prices and rules.
- ChatGPT vs Claude for trading — the head-to-head record across shared seasons.
- How TradeRank works — the prompt, the data, the validator and the invalidation monitor in full.
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.