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
Aug 30, 2026 21:23Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+272.86 RP
Aug 30, 2026 21:22Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 21:17Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Aug 30, 2026 21:12Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Aug 30, 2026 21:00Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 21:00Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Aug 30, 2026 20:47Josu San MartinJosu San MartinCPPclang++18.1.3Error+373.47 RP
Aug 30, 2026 20:10Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 19:18Josu San MartinJosu San MartinCPPclang++18.1.3Error
Aug 30, 2026 19:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 19:12Victor MerckléVictor MerckléCPPg++14.2.0Error+63.31 RP
Aug 30, 2026 19:06Josu San MartinJosu San MartinCPPclang++18.1.3Error+1'248.45 RP
Aug 30, 2026 19:04Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 19:01Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 30, 2026 16:22Tomislav TunkovicTomislav TunkovicCSHARP9.0.15Error
Aug 30, 2026 16:21Tomislav TunkovicTomislav TunkovicGOgo1.26.2Error
Aug 30, 2026 16:21Tomislav TunkovicTomislav TunkovicZIG0.15.1Error
Aug 30, 2026 16:14Tomislav TunkovicTomislav TunkovicRUSTrust-1.95.0Error
Aug 30, 2026 15:57Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Aug 30, 2026 15:55Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error
Aug 30, 2026 15:54Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+518.92 RP
Aug 30, 2026 15:49Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+1'891.12 RP
Aug 29, 2026 17:28Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 17:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 16:47Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 16:29Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 16:17Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 14:24Victor MerckléVictor MerckléCPPg++14.2.0Error+714.43 RP
Aug 29, 2026 13:45Victor MerckléVictor MerckléCPPg++14.2.0Error+76.14 RP
Aug 29, 2026 13:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 12:52Victor MerckléVictor MerckléCPPclang++20.1.2Error
Aug 29, 2026 12:35Victor MerckléVictor MerckléCPPg++14.2.0Error+162.95 RP
Aug 29, 2026 11:47Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 11:26Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 11:06Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 10:45Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 10:39Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 10:33Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 10:22Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 09:04Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 29, 2026 08:54Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 23, 2026 14:41Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,096
Aug 23, 2026 03:37Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,081+29.83 RP
Aug 23, 2026 03:32Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,339
Aug 23, 2026 03:23Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,094+89.51 RP
Aug 23, 2026 03:15Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,373
Aug 23, 2026 03:13Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+195.69 RP
Aug 23, 2026 03:09Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,620
Aug 23, 2026 03:07Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,400
Aug 23, 2026 02:53Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,536
Aug 23, 2026 02:45Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,777
Aug 23, 2026 02:43Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+366.63 RP
Aug 23, 2026 02:28Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success3,004
Aug 23, 2026 02:26Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,555
Aug 22, 2026 15:10Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success3,399
Aug 22, 2026 03:58Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,912
Aug 21, 2026 22:58Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,479
Aug 21, 2026 22:48Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,972
Aug 21, 2026 22:07Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+556.11 RP
Aug 21, 2026 22:05Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+214.15 RP
Aug 21, 2026 21:29Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success3,209
Aug 21, 2026 21:13Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success2,982+13.44 RP
Aug 21, 2026 21:05Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success3,082
Aug 21, 2026 20:58Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+409.18 RP
Aug 21, 2026 20:49Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+667.36 RP
Aug 21, 2026 20:42Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+667.55 RP
Aug 21, 2026 20:31Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+563.28 RP
Aug 21, 2026 20:23Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success9,962
Aug 21, 2026 20:22Andrew EpsteinAndrew EpsteinCPPg++14.2.0Error+786.21 RP
Aug 21, 2026 20:09Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success40,581+5.49 RP
Aug 21, 2026 20:09Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success41,505+73.03 RP
Aug 21, 2026 19:44Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success59,557+134.35 RP
Aug 21, 2026 19:27Andrew EpsteinAndrew EpsteinCPPg++14.2.0Success297,989+33.56 RP
Aug 20, 2026 02:38Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 17:35Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 17:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 16:44Victor MerckléVictor MerckléCPPg++14.2.0Success3,251
Aug 19, 2026 15:51Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 15:38Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 15:31Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 15:19Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 15:04Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 14:45Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 14:42Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 14:39Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 14:35Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 14:02Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 13:58Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 13:45Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 13:37Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 13:29Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 10:36Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 10:18Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 09:45Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 09:16Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 08:45Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 08:10Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 07:50Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 07:02Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 19, 2026 06:45Victor MerckléVictor MerckléCPPg++14.2.0Error+5.00 RP