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
Jun 20, 2026 16:16A_ShamanA_ShamanCPPg++10.5.0Success121,450
Jun 20, 2026 16:13A_ShamanA_ShamanCPPg++10.5.0Success129,541
Jun 20, 2026 16:11A_ShamanA_ShamanCPPg++10.5.0Success114,684
Jun 20, 2026 16:07A_ShamanA_ShamanCPPg++10.5.0Success123,196
Jun 20, 2026 16:04A_ShamanA_ShamanCPPg++10.5.0Success118,713
Jun 20, 2026 11:20A_ShamanA_ShamanCPPg++10.5.0Success103,823
Jun 20, 2026 11:17A_ShamanA_ShamanCPPg++10.5.0Success110,439
Jun 20, 2026 11:11A_ShamanA_ShamanCPPg++10.5.0Success150,637
Jun 20, 2026 11:06A_ShamanA_ShamanCPPg++10.5.0Success100,773+3.70 RP
Jun 20, 2026 11:04A_ShamanA_ShamanCPPg++10.5.0Success104,681+95.53 RP
Jun 20, 2026 07:41A_ShamanA_ShamanCPPg++10.5.0Error
Jun 19, 2026 11:41Victor MerckléVictor MerckléCPPclang++18.1.3Success1,444
Jun 19, 2026 11:36Victor MerckléVictor MerckléCPPclang++18.1.3Success1,613
Jun 19, 2026 11:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,467
Jun 19, 2026 11:22Victor MerckléVictor MerckléCPPclang++18.1.3Success1,577
Jun 19, 2026 11:12Victor MerckléVictor MerckléCPPclang++18.1.3Success3,683
Jun 19, 2026 03:23Victor MerckléVictor MerckléCPPclang++18.1.3Success1,503
Jun 19, 2026 03:17Victor MerckléVictor MerckléCPPclang++18.1.3Success2,387
Jun 19, 2026 03:10Victor MerckléVictor MerckléCPPclang++18.1.3Success1,536
Jun 19, 2026 02:59Victor MerckléVictor MerckléCPPclang++18.1.3Success1,490
Jun 19, 2026 02:53Victor MerckléVictor MerckléCPPclang++18.1.3Success1,488
Jun 19, 2026 02:48Victor MerckléVictor MerckléCPPclang++18.1.3Success1,467
Jun 19, 2026 02:43Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 19:12Victor MerckléVictor MerckléCPPclang++18.1.3Success1,473
Jun 18, 2026 19:07Victor MerckléVictor MerckléCPPclang++18.1.3Success1,423
Jun 18, 2026 19:02Victor MerckléVictor MerckléCPPclang++18.1.3Success1,447
Jun 18, 2026 18:57Victor MerckléVictor MerckléCPPclang++18.1.3Success1,470
Jun 18, 2026 18:52Victor MerckléVictor MerckléCPPclang++18.1.3Success1,472
Jun 18, 2026 18:47Victor MerckléVictor MerckléCPPclang++18.1.3Success1,537
Jun 18, 2026 18:42Victor MerckléVictor MerckléCPPclang++18.1.3Success1,524
Jun 18, 2026 18:37Victor MerckléVictor MerckléCPPclang++18.1.3Success1,383+356.94 RP
Jun 18, 2026 18:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,483
Jun 18, 2026 11:28Victor MerckléVictor MerckléCPPclang++18.1.3Success1,472
Jun 18, 2026 11:23Victor MerckléVictor MerckléCPPclang++18.1.3Success1,418+301.74 RP
Jun 18, 2026 11:18Victor MerckléVictor MerckléCPPclang++18.1.3Success1,449+365.83 RP
Jun 18, 2026 10:58Victor MerckléVictor MerckléCPPclang++18.1.3Success1,508
Jun 18, 2026 01:11Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 01:04Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 00:59Victor MerckléVictor MerckléCPPclang++18.1.3Success1,533
Jun 18, 2026 00:54Victor MerckléVictor MerckléCPPclang++18.1.3Success1,603
Jun 18, 2026 00:49Victor MerckléVictor MerckléCPPclang++18.1.3Success1,605
Jun 17, 2026 13:06Victor MerckléVictor MerckléCPPclang++18.1.3Success1,616
Jun 17, 2026 13:01Victor MerckléVictor MerckléCPPclang++18.1.3Success1,564
Jun 17, 2026 12:56Victor MerckléVictor MerckléCPPclang++18.1.3Success1,584
Jun 17, 2026 12:51Victor MerckléVictor MerckléCPPclang++18.1.3Success1,505
Jun 17, 2026 12:46Victor MerckléVictor MerckléCPPclang++18.1.3Success1,515
Jun 17, 2026 12:41Victor MerckléVictor MerckléCPPclang++18.1.3Success1,541
Jun 17, 2026 12:36Victor MerckléVictor MerckléCPPclang++18.1.3Success1,546
Jun 17, 2026 12:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,502
Jun 17, 2026 12:19Victor MerckléVictor MerckléCPPclang++18.1.3Success1,497+4.46 RP
Jun 17, 2026 12:14Victor MerckléVictor MerckléCPPclang++18.1.3Success1,530
Jun 17, 2026 12:09Victor MerckléVictor MerckléCPPclang++18.1.3Success1,597
Jun 17, 2026 12:04Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 13, 2026 18:19Victor MerckléVictor MerckléZIG0.16.0Success1,480+860.66 RP
Jun 13, 2026 18:10Victor MerckléVictor MerckléZIG0.16.0Success1,782
Jun 13, 2026 17:16Victor MerckléVictor MerckléCSHARP10.0.7Success1,544+139.55 RP
Jun 13, 2026 17:11Victor MerckléVictor MerckléCSHARP10.0.7Success1,612
Jun 13, 2026 16:47Victor MerckléVictor MerckléCSHARP10.0.7Success1,578+703.33 RP
Jun 13, 2026 15:39Victor MerckléVictor MerckléGOgo1.26.2Success1,557
Jun 13, 2026 15:32Victor MerckléVictor MerckléGOgo1.26.2Success1,555+41.09 RP
Jun 13, 2026 15:14Victor MerckléVictor MerckléGOgo1.26.2Success1,565+167.00 RP
Jun 13, 2026 15:08Victor MerckléVictor MerckléGOgo1.26.2Success1,607+364.54 RP
Jun 11, 2026 23:45Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 11, 2026 23:40Victor MerckléVictor MerckléCPPclang++18.1.3Success1,581
Jun 11, 2026 23:35Victor MerckléVictor MerckléCPPclang++18.1.3Success1,527
Jun 11, 2026 23:30Victor MerckléVictor MerckléCPPclang++18.1.3Success1,500
Jun 11, 2026 23:25Victor MerckléVictor MerckléCPPclang++18.1.3Success1,505
Jun 11, 2026 23:19Victor MerckléVictor MerckléCPPclang++18.1.3Success1,581
Jun 11, 2026 23:14Victor MerckléVictor MerckléCPPclang++18.1.3Success1,545
Jun 11, 2026 23:09Victor MerckléVictor MerckléCPPclang++18.1.3Success1,509
Jun 11, 2026 23:00Victor MerckléVictor MerckléCPPclang++18.1.3Success1,578
Jun 11, 2026 22:51Victor MerckléVictor MerckléCPPclang++18.1.3Success1,539
Jun 11, 2026 22:47Victor MerckléVictor MerckléCPPclang++18.1.3Success1,590
Jun 11, 2026 22:38Victor MerckléVictor MerckléCPPclang++18.1.3Success1,579
Jun 11, 2026 22:30Victor MerckléVictor MerckléCPPclang++18.1.3Success1,558
Jun 10, 2026 08:42Victor MerckléVictor MerckléCPPclang++18.1.3Success1,582
Jun 10, 2026 08:27Victor MerckléVictor MerckléCPPclang++18.1.3Success1,602
Jun 10, 2026 08:22Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 10, 2026 08:14Victor MerckléVictor MerckléCPPclang++18.1.3Success1,574
Jun 10, 2026 08:09Victor MerckléVictor MerckléCPPclang++18.1.3Success1,522
Jun 10, 2026 08:04Victor MerckléVictor MerckléCPPclang++18.1.3Success1,591
Jun 10, 2026 07:58Victor MerckléVictor MerckléCPPclang++18.1.3Success1,602
Jun 10, 2026 07:53Victor MerckléVictor MerckléCPPclang++18.1.3Success1,573
Jun 10, 2026 07:48Victor MerckléVictor MerckléCPPclang++18.1.3Success1,498+26.68 RP
Jun 10, 2026 07:40Victor MerckléVictor MerckléCPPclang++18.1.3Success1,543
Jun 10, 2026 07:35Victor MerckléVictor MerckléCPPclang++18.1.3Success1,788
Jun 10, 2026 07:29Victor MerckléVictor MerckléCPPclang++18.1.3Success1,518
Jun 10, 2026 07:24Victor MerckléVictor MerckléCPPclang++18.1.3Success1,685
Jun 10, 2026 07:17Victor MerckléVictor MerckléCPPclang++18.1.3Success1,542
Jun 10, 2026 07:10Victor MerckléVictor MerckléCPPclang++18.1.3Success1,516
Jun 10, 2026 07:04Victor MerckléVictor MerckléCPPclang++18.1.3Success1,516
Jun 10, 2026 06:58Victor MerckléVictor MerckléCPPclang++18.1.3Success1,526
Jun 10, 2026 06:52Victor MerckléVictor MerckléCPPclang++18.1.3Success1,672
Jun 10, 2026 06:43Victor MerckléVictor MerckléCPPclang++18.1.3Success1,544
Jun 8, 2026 17:17Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,509+558.94 RP
Jun 8, 2026 17:12Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jun 8, 2026 08:44Victor MerckléVictor MerckléCPPclang++18.1.3Success1,624
Jun 8, 2026 08:35Victor MerckléVictor MerckléCPPclang++18.1.3Success1,539
Jun 8, 2026 08:26Victor MerckléVictor MerckléCPPclang++18.1.3Success1,603
Jun 8, 2026 08:15Victor MerckléVictor MerckléCPPclang++18.1.3Success1,730