Skip to content

[UX] Positions page shows internal connector|conid identifier instead of symbol + name #208

@rudyll

Description

@rudyll

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

  1. Connect an IBKR (TWS / Gateway) account.
  2. Hold any position (e.g. a Hong Kong stock such as 1138.HK).
  3. Open Trading Account → Positions in the Web UI.
  4. 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

  1. Quick fix: render the existing symbol field from getPortfolio as the primary label; demote connector|conid to secondary metadata.
  2. Full fix: on Positions page load, fire one getContractDetails per unique position (cached by conid) and enrich rows with longName, exchange, primaryExchange, currency.
  3. 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions