Summary
On the Trading Account → Positions page, each row currently displays a raw composite identifier such as:
ibkr-tws-9XXXXXX3|4XXXXXX8
This is essentially <connector-session-id>|<IBKR conid>. For end users this is unreadable — there is no way to tell which instrument the position actually refers to without manually querying getContractDetails or looking the conid up on IBKR's website.
Steps to Reproduce
- Connect an IBKR (TWS / Gateway) account.
- Hold any position (e.g. a Hong Kong stock such as
1138.HK).
- Open Trading Account → Positions in the Web UI.
- Observe the position is identified as
ibkr-tws-XXXXXXXX|4XXXXXX8 with no human-readable symbol or company name.
Expected Behavior
Each position row should display, at minimum:
- Symbol (e.g.
1138)
- Company / instrument name (e.g.
COSCO SHIPPING Holdings)
- Exchange (e.g.
SEHK)
- Currency (e.g.
HKD)
The internal connector|conid identifier should be moved to a tooltip, an expandable detail panel, or a "developer info" section.
Proposed Display
🇭🇰 1138 · 中远海控 (COSCO SHIPPING Holdings)
SEHK · HKD · 2,000 shares
Avg 8.97 → 19.21 | +20,473.86 HKD (+114.18%)
ⓘ conid: 46652398 source: ibkr-tws-90692973
Why This Matters
- Non-US markets are numeric-coded. Hong Kong (
700, 1138, 9988), A-shares (600519), Tokyo (7203) — without a name, users cannot recognize their own holdings.
- conid is an IBKR internal primary key. It is meaningless outside the IBKR backend and should never be the primary identifier shown to a human.
- Inconsistency with the API.
getPortfolio returns a clean symbol field (e.g. "1138"); the UI currently appears to render the connector+conid composite instead of that symbol.
Suggested Implementation
- Quick fix: render the existing
symbol field from getPortfolio as the primary label; demote connector|conid to secondary metadata.
- Full fix: on Positions page load, fire one
getContractDetails per unique position (cached by conid) and enrich rows with longName, exchange, primaryExchange, currency.
- Group / badge positions by market (US / HK / A / CRYPTO) for quick visual scanning.
Impact
- 🟢 Low risk — purely presentational
- 🟢 High UX win for any user trading outside US equities
- 🟢 No backend changes needed (data is already available via
getContractDetails)
Environment
- OpenAlice Web UI (
web/default session)
- Connector:
ibkr-tws
- Affected market observed: SEHK (Hong Kong)
Summary
On the Trading Account → Positions page, each row currently displays a raw composite identifier such as:
This is essentially
<connector-session-id>|<IBKR conid>. For end users this is unreadable — there is no way to tell which instrument the position actually refers to without manually queryinggetContractDetailsor looking the conid up on IBKR's website.Steps to Reproduce
1138.HK).ibkr-tws-XXXXXXXX|4XXXXXX8with no human-readable symbol or company name.Expected Behavior
Each position row should display, at minimum:
1138)COSCO SHIPPING Holdings)SEHK)HKD)The internal
connector|conididentifier should be moved to a tooltip, an expandable detail panel, or a "developer info" section.Proposed Display
Why This Matters
700,1138,9988), A-shares (600519), Tokyo (7203) — without a name, users cannot recognize their own holdings.getPortfolioreturns a cleansymbolfield (e.g."1138"); the UI currently appears to render the connector+conid composite instead of thatsymbol.Suggested Implementation
symbolfield fromgetPortfolioas the primary label; demoteconnector|conidto secondary metadata.getContractDetailsper unique position (cached by conid) and enrich rows withlongName,exchange,primaryExchange,currency.Impact
getContractDetails)Environment
web/defaultsession)ibkr-tws