jgrusewski
38b8ff26d2
feat(exec): multistrat self-cleans its OWN superseded lines (fixes lingering IDTM)
...
The IEF->CBU0 UCITS remap (515117d , 2026-07-16 12:28) left the paper account
holding IDTM (the old thin Dist line, bought on the 07-15/16 09:00 runs under the
prior IEF->IDTM config). The rebalancer only ever traded its TARGET symbols
(_plan iterates targets.items()), so it never sold the orphaned IDTM — it lingered
in the account NLV and (correctly) tripped the stray-holdings warning.
Fix — scoped, safe self-cleaning:
- superseded_holdings(): the symbols multistrat ITSELF previously traded (per its
own exec_fills) that are still held but no longer a target — priced at the last
fill. Scoped to multistrat's own fills, so a position ANOTHER strategy holds on
the SHARED IBKR account is never touched.
- plan_and_record: adds them at target weight 0 (+ LSEETF/USD spec so a UCITS line
resolves by symbol to SELL) before the rebalance. Best-effort: a scan failure
never blocks a real rebalance.
- _plan: a full EXIT (weight 0 on a held line) ALWAYS trades — hysteresis damps
churn, it must not strand a position we're deliberately closing.
Next UCITS rebalance (09:00) closes IDTM and buys CBU0; the warning clears. Also
prevents future mapping-change legacy from silently accreting in the NLV.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-18 11:30:00 +02:00
..
2026-06-23 15:13:27 +02:00
2026-06-14 23:35:59 +02:00
2026-06-22 11:16:06 +02:00
2026-07-11 20:22:54 +02:00
2026-07-16 00:07:48 +02:00
2026-07-16 09:55:37 +02:00
2026-07-16 09:03:59 +02:00
2026-06-21 20:18:38 +02:00
2026-07-13 13:24:20 +02:00
2026-07-10 00:12:17 +02:00
2026-07-13 13:24:20 +02:00
2026-07-13 11:41:51 +02:00
2026-06-15 00:20:48 +02:00
2026-06-24 20:21:06 +02:00
2026-06-23 22:45:14 +02:00
2026-07-13 21:27:42 +02:00
2026-07-11 00:58:52 +02:00
2026-06-28 16:17:41 +02:00
2026-07-10 10:09:43 +02:00
2026-07-13 20:51:59 +02:00
2026-06-26 23:19:51 +02:00
2026-07-10 11:06:37 +02:00
2026-07-11 02:15:02 +02:00
2026-06-14 17:11:58 +02:00
2026-07-02 12:51:39 +02:00
2026-06-23 13:38:51 +02:00
2026-07-14 00:30:20 +02:00
2026-07-13 22:17:04 +02:00
2026-07-16 00:07:48 +02:00
2026-07-11 20:10:12 +02:00
2026-07-11 00:48:59 +02:00
2026-06-26 00:32:46 +02:00
2026-07-11 01:27:15 +02:00
2026-06-14 20:06:52 +02:00
2026-07-14 00:30:20 +02:00
2026-06-14 16:45:36 +02:00
2026-06-19 19:38:19 +02:00
2026-06-15 11:10:13 +02:00
2026-06-13 17:56:19 +02:00
2026-06-15 00:38:17 +02:00
2026-07-14 19:45:48 +02:00
2026-06-15 00:23:05 +02:00
2026-07-14 00:51:52 +02:00
2026-07-16 16:31:27 +02:00
2026-06-22 08:08:47 +02:00
2026-06-14 19:54:57 +02:00
2026-06-23 00:37:58 +02:00
2026-07-16 12:49:30 +02:00
2026-06-18 10:01:36 +02:00
2026-07-14 09:48:00 +02:00
2026-06-17 12:24:29 +02:00
2026-07-16 13:02:34 +02:00
2026-07-15 00:02:25 +02:00
2026-06-28 14:05:18 +02:00
2026-07-15 19:31:16 +02:00
2026-07-09 00:02:20 +02:00
2026-07-16 09:11:07 +02:00
2026-07-16 09:11:07 +02:00
2026-07-10 02:11:52 +02:00
2026-06-14 12:23:09 +02:00
2026-07-09 14:16:18 +02:00
2026-07-09 13:37:00 +02:00
2026-07-10 01:34:35 +02:00
2026-07-10 02:11:52 +02:00
2026-07-09 14:16:18 +02:00
2026-07-14 20:17:44 +02:00
2026-07-15 22:35:57 +02:00
2026-07-15 22:35:57 +02:00
2026-07-15 22:35:57 +02:00
2026-06-14 20:06:52 +02:00
2026-07-14 00:30:20 +02:00
2026-06-13 19:09:08 +02:00
2026-07-14 23:32:37 +02:00
2026-07-15 02:06:40 +02:00
2026-07-16 12:42:59 +02:00
2026-07-14 00:51:52 +02:00
2026-06-17 00:22:38 +02:00
2026-06-21 23:32:36 +02:00
2026-07-18 11:15:55 +02:00
2026-06-21 19:33:15 +02:00
2026-06-22 09:17:01 +02:00
2026-06-14 19:54:08 +02:00
2026-06-13 02:01:04 +02:00
2026-06-14 23:05:03 +02:00
2026-07-14 18:38:28 +02:00
2026-07-18 11:30:00 +02:00
2026-06-26 08:07:42 +02:00
2026-07-14 15:20:57 +02:00
2026-07-13 22:17:04 +02:00
2026-07-14 16:34:17 +02:00
2026-07-13 22:35:33 +02:00
2026-07-14 10:21:53 +02:00
2026-07-13 12:50:32 +02:00
2026-07-14 10:38:15 +02:00
2026-06-13 02:06:30 +02:00
2026-06-22 19:56:51 +02:00
2026-06-21 19:45:32 +02:00
2026-06-21 19:33:15 +02:00
2026-06-21 21:06:01 +02:00
2026-07-14 00:51:52 +02:00
2026-07-14 00:51:52 +02:00
2026-06-14 11:45:42 +02:00
2026-06-09 13:52:32 +02:00
2026-06-21 20:14:30 +02:00
2026-07-15 22:35:57 +02:00
2026-07-09 14:16:18 +02:00
2026-06-14 17:29:37 +02:00
2026-07-16 07:30:34 +02:00
2026-07-16 09:22:19 +02:00
2026-06-22 09:22:07 +02:00
2026-06-09 19:20:23 +02:00
2026-06-14 23:21:08 +02:00
2026-07-10 10:17:52 +02:00
2026-07-13 22:17:04 +02:00
2026-07-14 10:38:15 +02:00
2026-07-16 08:58:01 +02:00
2026-07-14 10:38:15 +02:00
2026-07-13 21:56:23 +02:00
2026-06-23 09:04:18 +02:00
2026-06-14 17:11:58 +02:00
2026-06-14 16:46:05 +02:00
2026-07-18 11:15:55 +02:00
2026-06-23 10:53:15 +02:00
2026-06-21 23:29:30 +02:00
2026-06-28 14:04:03 +02:00
2026-06-14 17:39:29 +02:00
2026-06-22 20:22:31 +02:00
2026-06-21 10:37:05 +02:00
2026-06-14 23:18:09 +02:00
2026-07-09 21:22:06 +02:00
2026-06-14 16:46:45 +02:00
2026-06-14 17:29:37 +02:00
2026-06-19 19:49:46 +02:00
2026-07-16 12:28:25 +02:00
2026-07-16 12:28:25 +02:00
2026-06-22 08:18:22 +02:00
2026-06-22 20:22:31 +02:00
2026-06-20 20:11:07 +02:00
2026-06-13 02:24:41 +02:00
2026-07-16 09:03:59 +02:00
2026-06-22 16:59:24 +02:00
2026-06-25 01:39:07 +02:00
2026-07-15 09:49:45 +02:00
2026-07-13 00:36:11 +02:00
2026-07-15 09:55:55 +02:00
2026-07-15 09:49:45 +02:00
2026-07-12 22:48:11 +02:00
2026-07-13 00:15:36 +02:00
2026-06-15 00:34:55 +02:00
2026-06-15 00:28:40 +02:00
2026-07-14 14:57:08 +02:00
2026-06-21 23:37:58 +02:00
2026-06-23 13:38:51 +02:00
2026-06-21 20:16:15 +02:00
2026-07-15 10:32:30 +02:00
2026-07-16 10:23:09 +02:00