jgrusewski
c4fb3f73eb
fix(vrp): exec-twin ladder cap + per-rung sizing + combo BUY-credit sign + backfill master branch + P&L helper tests
...
The VRP exec twin previously opened a NEW full-envelope spread every run, overwriting the
single-slot book-state and never closing the prior one -- armed weekly it would stack N x
notional. plan_and_record_vrp now maintains a 5-rung ladder (mirrors VrpStrategy.advance):
closes rungs at 50% profit-take or DTE<=1 first, then opens at most one new rung sized at
envelope/ladder (never the full envelope) only when a slot is free. Ladder decisions are
factored into a pure, unit-tested plan_vrp_ladder helper.
Also: IbkrBroker.place_combo used the wrong parent-order action for a net-credit combo (SELL
with a negative limit); switched to BUY with a negative limit per IBKR's combo convention.
fxhnt-opra-backfill.yaml's git-sync cloned the feature branch instead of master (this Job is
applied manually post-merge). Added tests/unit/test_vrp_exec_helpers.py for the previously
untested pure P&L helpers (compute_spread_exec_return/compute_ladder_exec_return/build_pos_state).
Removed the dead --live flag from execute-vrp (plan_and_record_vrp never consulted allow_live;
the paper-envelope refusal guard is the real safety mechanism).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-13 00:36:11 +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-11 20:18:56 +02:00
2026-06-21 20:18:38 +02:00
2026-07-10 00:12:17 +02:00
2026-06-15 00:20:48 +02:00
2026-06-14 17:03:11 +02:00
2026-06-22 12:21:09 +02:00
2026-06-14 16:45:01 +02:00
2026-06-23 13:38:51 +02:00
2026-06-24 20:21:06 +02:00
2026-06-23 22:45:14 +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-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-06-25 20:34:52 +02:00
2026-07-11 02:15:12 +02:00
2026-07-11 20:33:12 +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-06-19 00:18:14 +02:00
2026-06-14 16:45:36 +02:00
2026-06-19 19:38:19 +02:00
2026-06-28 09:47:35 +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-12 22:55:14 +02:00
2026-06-15 00:23:05 +02:00
2026-06-23 00:10:39 +02:00
2026-06-20 17:45:00 +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-06-18 10:01:36 +02:00
2026-06-21 20:17:56 +02:00
2026-06-17 12:24:29 +02:00
2026-06-28 14:05:18 +02:00
2026-07-13 00:15:36 +02:00
2026-07-09 00:02:20 +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-06-09 12:21:47 +02:00
2026-06-14 20:06:52 +02:00
2026-06-21 20:54:50 +02:00
2026-06-13 19:09:08 +02:00
2026-06-23 09:04:18 +02:00
2026-06-17 00:22:38 +02:00
2026-06-21 23:32:36 +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-11 00:47:15 +02:00
2026-06-26 08:07:42 +02:00
2026-06-27 16:12:37 +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-06-23 09:04:18 +02:00
2026-06-24 17:27:10 +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-09 14:16:18 +02:00
2026-06-14 17:29:37 +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-09 23:29:07 +02:00
2026-07-07 20:22:30 +02:00
2026-07-11 10:54:07 +02:00
2026-06-26 00:46:10 +02:00
2026-07-13 00:15:36 +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-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-26 00:46:10 +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-06-21 20:30:05 +02:00
2026-06-22 08:18:22 +02:00
2026-06-26 16:33:47 +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-06-22 16:59:24 +02:00
2026-06-25 01:39:07 +02:00
2026-07-12 23:49:17 +02:00
2026-07-13 00:36:11 +02:00
2026-07-13 00:36:11 +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-06-25 23:16:18 +02:00
2026-06-21 23:37:58 +02:00
2026-06-23 13:38:51 +02:00
2026-06-23 13:38:51 +02:00
2026-06-23 13:38:51 +02:00
2026-06-21 20:16:15 +02:00
2026-07-12 22:56:42 +02:00