Every rule, every loop, every guardrail.
This page is long on purpose. It walks through the simulator, the live trade gate, the drawdown math, the evaluation order, the funded payout flow, the copy-trading sizing model, the resolution sweep, and the loops that keep the whole thing honest. If you want the short version, three steps live on the homepage.
Estimate only. You keep 70% of every dollar of profit, no ceiling. Annualized assumes a steady monthly edge.
8% daily / 20% total drawdown. Same rules every tier.
On this page · 15 sections
What you’re actually buying
We’re a prop firm for prediction markets. You pay a one-time fee, prove you can grow a sim account by 20% without blowing it up, and we put you on a real funded account where you keep 70–80% of every dollar of profit. No subscription. No monthly fee. No hidden re-billing.
Most “trading” products either sell you a course or sell you a chart. We sell you capital. The challenge fee buys you a stress-tested simulator wired to live Kalshi and Polymarket markets. Pass the test once and every fill from then on uses our money against the real order book. The fee is the audition. The funded account is the job.
Everything below is exactly how the system works. Same engine in the simulator and in funded mode, same trade gate, same drawdown math, same evaluation. The only difference between sim and funded is whose dollars are on the line.
Numbers update with the tier you select on /pricing.
Sign up, pay the fee, start trading
The path from landing page to your first sim trade is four steps and roughly five minutes. Nothing happens behind the scenes you can’t see.
- 01Create an account
Email + password through Clerk. We verify the email so the recovery path actually works. No social-login dark patterns.
- 02Pick a tier and any add-ons
Apex is $999 for a $100,000 funded bankroll on pass. Add-ons (Double Up, Higher Profit Split, Bi-Weekly Payouts, etc.) are priced as a percentage of the tier fee and stack.
- 03Pay through Stripe Checkout
Card or Apple Pay. Stripe Checkout is hosted by Stripe, so your card details never touch our servers. The webhook flips your account to challenge-active the instant the charge confirms.
- 04Pick a challenge type
Standard 30-day, Express 7-day, or Blitz 48-hour. Different time windows, same drawdown rules. Choose based on how fast you want to be evaluated, not how easy the rules are. They are identical.
The simulator is not a toy
When you start a challenge, we open a fresh row in our database for you with a starting cash balance equal to $100,000. That number is your sim bankroll. Every trade executes against the live Kalshi/Polymarket order book: same prices a real trader sees, same fills, same fees, same slippage.
The simulator is built on the same engine that will eventually move real money on the funded account. It is not a delayed quote stream, not a synthetic market, not a “trading game.” If you trade a $100 position in the sim and the market moves three cents in your favour, you make exactly the same dollar number you would make on a $100 funded position. The only thing different is which row of the database the cash balance lives in.
What we wire up at the moment you click “start challenge”:
- cash_balance = $100,000 (your starting capital)
- current_equity = cash + market value of any open positions (always)
- high_water_mark = current_equity (the peak we measure total drawdown against)
- start_of_day_equity = current_equity (resets at 00:00 UTC every day)
- trade_count, active_days, categories_traded: counters used to validate the pass criteria
Every trade passes a three-layer gate
A market with a nominal price isn’t always a market you can actually trade. Before any fill, the engine runs three checks in strictest-first order. If any one of them rejects, the order is refused and your cash is untouched.
- 01DB status check
We pull the market’s last-known status from our own database. If it is resolved, settled, closed, finalized, or determined, we reject. This is the most authoritative signal but it lags by up to five minutes (the market_sync cadence) or one minute (the resolution sweep cadence).
- 02Resolution date check
If the market’s resolution date is in the past, we reject, even if our DB still says active. This catches the gap between a market actually ending and the source-of-truth sweep getting around to flipping the row.
- 03Live platform status check
We hit Kalshi or Polymarket directly to ask if the market is still live this second. This closes the tightest window: a market that just settled on the platform but whose DB row hasn’t been updated yet. Without this, a trader could unwind a losing position at a stale mid the instant the outcome is known.
On top of the three-layer gate, every fill on a real platform must come off a fresh quote: a snapshot less than three seconds old. If we cannot get a fresh quote (rate limit, network blip, an exchange having a bad day) the order is rejected with Live quote unavailable. We never serve a fill off stale data. Better to reject a trade than to fill it at the wrong price.
How prices, slippage, and fees actually work
Prediction-market contracts settle to either $1 or $0. Every price you see is a probability. 0.62 means the market thinks there is a 62% chance the contract pays $1. Your fill price determines your edge.
Fill price
When the market has a real order book (most Kalshi and Polymarket markets do during active hours), we walk the book to compute your fill, the same way a real broker would. You take the best ask, then the next ask if your size eats through the first level, and so on. The weighted average is your fill.
When there is no live book (a thin market, a temporary outage) we fall back to a simple size-based model: slippage = 0.1% per contract, capped at 2%. This is deliberately conservative; it is harder to make money in the simulator than on a perfectly deep book.
Fees, by platform
- Kalshi: min($0.05, 15% of potential profit) per contract. At a 0.50 mid, that’s $0.05/contract; at 0.99 YES, it’s $0.0015/contract. The 15%-of-profit rule binds at mid prices, the 5¢ cap binds at extremes.
- Polymarket: 2% of the potential payout per contract. A YES buy at 0.40 has a $0.60 potential payout, so the fee is $0.012/contract. Symmetric for NO.
- Both fees are charged at fill time, debited from cash. We round to 4 decimal places so accumulated rounding does not leak into your equity over hundreds of trades.
Position size cap
Any single position, including additions to an existing one, is capped at 15% of your sim bankroll, valued at fill price. This is a deliberate guard against the “ladder buy” pattern where a trader doubles down on a losing position to a size that no longer represents a real bet. The cap is enforced on the combined exposure: existing + new. You can size up over multiple fills, but you cannot bypass the cap by splitting an order.
Daily drawdown: 8% from start of day
Every day at 00:00 UTC we snapshot your equity. From that moment until the next reset, your equity may not drop more than 8% below that snapshot. On the Apex tier, that’s a hard floor of $92,000 relative to wherever you opened the day.
Daily drawdown is measured against where you opened the day, not your high water mark. If you grew the account by 5% yesterday, your start-of-day equity is bumped up to that new number, meaning you have a tiny bit more dollar room to lose the next day, but the same 8% guardrail. Conversely, a 3% red day shrinks tomorrow’s dollar floor by 3%.
We compare the breach at basis-point granularity. If your float drift puts you a hundredth of a percent over the line, it is not a breach. Only an honest excess past 8% counts. This is a defensive choice; we’d rather false-negative on a phantom breach than fail a real trader on float noise.
Total drawdown: 20% from your high water mark
The total drawdown is measured against your highest-ever equity, not your starting bankroll. The first time you push your account into the green, the high water mark moves up and stays there. From that peak, equity may not drop more than 20%.
Total drawdown is the second guardrail. Daily drawdown handles within-day risk; total drawdown handles the death-by-a-thousand-cuts case where you grind down the account over weeks of sub-8% red days. A 20% peak-to-trough drop ends the challenge regardless of how long it took.
The total drawdown check uses the same basis-point comparison as the daily check. Float drift gets ignored, only an honest excess past 20% triggers a fail. The failure reason on the row reads Total drawdown limit breached: 20.34% > 20.00% with the actual numbers, so you can see exactly how it happened.
Profit target: 20% of your starting bankroll
Hit a final equity at or above $120,000 on the Apex tier (a 20% gain) and, provided you have also met the activity floors below, you pass.
Activity floors
- Standard 30-day: minimum 20 trades, max 100 trades, at least 12 active days
- Express 7-day: minimum 10 trades, max 50 trades, at least 5 active days
- Blitz 48-hour: minimum 5 trades, max 25 trades, no active-day floor
We compare your final equity to the target at cent precision. A trader at $11,999.999 from float drift still passes against a $12,000 target. We round both sides to the nearest cent first. You should never lose a pass to a rounding bug.
How we decide pass vs. fail in the same snapshot
Every 30 seconds we re-mark every active challenge to current prices, then run the evaluation. Order matters: pass is checked first, fail second. Here is why.
Imagine a trader’s equity swings up to the profit target and then dips below the daily drawdown limit, all between two 30-second ticks. We see the snapshot at the bottom of the dip with both conditions true: target met AND drawdown breached. What do we do?
We pass them. Hitting the profit target is proof the trader reached the win condition. The drawdown that also shows in the same snapshot is normal volatility around an already-met outcome. Failing them for that swing punishes a payout we owe and matches no prop firm’s precedent. FTMO and the rest pass on the same logic.
- 01Pass criteria first
Equity at-or-above target AND trade count ≥ minimum AND active days ≥ minimum (when required). If true, status flips to passed and we kick off funded-account creation in the same transaction.
- 02Daily drawdown second
Only checked if the trader did not pass on this snapshot. Equity below the day’s −8% floor → status = failed, reason recorded.
- 03Total drawdown third
Only checked if neither pass nor daily fail fired. Equity below high-water-mark −20% → status = failed.
Pass → funded account, automatically
The instant the engine flips your challenge to passed, we open a FundedAccount row in the same transaction. Same tier, same bankroll, real capital. The Double Up add-on doubles that bankroll on promotion.
We treat promotion as a single atomic operation: status changes to passed, FundedAccount gets created, and your dashboard updates, all under the same row-lock. There is no race where two concurrent ticks could double-promote a single pass; the database has a UNIQUE constraint on qualifying_challenge_id as the last line of defense, and the application logic prevents it from ever firing.
Same rules, real capital
- 8% daily drawdown, same as the challenge, measured the same way, off the same engine.
- 20% total drawdown, same single hard ceiling.
- 15% per-position cap, same protection against catastrophic single-bet losses.
- Three-layer trade gate, same protection against trading a market that has just resolved.
How payouts work, end to end
Make money, request a withdrawal, an ops engineer reviews and pays. Default cadence is monthly; the Bi-Weekly Payouts add-on switches it to every 14 days.
- 01Lifetime P&L accrues continuously
Every realized gain or loss on the funded account updates lifetime_pnl_usd. Your share is lifetime_pnl × profit_split, and that is the pool.
- 02Available to withdraw = your share − already-paid
We track lifetime_payouts_usd separately, so you can never withdraw the same dollar twice. Available is always non-negative: losses do not put you in the red, they bring available down to zero.
- 03Request, ops review, Stripe transfer
Tap Request Payout, name an amount ≥ $25, the row goes pending. Ops gets a Discord ping. Funds land via Stripe in a few business days, account marked paid.
- 04Eligibility window
First payout window opens 30 days after promotion (14 days with the add-on). After the first one, every successful payout starts the clock again.
Copy trading: paper-only until ops flips the switch
On top of the funded program we run a copy-trading engine that mirrors top-ranked sharp traders into a separate firm pool. It is in paper mode by default and stays there until an operator explicitly enables live execution. This section explains how the system thinks, even though it is not moving real money yet.
Sharp Score is a percentile rank derived from a trader’s risk-adjusted returns. Traders who clear a stability bar over a 30-day window become eligible for paper-shadow tracking. When they place a trade in the simulator, the engine considers a mirrored position in the firm pool, sized by their sharp tier:
- Top 1%: $7,500 allocation (midpoint of $5–10K)
- Top 2.5%: $3,000 allocation
- Top 5–10%: $750 allocation
- Cooldown: $0, paper-only shadow for 30 days after qualifying, regardless of score
Six veto checks before a copy trade fires
- Liquidity: live order-book depth must be ≥ 3× our intended size
- Position cap: no single copy trade may be > 25% of the trader’s allocation
- Hard cap: and never > $2,500 per copy trade in absolute terms
- Per-trader DD: if the trader is down 15% on the day, their copies pause
- Firm DD: if the firm pool is down 5% on the day, the kill switch trips
- Sim-to-live drift: if the live price has moved >2% from the sim fill, the edge is gone, skip
When markets resolve, positions settle automatically
Prediction markets resolve to YES or NO at $1 or $0. We do not interpret outcomes; we read them from the platform itself. Once Kalshi or Polymarket reports a market as resolved, every open position settles at the platform-reported outcome.
A resolution sweep runs every 60 seconds against every market with at least one open position across the entire system. For each market, the chain is:
- 01Polymarket: Gamma API first
Read the market row from Gamma. If it reports a resolved outcome, settle. If Gamma is silent or returns empty (a real failure mode, since Gamma occasionally drops rows), fall through.
- 02Polymarket: data-api /trades fallback
If Gamma was inconclusive but the trades API shows recent fills concentrated at $1 or $0, that’s a settled market we can detect from the trade tape. Settle at the inferred outcome.
- 03Kalshi: signed market endpoint
Read the market row from Kalshi v2 with our RSA-PSS signed key. If status is settled and result is reported, settle every open position at the outcome.
- 04Orphan recovery
If we have an open position whose market_id no longer maps to a known row (the platform purged it), we fetch the market directly from the source and recover. We never silently skip a market with open positions: every sweep tick produces either a settle event or an explicit unresolved-alert event.
On settlement, every open position in that market closes at the resolved price. Realized P&L flows into your equity, the position is marked closed, and the next mark-to-market tick runs evaluation against your new equity, which is when a settlement might be the snapshot that pushes you over the profit target or under a drawdown floor.
The system’s heartbeat
Behind every challenge, a small set of background loops runs on tight cadences. None of these are user-visible, but together they are what makes the engine trustworthy.
- Mark-to-market every 30 seconds: re-prices every active challenge against live quotes, then runs evaluation.
- Expiry check every 60 seconds: finds challenges past their deadline, force-closes open positions at current prices, runs evaluation one last time.
- Daily reset at 00:00 UTC: under a row-lock, snapshots start_of_day_equity to current_equity for every active challenge.
- Resolution sweep every 60 seconds: detects and settles resolved markets across the entire system.
- Market sync every 5 minutes: refreshes the catalog of active markets from Kalshi and Polymarket.
- Equity audit, continuous: verifies the equity invariant cash + market_value == current_equity on every active challenge and auto-corrects drift > $0.02.