Order lifetime: GTC vs GTD
When sending an order (Proposals → Submit) the confirmation dialog shows a Lifetime section with two options:
GTC — Standard (default)
What happens: The order is sent to IBKR/Lynx with time-in-force GTC (Good-Till-Cancelled). It stays open at the broker and is NOT auto- cancelled at the end of the day.
WheelTrading cleanup: If the order isn't filled within 3 NYSE trading days, WheelTrading auto-cancels it outside market hours for you. The proposal moves to status discarded with status_reason=auto_3day_no_fill+broker_cancel.
Pro: simple "fire and forget" — if your limit was too ambitious, the order will be gone after at most 3 trading days.
Con: WheelTrading actively touches your account (see note below).
GTD — broker-managed expiry (opt-in)
What happens: The order is sent to IBKR/Lynx with time-in-force GTD (Good-Till-Date) and a fixed expiry date. The broker terminates the order at 16:00 ET (NYSE close) on the chosen day. WheelTrading does NOT touch the order; we only sync the final status.
Where to configure: In the send dialog, select the GTD radio and then:
in [ N ] calendar days— number field, default 3, max 90- or
on [ MM/DD/YYYY ]— free date picker
The free date takes precedence over the day count if you set both.
When useful?
- Put ladders spanning several weeks — you want the order
open longer than 3 days because the premium won't fill otherwise.
- Before a trading break (vacation, weekend, holiday) — you
want the broker to cleanly terminate the order without your presence, not our software.
- BaFin/compliance perspective — you want to rule out any
software-side order termination.
Limits:
- Minimum: tomorrow (today doesn't work — would already be
expired when sent).
- Maximum: today + 90 calendar days (IBKR limit for
goodTilDate). - After expiry the order shows as
expiredin the Closed tab.
Manual cancel is always possible — hit X in the Open tab and WheelTrading sends an explicit cancel request to IBKR. That's a user-triggered cancel and regulatory-safe.
Why offer two options at all
From a regulatory perspective (BaFin, FMA, FINMA) an automatic, non-user-triggered cancel of an open order can be interpreted as portfolio-management-adjacent activity. The GTD path delegates order termination to the broker — that's a pure data sync on our side, not an intervention.
If unsure: start with GTC (default). Behaviour is identical to the classic implementation. GTD is purely opt-in for cases where you explicitly want it.
What happens when you change the limit price
If you modify the limit of an already-sent order in the Open tab (replace), the original lifetime is preserved:
- A GTC order stays GTC (our cleanup keeps counting).
- A GTD order stays GTD with the same expiry date.
Display in the "Open" tab
- GTC row: Expiry column shows
Auto-Cancel in Nd(red on day
2, yellow on day 1 before cancel).
- GTD row: Expiry column shows a small
GTDchip plus the
broker expiry date (Thu 07/24 22:00). Neutral green — our cleanup does not touch it.
Full scope of our writing broker access
The following table lists every writing IBKR/Lynx call that WheelTrading makes against your broker. No other writing access takes place – everything else is pure read access (account balance, positions, fill status).
| Access | Endpoint | Triggered by | For which user? |
|---|---|---|---|
| Auto-cancel after 3 NYSE trading days | DELETE /iserver/account/{acc}/order/{orderId} | Cron order_sync_scheduler.discard_unfilled_after_3d | Every user with GTC orders at the broker; no user click |
Manual cancel (X button in Open tab) | DELETE /iserver/account/{acc}/order/{orderId} | User click | Every user |
| Limit change (replace) | POST /iserver/account/{acc}/order/{orderId} | User click | Every user |
| Order placement (send) | POST /iserver/account/{acc}/orders | User click in the send dialog with `submission mode = bafin_compliant` | Not for end users. Active only if ALL three conditions below are met simultaneously. |
Important for standard users: For you as a regular end user WheelTrading places no orders at IBKR/Lynx. You enter your orders exclusively field by field via copy-paste in the broker ticket yourself – that is, through your own TWS/Lynx+ session.
When is the server send (bafin_compliant) unlocked?
The server send via the Client Portal Gateway (bafin_compliant) requires three cumulative conditions – tied to a role, not to a fixed user ID:
- `users.is_admin = TRUE` in the database (admin role, operator
account). No paying customer account carries this flag.
- `users.easy_ibkr_send_enabled = TRUE` – a personal opt-in
toggle each admin has to enable for themselves via PUT /api/settings/easy-ibkr-send. Default false. The toggle endpoint itself checks the admin role (403 Admin only).
- Send dialog selection
submission mode = bafin_complianton
the individual send. Non-admin users get 403 BAFIN_SEND_NOT_ALLOWED here.
Additionally (defense in depth): if easy_ibkr_send_enabled is set back to false, a previously chosen trade_submission_mode = bafin_compliant is automatically reverted to copy_paste – there is no “forgotten server send from an old session”.
BaFin classification
- Cancel (auto and user cancel): a purely technical termination of
an existing order. It does not aim at bringing about a transaction – no brokerage element.
- Replace (limit change): change of one parameter of an order the
user placed themselves, again on user click.
- Send: active placement. Blocked for end users for regulatory
reasons. The admin path exists only for operator tests against an operator-owned IBKR account and is not shipped to paying customers.
See also Order submission for the general order submission flow.