Skip to content

feat: IBKR-aligned order params + TPSL support + order summarization#98

Merged
luokerenx4 merged 5 commits intomasterfrom
dev
Apr 1, 2026
Merged

feat: IBKR-aligned order params + TPSL support + order summarization#98
luokerenx4 merged 5 commits intomasterfrom
dev

Conversation

@luokerenx4
Copy link
Copy Markdown
Contributor

Summary

  • Align placeOrder/modifyOrder params with IBKR Order fields — eliminate translation layer, fix trailingAmount semantic bug
  • Add single-level TPSL — takeProfit/stopLoss on placeOrder, wired through CCXT (atomic) and Alpaca (bracket order), string prices for precision
  • Expose TPSL on fetched orders — OpenOrder.tpsl populated from CCXT takeProfitPrice/stopLossPrice and Alpaca bracket legs
  • Summarize getOrders output — replace raw ~200-field IBKR objects with ~15-field compact summaries, add groupBy contract clustering
  • Fix IbkrBroker.modifyOrder — missing trailStopPrice merge

Test plan

  • 938 unit tests passing (includes TDD tests for TPSL extraction)
  • 41 e2e tests passing — real Bybit TPSL round-trip verified
  • TPSL e2e across all broker files
  • getOrders summarization: UNSET filtering, groupBy clustering, orderId preservation

🤖 Generated with Claude Code

Ame and others added 5 commits April 1, 2026 09:26
… fields

Rename AI tool and StagePlaceOrderParams/StageModifyOrderParams to use
IBKR-native field names (action, orderType, totalQuantity, lmtPrice,
auxPrice, tif, outsideRth, etc.), eliminating the toIbkrOrderType/toIbkrTif
translation layer. Fixes semantic bug where trailingAmount was incorrectly
mapped to trailStopPrice instead of auxPrice. Adds missing trailStopPrice
merge in IbkrBroker.modifyOrder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New optional takeProfit/stopLoss params on placeOrder AI tool, with string
prices to avoid precision loss. TpSlParams flows through the full pipeline:
tool → StagePlaceOrderParams → Operation → dispatcher → IBroker.placeOrder().

Broker implementations:
- CCXT: maps to createOrder params { takeProfit, stopLoss }
- Alpaca: maps to order_class "bracket" with take_profit/stop_loss
- IBKR: signature updated, params ignored (use parentId bracket path)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Read takeProfitPrice/stopLossPrice from CCXT orders in convertCcxtOrder,
and parse bracket order legs in Alpaca's mapOpenOrder. OpenOrder now
carries optional tpsl field matching the TpSlParams shape used at
placement time.

Unit tests (TDD): 3 CCXT + 3 Alpaca extraction tests.
E2E tests: TPSL round-trip on Bybit (3 files), IBKR pass-through,
Alpaca bracket (market-hours gated).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace raw IBKR OpenOrder spread (~200 fields, mostly UNSET_DOUBLE) with
compact OrderSummary (~15 fields, UNSET values filtered out). Add optional
groupBy: "contract" parameter to cluster orders by aliceId — critical for
portfolios with many positions + TPSL orders.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@luokerenx4 luokerenx4 merged commit df303f9 into master Apr 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant