Skip to content

The order lifecycle

6 min read · updated 2026-10-23

Every order SleeveFolio submits (manual or auto-executed) moves through the same lifecycle, mirrored from the broker into your Orders page:

  • WORKING: accepted at the broker, waiting to execute
  • PARTIAL: some quantity filled, the rest still working
  • FILLED: fully executed; the row shows the average fill price next to the quantity that filled
  • CANCELLED: pulled before completing, refused outright by the broker, or expired at the end of the trading day — with a reason category showing who ended it: you (per-row or via the kill switch), an automatic safety action, or the broker (a refusal, or an order it expired at day’s end — fully unfilled or with only part of it filled). An order you cancelled directly at the broker outside SleeveFolio still falls under the “you” category, just with no reason text

Each row’s Strategy column names the strategy that placed the order when it came from auto-execute (automatic trading). Orders you placed by hand carry no strategy and show a dash instead.

Finding an order

The Orders page lists your orders newest first under three tabs — Open, Filled, and Cancelled — and two filters at the top narrow all three tabs at once: a symbol filter (pick from the symbols in the orders shown, or type to search) and a side filter (Buy only or Sell only). Each tab’s count follows the filters, so the number on a tab always matches what that tab shows. The page opens on Open when you have an open order; otherwise it opens on Filled, or on Cancelled when nothing has filled either, and on Open again when you have no orders at all. Once you’re on a tab it stays put, even after you cancel an order.

The page pulls your newest orders from your broker — up to the most recent 500, plus anything still open. When your history is longer than that, a notice above the list says so, and the filters search only what’s shown. For everything older, use the Export CSV button on the Cancelled tab: the export always covers your full order history, whatever the filters are set to.

Placing an order by hand

The + New order button on the Dashboard, Orders, and Positions pages opens the order ticket. On the Universe page, a looked-up symbol’s card opens the same ticket from its Trade button, with the symbol filled in. Every order from the ticket goes to the account you’re currently in: its title reads New paper order or New live order, and a live ticket carries a warning that it trades real money and asks you to confirm the order — its side, quantity, and estimated cost — in a separate window before anything is sent.

  • Symbol: a ticker like AAPL, or a crypto pair like BTC/USD
  • Side: Buy or Sell
  • Type: Market (no price limit) or Limit (won’t fill at a worse price than the one you set, entered to the cent)
  • Quantity: whole shares for a stock; a crypto pair takes fractional coin amounts (decimals are fine)

For a market buy of a stock you can switch Amount to Dollars. The ticket looks up the current price, converts your amount to the largest quantity it covers (to the hundredth of a share), and shows that exact quantity before you submit; the final cost depends on the price when the order fills. A part-share quantity only works on stocks your broker lets you buy in fractions; for any other stock the ticket asks you to enter whole shares instead.

In both sizing modes the ticket shows an Estimated cost line: the order’s dollar size at the latest price for your symbol (or, sizing in dollars, the amount you typed), with a small chip showing how old that price is. It’s an estimate, not a promise — the final cost settles at the price the order fills at.

Stock orders go to the broker as day orders (good for one trading day only), so one that hasn’t filled by the end of its trading day expires and shows as cancelled. Crypto trades around the clock, so crypto orders go as good-till-cancelled: a crypto limit order stays open until it fills or is cancelled, by you or by your broker under its own rules (brokers can expire orders that stay open a long time).

To sell part of a holding, choose Sell and enter its symbol and how much to sell. Sells are sized in shares or coins, and a stock sell from the ticket takes whole shares. To sell a holding completely, part-shares included, use its Close button on the Positions page instead (see Closing a whole holding). Liquidate is a different tool again: it sells everything at once.

The ticket refuses an order while trading is paused, and a live order must also meet every live-trading requirement, including the gate’s two checks (so open live drift blocks it) and a recent broker check that finished. When it refuses, it shows the reason and no order is sent to your broker. If your caps count manual orders, it also warns before an order that would cross one; see Manual orders and your caps.

Closing a whole holding

Each holding on the Positions page has a Close button. It opens a confirm window showing the symbol, the exact quantity you hold (every decimal of a part-share), the account (PAPER or LIVE), and an estimated value based on the price when the page loaded. Confirming sends one market order for exactly the quantity your broker holds, in the account shown: a sell, or, for a short position (shares you sold without owning them), a buy that closes it. It works for any holding your broker reports, including a coin you bought directly at your broker that SleeveFolio doesn’t otherwise trade.

A close goes through the same checks as any order you place by hand. It’s refused while trading is paused, and a live close must meet every live-trading requirement, including the gate’s two checks (so open live drift blocks it) and a recent broker check that finished; Liquidate doesn’t wait on either. It’s also refused if the holding or your account changed after the page loaded (say an order filled, or you switched accounts in another tab): reload and review it again. And it’s refused while another order for the same symbol is still open at your broker: let that order finish, or cancel it on the Orders page, then try again. When a close is refused, the window shows the reason and no order is sent to your broker.

As with any market order, the fill price and timing are up to the market and your broker. Your broker may refuse an order worth less than about $1, so the window warns when a holding is that small.

Closing doesn’t pause trading: if auto-execute is on, a later run can buy the symbol again when its signals call for it. Liquidate is the everything-at-once stop: it sells every holding in every account you’ve connected.

Duplicate-proof submission

Every order we send carries a fixed ID tag (the client_order_id). If a network hiccup or an automatic retry resubmits the same order, SleeveFolio and the broker both recognize the tag and refuse to place it twice: the classic “did my retry just buy twice?” failure can’t happen (in the glossary: idempotent).

An order is only marked rejected when your broker actually refused it. If the broker never gives a clear answer (the connection times out, or the broker reports an error on its side), the order may well have gone through, so SleeveFolio keeps it as submitted and checks it against your broker on the next sync rather than tell you it was refused. The order ticket and the Close button say so in that case, and the automatic run counts it in its notification as not yet confirmed. An order Alpaca turns away because it no longer accepts your saved keys isn’t marked rejected either: nothing was placed, so SleeveFolio drops it from its records instead of keeping it as submitted, and it never comes back later as a drift item for an order your broker never received. The ticket or Close button tells you to save working keys and then try again (pressing it again sends the same order under the same tag), and an automatic run stops sending and tells you how many orders it didn’t send. See Keys that stopped working.

Orders you place by hand work the same way. The order ticket creates the tag before you submit and keeps it until the order is confirmed accepted or refused. If a submit never comes back — the connection drops or times out — the ticket tells you the outcome is unknown and keeps the tag, so pressing Submit again sends the same tag: SleeveFolio sees the first attempt already recorded the order and reports its result (“Already submitted”) instead of placing a second one. If your broker never answered that first attempt, SleeveFolio asks the broker about the tag first: if the broker has the order, you see “Already submitted”; if it never arrived, SleeveFolio sends the order now in the ticket, under the same tag, so it still can’t be placed twice. Only after a confirmed outcome does the ticket mint a fresh tag for your next order. A holding’s Close button works the same way: if a close never comes back, pressing Close again (without reloading the page) sends the same tag, so SleeveFolio reports the first attempt’s result instead of placing a second one, or, when the broker never received that close, checks the holding again and sends it then.

duplicate-proof submission · what we send the broker
POST /v2/orders
{
  "symbol": "AAPL",
  "qty": "10",
  "side": "buy",
  "client_order_id": "<stable per logical order>"
}

The environment tag

Orders record which environment placed them: paper and live history never blend, and cancelling and reconciliation (our routine cross-check against the broker) always talk to the right account, paper to paper, live to live.