AI Agent for Prop Firm Challenges · Free Kit

Build an agent for a Propr challenge with ChatGPT.

Use your Dot in ChatGPT to build an agent with Codex. Choose from Propr's crypto, equity, index, commodity and FX markets. The agent places orders on your free trial account when the rules signal a trade, manages stops and exits, and monitors risk between daily runs. The rules, setup steps and build prompt are free.

Trading loses money for most people, and most people who buy a prop challenge do not pass it. This kit is a set of rules and a tool, not advice, and nothing here promises a result. Run it on the free trial first and never buy a challenge with money you need.

Start a free Propr trial

Create your account, then choose Free Trial.

I earn a commission if you later buy a challenge through this link, at no extra cost to you.

Who this is for

This is for traders who use ChatGPT and want to build an agent to attempt a Propr challenge. Pick the Propr markets you want to trade and start on a free trial account.

Dot coordinates the work. Codex writes and tests the code. The Python service places orders and checks risk while it is running. You review its trades and decide whether to buy a challenge.

You don't need to write code. You do need to set up a folder, store your API key, and read the reports. Dot access is still rolling out. If it isn't available in your account, use Codex directly with the same build prompt.

The rules for this prop firm challenge

The system

Daily trend following across a chosen set of Propr markets, including crypto, equities, indices, commodities and FX. The agent trades long and short. Its position sizes and risk checks are set for the challenge below.

The challenge it is built for

Propr's Bronze Classic one-step, a 25,000 USDC account for a $275 fee. Ten percent profit target, three percent daily loss limit measured from the start-of-day balance, six percent maximum drawdown measured from the starting balance and never moving. Both loss limits are checked against equity, including open P&L. No time limit, no minimum trading days. The risk settings below use those limits. If you run a different challenge, change the numbers in the prompt first.

Markets

Choose a watchlist during setup from the markets available to your Propr account. Each market must support API orders and protective stops, with enough reliable daily history to calculate and test the rules. Use the exact market identifiers, including any namespace prefixes. Fix the list before a paid challenge. A familiar ticker alone does not confirm that an instrument is supported.

Timeframe

Completed daily bars matched to each Propr market's underlying Hyperliquid contract. Check each instrument's trading hours and data freshness before placing orders. The agent runs its signal scan once a day, ten minutes after 00:00 UTC. Between scans, the placed stops and a separate risk monitor remain active. The monitor checks equity against both loss limits and applies the daily halt and kill switch.

Entry

Go long when the daily close is above the highest high of the previous 20 days. Go short when the daily close is below the lowest low of the previous 20 days. One position per market, no adding.

Initial stop

Two times the 20-day ATR from the entry price, placed on Propr as a reduce-only stop-market order the moment the entry fills.

Position size

Risk 0.4 percent of the starting balance per trade, which is $100 on the 25,000 account. Size equals that dollar risk divided by two times ATR, in the instrument's order units, adjusted for its contract multiplier and rounded down to its allowed size. Hold at most three positions at once. Their planned stop risk totals 1.2 percent of the starting balance, before fees and slippage. That is not a guarantee against a daily breach. Propr applies leverage automatically. The agent caps total gross position value, including pending entries, at two times current equity by reducing or skipping entries. It never changes leverage in account settings. Most positions will use far less.

Exit

Close a long when the daily close is below the lowest low of the previous 10 days. Close a short when the daily close is above the highest high of the previous 10 days. Close earlier if the stop fires. There is no profit target for an individual trade.

Daily halt

Propr's daily loss limit is checked against equity, including open P&L, using the balance at 00:00 UTC as the day's reference. When equity falls two percent below that start-of-day balance, the agent cancels pending entries and opens nothing more until the next daily run after the reset. Existing stops and exits still apply. The challenge fails if equity touches three percent below the start-of-day balance at any point. Halting new entries leaves a one percent buffer, but open positions can still breach it.

Kill switch

Propr's maximum drawdown counts open positions, so it is measured on equity. If equity, with unrealised losses included, is 4.5 percent below the starting balance, the agent closes every position, cancels every order, writes a halt report, and stops. The challenge fails at six percent, and touching either limit closes the account for good. The agent does not restart itself.

Orders

Use limit entries with a documented price and timeout. Cancel unfilled entries at the timeout. Protect every fill, including partial fills, with a reduce-only stop-market order. Respect each market's trading hours, price increments and size limits. Fees, funding, spreads and slippage vary by instrument and must be included in testing.

Free trial first

Run the agent on Propr's free trial account for thirty days before considering a paid challenge. It submits orders through Propr's API, manages positions and places stops. These are trades in Propr's simulated account. If no entry rule triggers, it waits. The daily report records what it did.

How it behaves

The agent enters after a price breakout and exits on a reversal or stop. Sideways markets can produce repeated losses. Sustained trends give it a chance to hold a winning trade. Propr has no time limit, so there is no need to increase risk to meet a deadline.

Run the agent on a prop firm free trial

This setup uses a Mac or Linux computer. On Windows, use WSL for the Python project. You need Git and Python 3. The computer running the trading service must stay on and connected to the internet.

  1. Open a Propr free trial. Use the trial button at the top of this page. Choose Free Trial in Propr's account size selector. Note the trial account's ID.

  2. Create your API key. In Propr Settings, open Developer and generate a key beginning with pk_live_. Store it securely. Do not paste it into a chat.

  3. Make a local folder for the agent. Run these commands in a terminal. The key stays in a local .env file that Git will ignore.

    Terminal
    mkdir trend-agent && cd trend-agent
    printf '.env\n.venv/\n__pycache__/\n' > .gitignore
    printf 'PROPR_API_KEY=\nCHALLENGE_ACCOUNT_ID=\n' > .env
    chmod 600 .env
  4. Add the key and trial ID privately. Open .env in a local text editor. Fill in PROPR_API_KEY and CHALLENGE_ACCOUNT_ID, then save. Keep the key out of chat messages, screenshots and reports.

  5. Connect your Dot to this computer. In the ChatGPT desktop app, create or open your Dot. In its profile, under Computers, choose Your computer and Allow access. Keep the app open and the computer online while Dot works. If you don't have Dot access, open the trend-agent folder in Codex instead.

  6. Paste the build prompt below. Tell Dot the full path to trend-agent. It can create a local Codex task to build and test the project there. If you're using Codex directly, paste the same prompt into that project. Choose your watchlist when asked. It can include eligible crypto, equity, index, commodity and FX markets. Review the results and any requests for access.

  7. Start trading on the free trial. The prompt asks Codex to verify the trial account, test the controls, then start the risk monitor and daily trading service. When an entry rule triggers, it sends an order to Propr and protects the fill with a stop. Check the orders and positions in Propr as well as the report. A day without a signal means no new trade. Keep the service running on its host.

  8. Read the reports for thirty days. They are saved in reports/. Check trades against the rules and investigate errors before buying a challenge. Stop the service if it behaves differently from the rules.

Dot setup follows OpenAI’s computer access guide.

The ChatGPT / Dot build prompt

Paste this into your Dot conversation, or into Codex with the project folder open. Give it the folder path, not your API key.

ChatGPT / Dot build prompt
Help me build a Python trading agent to attempt a Propr prop firm challenge.
Build and start automated trading on my verified free trial account.
Passing a challenge is the aim, not a promise. Orders must reach Propr; a
report-only or local paper-trading implementation is not the deliverable.

If you are my Dot in ChatGPT, coordinate this work in a local Codex task on
my connected computer. Use the trend-agent folder whose full path I provide.
Send the task this complete specification, inspect its tests and reports,
and bring back the results. If you are Codex, build directly in that folder.
If the folder or computer is unavailable, ask me to connect it before starting.
Do not substitute an ephemeral cloud workspace for the trading host.

Dot coordinates the build and can help review reports. Trading decisions and
risk checks must be deterministic Python code. Do not make orders depend on
an LLM call, a chat session, or a Dot follow-up schedule. Explain separately
how to run and stop the Python service and any optional report-review task.

Setup:
- Inspect the project folder before changing it. Use Python 3 and a local
  .venv. Get the official SDK from https://github.com/XBorgLabs/propr-docs.
  Copy python/propr_sdk.py into this project and install its documented
  dependencies in .venv. Do not overwrite my .env.
- Read PROPR_API_KEY and CHALLENGE_ACCOUNT_ID from .env at runtime. Never
  display the key or send it to a chat, report, or a delegated task message.
- Read Propr's current rulebook and SDK documentation. If either conflicts
  with the specification below, report the exact conflict before proceeding.

You are building a daily trend-following trading agent for a Propr prop-firm
account. Propr executes on Hyperliquid perpetuals through its own REST API.

Two sources, two jobs:
- Market data comes from Hyperliquid's public info API (the candleSnapshot
  request, daily interval), which needs no key. Use it for all history and
  all daily closes. Resolve each instrument to its exact native or HIP-3
  namespace and contract. Do not substitute a spot feed or strip prefixes.
- Orders, positions and account state go through the Propr API using the
  propr_sdk.py file in this folder and the PROPR_API_KEY in .env. Read
  propr_sdk.py and the docs it links before writing code, so you use the real
  method names, the real order fields (asset, quantity, price, triggerPrice,
  side, positionSide, reduceOnly, intentId as a ULID) and the real order
  types (market, limit, stop_market, stop_limit). Never guess an argument.

The challenge rules the agent must monitor and enforce:
- Daily loss limit 3% of the start-of-day balance, checked against EQUITY
  including unrealised P&L. The balance reference resets at 00:00 UTC.
  The agent halts new entries and cancels pending entry orders when equity
  is 2% below the start-of-day balance. Latch this halt until the next
  daily run after the reset. Existing stops and exits still apply.
- Maximum drawdown 6% from the starting balance, static, measured on EQUITY
  including unrealised P&L on open positions. The agent kills itself when
  equity is 4.5% below the starting balance.
- Touching either limit closes the account permanently, even intraday.
  Stops and risk checks cannot guarantee that a limit will never be hit.
- Profit target 10%. No time limit.

The trading rules, which you must implement exactly and must not "improve":
Markets: do not hard-code a crypto-only universe or a fixed market count.
During setup, ask me to choose a watchlist from the markets available on my
Propr account across crypto, equities, indices, commodities and FX. Verify
API order and stop support, exact identifiers, underlying data mappings,
contract multipliers, settlement currency, tick/size limits and trading hours.
Save these in markets.json. Do not guess symbols or silently replace an
unsupported market. Report exclusions. Freeze the list for a paid challenge.
Require at least 60 complete daily bars per market for indicators and an
initial historical test. Fetch up to 400 available bars, and report the actual
history used; short history is not evidence of robustness. Do not fabricate
missing bars. Skip entries on stale prices, market closures or incomplete bars.
Use only completed bars and exclude the signal bar from lookback windows.
If more signals qualify than slots, rank by previous completed day's USD
notional volume descending, then exact market identifier. Apply one shared
portfolio risk budget across all asset classes.
Timeframe: daily bars. The signal scan runs once a day at 00:10 UTC.
Entry long: daily close above the highest high of the previous 20 days.
Entry short: daily close below the lowest low of the previous 20 days.
One position per market. No adding to positions.
Initial stop: 2 x ATR(20) from entry, placed on Propr immediately after the
entry fills as a reduce-only stop_market order.
Size: risk 0.4% of the STARTING balance per trade. Convert risk dollars /
(2 x ATR) to order units using verified contract and currency metadata.
Round down to the permitted size, and skip if below the minimum. Maximum three open positions. Propr applies leverage automatically;
do not attempt to change it. Cap total gross notional across positions and
pending entries at 2 x current equity by reducing or skipping new entries.
Exit long: daily close below the lowest low of the previous 10 days.
Exit short: daily close above the highest high of the previous 10 days.
Or the stop fires, whichever first. No profit targets.
Daily halt: equity 2% below the start-of-day balance means cancel pending
entries and open nothing until the next daily run after the reset.
Existing stops and exits still apply.
Kill switch: equity (including unrealised P&L) 4.5% below the starting
balance means close every position, cancel every order, write
reports/HALT.md explaining the state, and exit. Do not restart.

Build it in this folder as a small Python project:
1. data.py resolves each configured market to Hyperliquid's public data,
   fetches up to 400 completed daily candles and caches them. Enforce the
   minimum history and session/freshness checks above.
2. strategy.py holds the rules above as pure functions with no side effects,
   each with a docstring quoting the rule it implements.
3. backtest.py runs the rules over the history with instrument-specific
   fees, funding and slippage assumptions, explicitly documented,
   simulates the challenge rules (daily limit, static drawdown, target), and
   writes backtest.md with equity curve data, win rate, average win, average
   loss, max drawdown, time to target when reached, number of trades per market,
   the longest flat stretch, and how often the simulated challenge would have
   failed and why. Include a plain-language paragraph that says what the
   numbers mean and what they do not prove. Both loss limits use equity.
   Daily bars cannot establish the order of intraday prices. State that
   limitation and do not report daily-close checks as proof of no breach.
4. run_daily.py performs one scan: refresh data, read account state and
   positions from Propr, compute signals, apply the daily halt and the kill
   switch, then place or cancel orders through the Propr API. Implement real
   trial-account order execution, fill reconciliation and protective stops.
   Use the documented positionId or grouped-order mechanism for stops.
   Protect partial fills, use idempotent intents and reconcile uncertain
   responses before retrying. If a protective stop cannot be confirmed,
   close the affected position and halt new entries. Never force a trade
   just to make a test or demonstration show activity. It writes
   reports/YYYY-MM-DD.md with every signal, every order, the reason for each,
   equity, balance, start-of-day balance, realised P&L for the day, open
   positions, and distance to each stop and to each challenge limit, using
   Propr's own definitions (both loss limits checked against equity).
5. Read CHALLENGE_ACCOUNT_ID from .env. During setup, verify through Propr
   that it identifies my free trial. Never select an active account
   automatically. If its type cannot be verified, stop and ask. Paid
   challenges require an explicit account ID change and separate opt-in.
   Print the account ID and trial or paid status on every run.
6. A cron or launchd entry for 00:10 UTC that runs run_daily.py, and a README
   that explains how to read the daily report, how to switch accounts, and
   how to stop the agent.
7. risk_monitor.py stays running between daily scans. Use Propr's documented
   account updates to check both equity limits, apply the daily halt and
   kill switch, and log every action. Share persistent halt state and order
   coordination with run_daily.py so they cannot duplicate or race orders.
   Block new entries if the monitor or account data is unavailable. Document
   how to start and stop it. A kill-switch halt must survive restarts and
   require manual intervention.

Constraints:
- Never put the API key in any file other than .env, and never commit .env.
- Use Hyperliquid for public market data only. Limit Propr access to the
  documented account and profile reads needed for setup, plus order,
  position and trade endpoints. Never purchase a challenge, request a payout
  or transfer funds.
- Log everything you do to reports/ in plain English.
- Test signal lookbacks, sizing, both equity limits, halt persistence,
  trial-account selection, market identifiers, contract sizing, stale data,
  session closures, partial fills and order coordination using simulated
  responses.
- Run the backtest and verify the selected account is a free trial before
  any orders. Stop on failed tests, unknown account type or missing setup.
  Once these checks pass, start the risk monitor, perform one trading run
  against that verified trial and enable the daily schedule. Submit entries
  only when the rules qualify; no signal is a valid no-trade result.
  Show the service status, selected trial account, backtest and today's
  report. Include Propr order IDs and stop status for any submitted orders.
  State clearly whether a fill occurred or the service is waiting for a
  signal. Do not claim execution was tested if no order filled.
- Support an optional PROPR_BUILDER_CODE setting, empty by default. When
  supplied, send it as X-Builder-Code on Propr API requests only. Never
  invent a code, confuse it with X-API-Key, or add it to Hyperliquid requests.
  Document this as usage attribution, not a confirmed commission entitlement.
  Keep the setting visible and removable; it must not change trading rules.

From the free trial to a real challenge

After thirty days on the free trial, review the reports and the backtest's challenge failures. If you decide to pay for a challenge, these rules are set for the Bronze Classic one-step.

Set the paid account's ID in the agent. Check that the total exposure cap is two times equity. Run one scan by hand and read the report before enabling the schedule. Keep the risk monitor running between scans.

Start a Propr challenge

I earn a commission when you buy a Propr challenge through this link. It costs you nothing and it is how this kit stays free. Propr did not write or review the rules. Propr's accounts, including funded ones, are simulated. The payouts are real USDC.

What to expect

The agent can lose money and fail a challenge. A backtest shows how the rules behaved on historical data. It does not establish a win rate or tell you when the agent will reach the profit target.

Use the free trial to check that orders, stops and risk controls work as intended. Read the daily reports, including the losing trades. Thirty days is a starting point for testing, not proof that the agent will pass a paid challenge.

This page provides a build specification. The ChatGPT and Dot workflow still needs testing with a Propr trial account; it is not a verified integration.

Build the agent with me in a weekend.

Join me live on Saturday, October 24, and Sunday, October 25, from 11am to 1pm Eastern each day.

We'll use ChatGPT and Codex to build the agent from an empty folder. If you have Dot access, we'll use it to coordinate the build. You'll connect your copy to a Propr trial account with your own API key and enable it to place trades when its rules trigger.

You get the recordings, the finished code repository, and access to a private group for the first thirty days of your own challenge.

The course costs $197. It's a small group. If you're the only person who books, we'll work one on one. You can get a full refund any time before the first session.

Book a seat · $197

The full kit above is free. The course gives you time to build it with me and ask questions.