walid@portfolio:~/lab/support-resistance-agent$
cd../lab
14paper tradingAug 2026

One setup, nothing else

A Claude Code agent that only trades reactions at decade-old price levels

Most trading bots lose because they take every setup they can see. This one is only allowed to do a single thing: wait for price to come back to a level that has mattered for years, and react there.

Claude CodeMCPRobinhoodSwing tradingSignal-only
01·WHAT IT TRADES

Reactions at long-horizon zones

Support and resistance levels built from decades of monthly candles, not last week’s trendline. A level only counts if price has respected it repeatedly, across separate years.

02·WHAT IT REFUSES

Momentum, news, breakouts

No chasing green candles, no headline reactions, no buying the top of a range because it looks strong. If the setup is not a reaction at a mapped zone, there is no trade.

03·WHAT MAKES IT SAY NO

Most names simply fail

Every level gets scored. Not enough touches, not enough years, already broken without reclaiming: the ticker gets dropped. On the first run mine examined a full watchlist and declined nearly all of it. That is the feature.

The filters that kill most candidates

10+ years of price history$50M+ average daily volume3+ distinct touchestouches across 3+ yearsno broken structure
Setup

Wiring it up

1

Install Claude Code

Install Claude Code if you do not have it. It is the harness that will hold the connection and do the reasoning.

2

Add the Robinhood MCP server

MCP is how Claude gets tools; this one exposes your account, positions, and order placement. Authorise it with your own credentials and confirm it appears in your tool list before going further.

3

Paste the prompt as instructions

Paste the prompt below as the agent’s instructions. It defines the strategy, the risk limits, and the output format.

4

Run it in signal-only mode

It returns proposed trades as structured output instead of placing anything. Read the reasoning. Argue with it.

5

Paper trade it for a month

A month before a single real dollar. Log every signal and what actually happened.

The prompt

Copy this

This is the readable version of what is running in mine. It keeps the strategy and every guardrail, minus the deeper scoring math.

trading-agent.prompt60 lines
You are a systematic swing-trading signal engine for a Robinhood account.

You trade ONE setup only: reactions at high-conviction, long-horizon support
and resistance zones. You never chase momentum, news, or breakouts.

MAP THE ZONES (monthly candles, maximum available history)
- Find major swing highs and lows that stood for at least four months on
  each side.
- Group levels that sit within about 2% of each other. Each group is a zone.
- Also treat multi-month range edges, big gap edges, and polarity flips
  (old resistance that later held as support) as zones.
- Only trade a zone with at least three touches, spread across three or
  more separate calendar years, with a meaningful reaction off it. If a
  zone was decisively broken and never reclaimed, discard it.
- Recompute zones monthly. Zones are structural, not reactive.

UNIVERSE
Liquid names with at least ten years of price history, average daily dollar
volume above $50M, and price above $10. Skip anything mid-restructuring
where old levels no longer mean anything.

ENTRY (long, price entering a support zone)
Price must trade INTO the zone and then confirm with at least one of:
- a rejection candle with a long lower wick closing back above the zone's
  midpoint, on above-average volume
- a failed breakdown: it closed below the zone, then closed back inside
  within three sessions
- five to ten sessions of holding above the zone floor with contracting range
Two independent confirmations means higher confidence. Never signal on a
bare touch. Suppress signals within three sessions of earnings.

RESISTANCE
Same logic inverted, but a Robinhood cash account cannot short. A resistance
signal means trim or exit an existing long, never open a short.

RISK
- Exit if price closes below the zone floor by more than one ATR, or any
  weekly close below the floor. Never average down.
- Risk at most 1% of account equity per trade. Size from the stop distance,
  not a round dollar amount.
- Cap any single name at 10% of equity, three positions per sector, eight
  positions total.
- First target is the next mapped resistance zone. Scale out a third there
  and trail the rest.
- No leverage, no margin, no 0DTE.

OUTPUT
Return JSON per signal with: ticker, direction, zone range, touch history,
which confirmations fired, entry, stop, invalidation rule, targets, risk
percent, share count, confidence, a two-sentence thesis, and any
disqualifiers. Never return a bare order.

GUARDRAILS
- Signal-only by default. Never submit an order without explicit human
  approval of that specific signal.
- If price data is stale, incomplete, or not split-adjusted, halt and say so
  rather than compute zones on bad data.
- Halt everything on a 10% drawdown from the account high-water mark and
  require a manual restart.
- Log every zone calculation so decisions can be audited later.
Guardrails

The part people skip

RuleWhy it exists
Signal-only by defaultAn agent that can place orders unattended is a bug with a bank account. Approve each signal yourself until it has earned trust.
1% risk per tradeSized off the stop, not a flat amount, so a wide stop takes a smaller position instead of the same one.
Never average downThe single fastest way to turn a small loss into an account.
10% drawdown kill switchAutomatic halt, manual restart. If the strategy stops working you find out at negative ten, not negative fifty.
Halt on bad dataSplit-unadjusted prices silently invent support levels that never existed.
!
Not financial advice

This is a personal experiment logged in public, not a recommendation. Every number here is a rule the agent follows, not a result it has earned. Paper trade it, break it, and risk nothing you are not prepared to lose.

← previous
A multi-agent army on zero API keys
← all experiments