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 expired in 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 GTD chip 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).

AccessEndpointTriggered byFor which user?
Auto-cancel after 3 NYSE trading daysDELETE /iserver/account/{acc}/order/{orderId}Cron order_sync_scheduler.discard_unfilled_after_3dEvery user with GTC orders at the broker; no user click
Manual cancel (X button in Open tab)DELETE /iserver/account/{acc}/order/{orderId}User clickEvery user
Limit change (replace)POST /iserver/account/{acc}/order/{orderId}User clickEvery user
Order placement (send)POST /iserver/account/{acc}/ordersUser 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:

  1. `users.is_admin = TRUE` in the database (admin role, operator

account). No paying customer account carries this flag.

  1. `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).

  1. Send dialog selection submission mode = bafin_compliant on

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.