Cross-Margin Liquidation Engine yenw0d

Simulate a cross-margin derivatives engine: process trades, track account equity, and liquidate undercollateralized accounts as fast as possible.

Accounts are funded with a USD deposit and trade instruments whose prices change over time. When a price update causes an account’s equity to fall below 1% of its total position notional, the account must be liquidated.

Definitions

  • Account equity = balance + Σ(size_i * price_i) - Σ(total_paid_i)
  • Total position notional = Σ(|size_i| * price_i)
  • Total paid for instrument i = signed sum of trade_size * price_at_trade_time across all trades
  • Margin rule: liquidate if equity < total_notional / 100 after any price update

Input

One command per line on STDIN:

  • a <balance> – create account with USD balance (IDs start at 0, incrementing)
  • p <instrument_idx> <price> – set/update instrument price (0-indexed)
  • t <account_idx> <instrument_idx> <size> – trade size (signed) at current price
  • Final line: <account_idx> – query this account and terminate

Output

On each price update, liquidate all accounts violating the margin rule. For each liquidation, print:

liquidate <account_id> <equity> <position_notional>

Liquidation order: largest total position notional first, then account ID descending as tie-breaker. Liquidated accounts have their balance and positions cleared.

For the final query, print <equity> <notional> for the requested account.

Constraints

  • Accounts: <= 100,000
  • Instruments: <= 1,000
  • Price range: 100 to 1,000,000
  • Trade size range: 1 to 10,000

Example

a 100
p 0 100
t 0 0 10
p 0 90
0

Output:

liquidate 0 0 900
0 0
Date AuthorLanguageStatus Score
Sep 8, 2026 13:19Victor MerckléVictor MerckléGOgo1.26.2Error
Sep 8, 2026 13:06Victor MerckléVictor MerckléGOgo1.26.2Error
Sep 8, 2026 12:50Victor MerckléVictor MerckléGOgo1.26.2Error
Sep 8, 2026 12:09Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 7, 2026 14:02Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:57Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:50Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:44Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:39Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:32Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:21Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 13:15Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 12:32Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 7, 2026 10:28Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 6, 2026 17:31Victor MerckléVictor MerckléCPPg++14.2.0Error+12.90 RP
Sep 4, 2026 20:39Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+93.66 RP
Sep 4, 2026 19:00Josu San MartinJosu San MartinRUSTrust-1.98.1Success2,291
Sep 4, 2026 18:31Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Sep 4, 2026 18:02Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Sep 4, 2026 17:54Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Sep 4, 2026 17:04Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Sep 4, 2026 15:42Victor MerckléVictor MerckléCPPg++14.2.0Error+52.73 RP
Sep 4, 2026 10:32Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 4, 2026 10:21Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 4, 2026 10:18Victor MerckléVictor MerckléGOgo1.26.2Error
Sep 4, 2026 10:06Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 4, 2026 09:55Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 4, 2026 09:45Victor MerckléVictor MerckléCSHARP10.0.7Error
Sep 4, 2026 09:41Victor MerckléVictor MerckléGOgo1.26.2Error
Sep 4, 2026 09:05Victor MerckléVictor MerckléZIG0.16.0Error
Sep 4, 2026 09:02Victor MerckléVictor MerckléRUSTrust-1.95.0Error+104.02 RP
Sep 4, 2026 08:59Victor MerckléVictor MerckléZIG0.16.0Error
Sep 4, 2026 08:18Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 4, 2026 07:59Victor MerckléVictor MerckléCPPg++14.2.0Error+25.71 RP
Sep 4, 2026 06:42Tomislav TunkovicTomislav TunkovicCPPg++10.5.0Success292,197
Sep 4, 2026 00:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 22:48Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 22:42Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 21:51Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 21:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 21:06Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 20:59Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 12:50Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 3, 2026 12:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 17:31Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 17:00Victor MerckléVictor MerckléCPPg++14.2.0Error+323.93 RP
Sep 2, 2026 16:35Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 15:42Victor MerckléVictor MerckléCPPg++14.2.0Error+452.58 RP
Sep 2, 2026 13:08Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 12:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 12:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 11:07Victor MerckléVictor MerckléCPPg++14.2.0Error+88.27 RP
Sep 2, 2026 10:47Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 10:23Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 10:14Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 08:02Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 07:22Victor MerckléVictor MerckléCPPg++14.2.0Error+182.76 RP
Sep 2, 2026 06:48Victor MerckléVictor MerckléCPPg++14.2.0Error+186.67 RP
Sep 2, 2026 06:09Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 05:34Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 04:41Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 04:23Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 03:59Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 03:40Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 03:30Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 03:21Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 02:57Victor MerckléVictor MerckléCPPg++14.2.0Error+199.62 RP
Sep 2, 2026 02:30Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 02:20Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 02:08Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 01:49Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 01:27Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 01:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 01:05Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 00:46Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 00:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 2, 2026 00:16Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 20:50Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 20:24Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 19:56Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 19:40Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 19:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 18:32Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 18:05Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 17:38Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 17:27Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 17:21Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 16:57Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 16:19Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 15:42Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 15:39Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 15:27Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 15:22Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 14:44Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 14:27Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 14:12Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 14:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 13:58Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 13:34Victor MerckléVictor MerckléCPPg++14.2.0Error
Sep 1, 2026 13:23Victor MerckléVictor MerckléCPPg++14.2.0Error