From 552f5a18f7a3fb6357e21b9c6bdf920c7ccc96d7 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sun, 24 May 2026 01:22:40 +0000 Subject: [PATCH] fix(kevin_bridge): use PositionInfo.ticker + qty*avg_entry for cost basis PositionInfo schema in shared/schemas/trading.py has ticker (not symbol) and no cost_basis field. Compute cost basis as qty * avg_entry. Production logs showed AttributeError on every mention process. --- services/kevin_signal_bridge/main.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/kevin_signal_bridge/main.py b/services/kevin_signal_bridge/main.py index 90d29a4..c011f42 100644 --- a/services/kevin_signal_bridge/main.py +++ b/services/kevin_signal_bridge/main.py @@ -158,7 +158,13 @@ class KevinBridge: async def _snapshot_account(self) -> KevinAccountState: acct = await self.broker.get_account() positions = await self.broker.get_positions() - held = {p.symbol: Decimal(str(getattr(p, "cost_basis", 0))) for p in positions} + # PositionInfo schema uses `ticker` + `market_value` (no `cost_basis`). + # Cost basis ≈ qty * avg_entry; this is what the strategy's per-ticker cap compares against. + held = { + p.ticker: Decimal(str(p.qty)) * Decimal(str(p.avg_entry)) + for p in positions + if p.qty != 0 + } blocklist = ( await self.blocklist.active_set() if self.blocklist else set() )