ol_paper_trade
WRITE (opt-in): place a market order in YOUR paper (practice) portfolio -- the same engine, quote, fills and rejections as the web sandbox; no real money, no real account. One of TWO mutating tools here (the other is reading_list_annotate). DEFAULTS TO A DRY RUN: with _dry_run omitted or true nothing is placed and you get {dry_run: true, tool, args, idempotency_key, preview, message}. Re-call with _dry_run: false AND that same _idempotency_key to execute; a rejection is a normal (non-error) response you must read and relay, and a repeat of the same key returns {replay: true, ...} without placing twice. shares is whole shares, 1..1,000,000; side is buy or sell; thesis (optional, max 250 chars) is the USER's own reason. Requires an API KEY or a linked OAuth token (a browser session cookie is refused). Capped at 20 executed fills per user per UTC day. Practice money: _meta.disclaimer says so on every response. Caveats ride the response's tool_notes.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | buy or sell (market order at the platform's delayed quote). | |
| shares | Yes | Whole shares, 1..1,000,000 per order (the engine's per-order cap). | |
| thesis | No | Optional: why (max 250 chars). Stored on the fill and shown back to the user beside the position; write it as the USER's reason. | |
| ticker | Yes | Symbol to trade in YOUR paper portfolio (e.g. DAC). | |
| _dry_run | No | Default true: preview the fill (quote, cost, cash after) without placing it. Re-call with false and the returned _idempotency_key to execute. | |
| _idempotency_key | No | Optional replay-safety key; auto-derived if omitted. A repeat of the same key returns the first result and places nothing. |