I think I have now isolated the remaining issue.
I ran a minimal GET_POSITION diagnostic with IB diagnostics level 4.
The IB plugin clearly receives my actual open positions from TWS:
!U4934740 XBI-STK--0.00--ARCA/-XBI-USD
!U4934740 XLI-STK--0.00--ARCA/-XLI-USD
!U4934740 VOO-STK--0.00--ARCA/-VOO-USD
!U4934740 VGK-STK--0.00--ARCA/-VGK-USD
!U4934740 IGM-STK--0.00--ARCA/-IGM-USD
!U4934740 SMH-STK--0.00--NASDAQ/-NMS-USD
These are indeed my current positions in TWS.
However, GET_POSITION returns zero for all of them:
XBI Position=0 Avg=0.00
XLI Position=0 Avg=0.00
VOO Position=0 Avg=0.00
VGK Position=0 Avg=0.00
IGM Position=0 Avg=0.00
SMH Position=0 Avg=0.00
I also tested XBI separately with several symbol variants:
XBI
XBI-STK-SMART-USD
XBI-STK-SMART/ARCA-USD
XBI-STK-ARCA-USD
All returned 0.
TWS confirms XBI has:
Exchange: SMART
Primary Exchange: ARCA
Currency: USD
So it appears that TWS position callbacks reach the IB plugin correctly, but GET_POSITION does not match/return them.
This also explains why Z9's rebalance dialog shows all current positions as:
old 0
even though those positions exist in the IB account.
Could this be an IB plugin GET_POSITION issue in the current 3.11 build?
I am using latest Zorro S build with TWS.