PAPER TRADING / PUBLIC RULES

Live paper-trading rules

Your strategy makes decisions in your environment. QuantOpen calculates simulated fills from received market data. These public rules are separate from historical backtesting and involve no real funds.

Initial simulated capital
USD 100000
Trading direction
Long-only · No leverage
Benchmark
QQQ over the same period
Settlement
Immediate settlement

Participation and public information

Verify your email and receive administrator approval to leave the waitlist, then create a strategy account. Each user has one account with initial capital of USD 100000; joining again returns the existing account without another deposit or a capital reset.

The public leaderboard shows strategy names, account IDs, joining times and performance summaries without requiring a login. Do not include emails, real names or other private information in a strategy name. Email, positions, orders, fills, ledger and account history (up to the latest 5,000 snapshots) are visible only to the owner and administrators. Joining does not submit a historical backtest or transfer old backtest results to this leaderboard.

Place orders through the API; the web page is read-only. All valid new and existing API tokens can create paper accounts and place orders by default, without a separate trading permission. Disabled or waitlisted accounts and revoked or expired tokens remain blocked. Revoking a token blocks new API requests but does not cancel accepted orders.

Orders and fills

Use US stocks or ETFs available from the current market-data service; support for every symbol is not guaranteed . Market orders are accepted only during regular trading hours, with integer quantities from 1– 1000000 . Limit orders, stop orders, amendments, participant cancellations, fractional-share orders, short selling and cash overdrafts are not supported. No leverage means no account borrowing; it is not a look-through classification of an ETF's assets or leverage.

Item Execution policy
Buy / sell Buy price = ask × (1 + 5bp); sell price = bid × (1 − 5bp). Prices and monetary values are rounded to eight decimal places.
Commission Per share: $ 0.005; minimum per order: $ 1, charged on both buys and sells.
Available funds Immediate settlement. Net sale proceeds can fund the next order immediately. Cash and positions are checked again at execution; accepted does not guarantee a fill.
Valid quotes Maximum heartbeat age: 30 seconds; maximum symbol quote age: 10 seconds. The QQQ benchmark must also be valid. Quotes received before order acceptance are not used to fill it.
Order lifetime After acceptance, an unfilled order expires in 30 seconds. The quote's source time must be at or after acceptance and within the order's lifetime.
Quoted size Each new quote checks orders by acceptance time, then order ID. Buys use ask_size and sells use bid_size. The remaining size on that side must cover the entire order; otherwise it waits for another quote. There are no partial fills. A later smaller order may fill while a larger order waits.

Sell admission subtracts quantities committed to pending sells to prevent overselling. Pending buys do not reserve cash; with multiple buy orders, a later fill may be rejected for insufficient funds. After a request timeout, retry with the same request_key and original payload to avoid duplicating your trading intent.

Valuation, benchmark and ranking

Month, Quarter, YTD and All time are views of one continuous account. The public page defaults to Month. Calendar boundaries use America/New_York; quarters begin in January, April, July and October. Switching periods never resets funds, positions, orders or the QQQ benchmark.

  • Positions are valued at the midpoint of valid bid/ask quotes. Account equity = cash + position market value. Cumulative return = (equity / initial capital − 1) × 100%.
  • After joining, each account starts its benchmark at the first valid QQQ midpoint during an open market with no review block. It uses all initial capital, allows fractional units for calculation and excludes simulated trading fees and slippage. Splits adjust units; dividends remain benchmark cash and are not automatically reinvested.
  • Month, Quarter and YTD use saved observations with both account and QQQ equity. Period return = (ending equity / opening equity − 1) × 100%; QQQ uses its equity at the same observations. Period drawdown is recalculated within that window. All time keeps initial-capital returns and lifetime observed drawdown; private account metrics are unchanged.
  • The opening reference is the last paired snapshot at or before the calendar boundary, at most 96 hours earlier. If unavailable, calculation starts at the first paired snapshot inside the period and is marked limited history. Mid-period entrants are labeled separately. Actual observation dates remain visible; no missing history is invented.
  • Saved observations are not official closing prices or proof of continuous intraday coverage. Period values may lag live quotes until a new snapshot is saved. Past periods use only their saved observations, never today's equity or lifetime drawdown; no usable data means no rank, not a fabricated zero return.
  • Ready rows rank by unrounded selected-period return descending, then joining time and account ID. Ranks are sequential without ties. Mid-period and limited-history rows may rank with labels; this beta does not determine prize eligibility. QQQ and drawdown are supporting metrics, not ranking criteria.
  • Current periods retain live feed and account safety gates. Past periods do not depend on today's quote freshness, but account review still blocks ranking. A historical rank never authorizes trading. Historical boards are recalculated observations, not immutable award records.
  • The last valid valuation is retained when markets close. Invalid heartbeats, ineligible position quotes or review requirements result in stale, awaiting-data or review status without a current rank. Last-saved values are not current executable prices.

Corporate actions and exception review

Splits, cash dividends and symbol changes are processed from trusted market-data events. Splits adjust shares while preserving total cost; dividends credit cash; unambiguous renames migrate positions. Splits and renames cancel affected pending orders and require new quotes. Splits can create fractional holdings, but new orders still require integer quantities.

Delistings, late or conflicting corporate actions, rename collisions, security identity changes and feed restarts or gaps may trigger review. Trading and current rankings pause while recovery is checked. The system does not guess ledger corrections or liquidate automatically. Market closure or global review cancels pending orders; recovery never revives them or backfills missed trades. QQQ issues also affect benchmarks and ranking.

Transport-only interruptions can recover automatically when pre-interruption continuity evidence, the same feed session, corporate-action delivery and all account and QQQ benchmark ledgers reconcile. At least three fresh healthy batches over at least ten seconds are required. An open market also requires fresh tradable quotes for QQQ and all held symbols. Recovery during closed hours restores only closed-market status, not trading permission.

When continuity evidence is insufficient, the platform checks QC's currently published dividends, splits, delistings and symbol changes for QQQ and every security held during the interruption, including positions already sold. All four queries must succeed for the required scope; security identities, actual factor/mapping-file snapshots and all account/benchmark ledgers must agree. Empty results alone are insufficient. QC has no publication watermark, so unpublished or later-revised events cannot be excluded.

Incomplete history coverage, unknown security identities, missing or conflicting events and ledger discrepancies require administrator investigation. Historical checks never adjust cash or positions, repair ledgers or backfill trades. Legacy interruptions need the same sufficient evidence; fresh heartbeats alone are not enough. All recovery paths are audited and do not clear separate account anomalies.

Limits and simulation boundaries

Limit Current setting
New orders Per account per minute: 30 new orders, shared by all tokens; idempotent retries do not create new orders.
Pending queue Per account: 20 orders; platform-wide: 200 orders.
Market-data subscriptions Shared across the platform: 20 symbols, including QQQ, held symbols and symbols in unexpired pending orders.

These limits are separate from the historical backtest quota of 10 submissions per rolling 24 hours. Token/IP request-rate protections also apply. Back off when rate-limited; do not create new tokens to bypass limits.

These are not actual QuantConnect orders or exchange executions. The model uses only best bid/ask quotes; it cannot reproduce full market depth, real queue priority, large-order impact, exchange routing, network latency or full live execution capability. No real funds or guaranteed returns are involved. This is a beta, not an official award process.

Full rules and version

Read the full rule document
# Live Paper v1 — live paper-trading rules

English | [简体中文](live-paper-v1.zh-CN.md) · [Documentation](../README.md)

This is an independent **simulated** US stock/ETF competition, not a brokerage
service, real-money trade or historical QC backtest. The canonical website rule
page is [Live rules](https://quantopen.org/rules/live/); it displays a localized
reading copy, the canonical Chinese source hash and current operational limits. The numbers below
describe the present policy/defaults. The [historical track](historical-hosted-policy.md)
has separate rules and ranking; its frozen rule hash does not cover this track.

## 1. Joining and public identity

- Use an active, approved QuantOpen account. Public registration requires email
  verification and superuser waitlist approval. Browser pages use your session;
  REST requests use your personal API Token.
- Each user may join once, with a public strategy name of 1–80 characters. One
  independent USD **100,000** wallet is created. Repeating join returns that
  account, not another deposit or a reset. The participant API offers no reset,
  top-up, withdrawal, transfer or account-name update.
- API reads retain the existing read-permission check. Every valid new or
  existing token can join and place orders for an eligible account; no separate
  trading grant, switch or replacement token is needed. Historical submit
  permissions remain unchanged. Expired/revoked tokens and disabled/waitlisted
  accounts are not re-enabled. The internal trade endpoint category is not an
  optional token scope.
- The public board publishes the name, public account UUID, joining/valuation
  times, performance and availability. Choose a name suitable for public display.
  Email, cash, positions, orders, fills, ledger and account-level review details
  remain private to the owner and authorized superusers. The anonymous board
  exposes no internal review reasons; the authenticated leaderboard API can
  include a shared market-level review reason.

## 2. Instruments, session and orders

Only supported US equities and ETFs are eligible. Submit uppercase ticker
symbols; syntactic validity does not guarantee an instrument is supported by the
feed. The shared data subscription is added dynamically for new pending symbols.
No options, futures, crypto, short selling, borrowing or leveraged account
balances are implemented. This is an account-leverage restriction, not an ETF
holdings look-through classification.

Only integer-share market buy/sell orders are accepted: quantity **1–1,000,000**.
Corporate actions can leave fractional holdings, but the order API does not
accept fractional quantities. No limit/stop orders, historical timestamps,
client-selected fill prices, historical Python strategy uploads or participant
order-cancel API are supported in this track.

The QC feed reports the regular US equity session using QQQ exchange hours.
New orders require an open, healthy market feed, fresh tradable QQQ and an
unpaused account. Unsupported/paused instruments are rejected. An as-yet
unsubscribed instrument may enter pending while the bridge subscribes to it;
missing or invalid instruments do not get invented prices.

Each order is pending for at most **30 seconds** from server acceptance.
HTTP 202 means accepted, not filled. Only a newly received quote with a strictly
newer per-symbol source timestamp, at or after acceptance and within the order's
lifetime, can fill it. An old cached quote is not an execution. The order must
still be unexpired at processing time. Replaying batches or quotes cannot create
another fill. No fill occurs before the account's QQQ baseline has started.

The client supplies a unique request_key per intended order. The same account,
key and payload return the same order; using the key with a different payload is
a conflict. On timeout/unknown HTTP outcome, retry the **same key and payload**.
Use a new key only for an intentionally new order, not as an automatic retry.

## 3. Simulated fills, costs and cash

- Buy price = **ask × 1.0005**; sell price = **bid × 0.9995**. This is adverse
  5-basis-point slippage on the relevant quote side, not on a last-trade price.
- Fee per filled order = **max(USD 1, USD 0.005 × shares)**. Fill prices and money
  use decimal arithmetic rounded to eight decimal places; holdings use up to
  twelve. A rejected, cancelled or expired order does not incur a fill fee.
- There are **no partial fills**. The entire quantity must fit the current
  ask size for a buy or bid size for a sell. Eligible orders are considered in
  acceptance-time order, with order UUID as tie-breaker; one side's capacity is
  consumed across all accounts for that symbol in that received batch. A too-large
  order can remain pending while a later smaller order fits.
- This quote-size gate is a conservative **simulation rule**, not a reservation
  of real exchange liquidity, order-book reconstruction, broker execution or a
  guarantee that the quantity could really trade. The bridge sends selected
  current quote observations, not every market event.
- Cash and holdings are checked again atomically at fill. Buys cannot make cash
  negative; sells cannot exceed owned shares. Pending sells reduce the quantity
  available for additional sell admission. Pending buys do not reserve cash:
  an accepted buy can later be rejected if another fill used the funds or prices
  changed. Order and cash records are persisted together with quote evidence.
- Sale proceeds are immediately reusable. This MVP implements **immediate
  simulated settlement**, not T+1 settlement or the historical track's QC
  settlement/buying-power models.

Order states are pending, filled, rejected, cancelled and expired. Closing the
market or entering a global review cancels pending orders; expired orders show
expired even if no new heartbeat arrives. Disabling an account, restoring its
waitlist status or disabling participant access prevents subsequent fills.
Revoking a token blocks new API calls but does not withdraw an already accepted
order.

## 4. Operational limits

| Limit | Present value/default |
| --- | --- |
| Accepted new orders per account, rolling minute | 30; configurable by LIVE_ORDER_RATE_PER_MINUTE |
| Simultaneous pending orders per account | 20 |
| Simultaneous pending orders globally | 200 |
| Shared distinct subscribed symbols | 20 by default, configurable by LIVE_MAX_SYMBOLS; includes QQQ, positive holdings and nonexpired pending symbols |
| Quote source age for execution | At most 10 seconds; at most 2 seconds future clock tolerance |
| Feed source/receipt freshness | At most 30 seconds |
| Pending lifetime | 30 seconds |

Symbol capacity is an application safety limit, not a QC hard limit or a limit
of 20 users. Raising it requires operational capacity review. Website configured
values take precedence over stated configurable defaults. General API request
rate protection also applies. Idempotent retries do not create another accepted
order; accepted orders that later expire/reject still count in their rolling
minute. These limits do not share the historical 10-per-24-hour allowance or its
administrator exemptions.

## 5. Valuation, benchmark and ranking

Positions are marked at **(bid + ask) / 2**. Equity is cash plus marked holdings;
it is not a promise of liquidation proceeds. Cost basis includes buy fees and is
reduced proportionally when shares are sold.

QQQ buy-and-hold starts with USD 100,000 at the first fresh, tradable QQQ quote
whose source time is at or after joining, during a healthy open session. It buys
fractional benchmark shares at that quote's midpoint, keeps rounding residual
cash, and does not charge the strategy's execution fee/slippage. Until then the
benchmark is pending, not a backfilled curve. QQQ is a comparator, not a required
holding or a requirement to outperform. No pre-start dividends are credited.
Subsequent benchmark cash dividends are retained as cash, **not reinvested**;
splits adjust benchmark shares.

- All-time return = (equity / 100,000 − 1) × 100 percent.
- All-time benchmark return uses benchmark equity and the same initial capital.
- Excess return is strategy return minus benchmark return, in percentage points.
- Maximum drawdown is the greatest observed peak-to-trough decline from trusted
  valuations. It is not proof of a continuous, complete intraday equity history.

### Calendar-period standings

The public page defaults to **Month**, with **Quarter**, **YTD** and **All time**
views. These are views of the same continuous account, not separate wallets or
enrollments. Changing the view or crossing a calendar boundary never resets
cash, holdings, orders, the QQQ benchmark or the ledger.

| View | Calendar window in America/New_York |
| --- | --- |
| Month | First day of the selected month to the first day of the next month |
| Quarter | January–March, April–June, July–September or October–December |
| YTD | January 1 of the selected year to now; a completed year ends at the next January 1 |
| All time | Each account's own start to its latest eligible valuation |

Calendar ends are exclusive. Prior months, quarters and years can be selected;
future periods cannot. Month, quarter and YTD metrics use saved eligible
observations containing **both** account and QQQ benchmark equity, not the
private account API's latest-5,000-point slice. They may lag live quotes until a
new snapshot is saved. Actual observation start/end times remain visible.

For an account already present at the boundary, the opening reference is the
last paired snapshot at or before that boundary, at most 96 hours
earlier. This conservative age ceiling is **not** proof of official closing
prices, a complete exchange calendar or uninterrupted coverage. Without such a
reference, calculation begins at the first paired snapshot inside the window
and is marked **limited history**. Accounts joining during the window are marked
**joined during period**, starting from their first paired snapshot; no history
before joining or benchmark initialization is invented. An eligible reference
is labeled **observed period**, not certified complete-period coverage.

- Period return = (ending observed equity / opening observed equity − 1) × 100%.
- QQQ period return uses its own equity at the **same pair of observations**.
- Period maximum drawdown is recomputed from the opening reference and saved
  observations inside that window. It is sampled drawdown, not lifetime
  drawdown or a guarantee that every intraday peak/trough was observed.
- Historical periods stop at the last eligible saved observation before the
  selected end. They never use today's equity, QQQ quote or lifetime drawdown.
  Missing usable observations produce unavailable metrics and no rank, not 0%.
- All time retains the existing live valuation, initial-capital return and
  lifetime observed-drawdown calculation. The private account page is unchanged.

Only ready rows with usable selected-period metrics receive ranks, ordered by
unrounded selected-period return descending, then earlier joining time and public
account UUID. Ranks are sequential without ties. Current periods retain the
normal feed/account safety gates. Historical rows use saved observations rather
than today's quote freshness, but account review still blocks ranking; a
historical rank never grants permission to trade. This is **not Sharpe ranking**.
Mid-period entrants and limited-history accounts can rank with explicit labels;
their different observation windows must be considered when comparing results.
The beta does not implement full-period prize eligibility or immutable certified
award tables. QQQ and drawdown are supporting metrics, not ranking criteria.

The public table does not display an excess-return column; the existing
`excess_return_pct` API field and private account metric remain available.

The service records the initial deposit, baseline initialization, fills and
approximately minute-spaced new valuation observations. Closed-market heartbeats
do not fabricate curve points. The participant API returns at most the latest
5,000 history points, not an unlimited or continuous tick archive.

## 6. Freshness, corporate actions and safety review

Market states are missing, open, closed, stale and review. Account states are
pending_feed, ready, stale and review. Stale or missing values are never replaced
with fabricated prices. In an open market, old held-symbol or QQQ quotes make the
account stale. A healthy closed-market heartbeat can retain the last valuation,
with its original as-of time; closed does not mean fresh execution is available.

The authenticated feed supplies raw quotes and stable-ID corporate actions.
Splits adjust shares and preserve total cost basis; dividends credit eligible
holdings at the effective event; renames preserve security identity when safely
resolvable. Actions are idempotent. Splits/renames cancel affected pending orders.
Late or ambiguous actions, unsupported held instruments, identity conflicts and
delisting enter review instead of guessing entitlements or forced sale prices.

Feed interruptions pause trading and current rankings while recovery is checked.
A transport-only interruption can recover automatically when prior continuity
evidence, the same running feed session, corporate-action delivery records and
all account/QQQ benchmark ledgers reconcile. At least three healthy fresh batches
over at least ten seconds are required; during an open market, QQQ and every held
symbol also need fresh tradable quotes. Successful checks during a closed market
restore only closed-market status, not trading permission.

A fresh heartbeat alone is not proof of continuity. If continuity evidence is
missing, the platform requests read-only QC corporate-action History as a second
check: dividends, splits, delistings and symbol changes for QQQ and every security
held during the affected interval, even if it has since been sold. Recovery is
based on QC's currently published data: all four queries must succeed for the
required scope, security identities and actual factor/mapping-file snapshots
must validate, and events must agree with all account/benchmark ledgers. Empty
query results alone are insufficient. QC has no publication watermark, so these
checks cannot exclude unpublished or later-revised events. Unknown identities,
failed/incomplete checks, missing/conflicting events or ledger discrepancies
still require administrator investigation.
Historical checks never adjust cash or positions, repair the ledger or backfill
trades. Legacy interruptions without checkpoints are not assumed safe; they need
the same sufficient historical evidence and current recovery safeguards.
Manual clearance requires an active superuser's recorded reconciliation and a
fresh healthy feed. It may complete while the market is closed after quote safety
and identity checks; this does not permit closed-market trading. Open-market
review and trading still require fresh tradable QQQ and held-symbol quotes.
All recovery decisions are audited;
neither path guesses ledger repairs, clears separate account anomalies or revives
cancelled/expired orders. Missed trades are never backfilled.

This is bounded best-effort market observation, not complete exchange execution
or immunity from data outages. The service fails closed when its required
evidence is missing. See [live REST API](../live-trading-api.md),
[architecture](../live-paper-trading.md), and implementation
[engine](../../webapp/live_trading/engine.py) / [API](../../webapp/live_trading/api.py).

Reading copy SHA-256: 77fe62276ac45499d3acadd471667a10cfa19d45ec0c692673eabe4af8215e31

Canonical Chinese source SHA-256: 22c9d9bf666ed402e9d9abe78fb71d75f05b0171c04bdd494d8e7469e28e7a41

Historical backtesting has its own fixed window, QC models and ranking rules. Read the Historical backtest rules and do not mix the two tracks' settings.