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
May 6, 2026 15:26Dominique GarmierDominique GarmierCPPg++10.5.0Error
May 6, 2026 15:25Dominique GarmierDominique GarmierCPPg++10.5.0Error
May 6, 2026 15:23Dominique GarmierDominique GarmierCPPg++10.5.0Success16,625
May 6, 2026 12:34olliecrowolliecrowGOgo1.26.2Success6,650
May 6, 2026 11:23olliecrowolliecrowZIG0.14.0Success6,030
May 6, 2026 10:06olliecrowolliecrowRUSTrust-1.94.0Success5,022
May 6, 2026 09:04olliecrowolliecrowGOgo1.26.2Error
May 6, 2026 08:43olliecrowolliecrowCSHARP10.0.7Success5,394
May 6, 2026 08:38olliecrowolliecrowCSHARP9.0.15Success5,590
May 6, 2026 05:01olliecrowolliecrowCSHARP10.0.7Success5,488
May 6, 2026 02:45olliecrowolliecrowRUSTrust-1.94.0Success7,433
May 6, 2026 00:35olliecrowolliecrowRUSTrust-1.94.0Success5,247
May 5, 2026 20:51olliecrowolliecrowRUSTrust-1.94.0Success5,394
May 5, 2026 18:49olliecrowolliecrowCSHARP10.0.7Success5,550
May 5, 2026 18:37olliecrowolliecrowCSHARP10.0.7Success5,540
May 5, 2026 18:30olliecrowolliecrowCSHARP9.0.15Success5,926
May 5, 2026 18:25olliecrowolliecrowCSHARP9.0.15Error
May 5, 2026 18:15olliecrowolliecrowCPPclang++18.1.3Success5,309
May 5, 2026 17:55olliecrowolliecrowCPPg++10.5.0Success5,180
May 5, 2026 17:43olliecrowolliecrowGOgo1.26.2Success6,069
May 5, 2026 17:35olliecrowolliecrowGOgo1.26.2Error
May 5, 2026 15:46olliecrowolliecrowGOgo1.26.2Error
May 5, 2026 15:41olliecrowolliecrowGOgo1.26.2Error
May 5, 2026 15:11olliecrowolliecrowCSHARP9.0.15Success5,609
May 5, 2026 13:40Victor MerckléVictor MerckléZIG0.16.0Success1,731
May 5, 2026 13:22Victor MerckléVictor MerckléCSHARP10.0.7Success1,831
May 5, 2026 13:06Victor MerckléVictor MerckléZIG0.16.0Success1,674+216.66 RP
May 5, 2026 12:47Victor MerckléVictor MerckléCSHARP10.0.7Success1,915
May 5, 2026 12:41Victor MerckléVictor MerckléZIG0.16.0Success1,737+145.38 RP
May 5, 2026 09:50Victor MerckléVictor MerckléCPPg++14.2.0Error
May 5, 2026 09:39Victor MerckléVictor MerckléCPPclang++18.1.3Success1,609+84.40 RP
May 5, 2026 09:25Victor MerckléVictor MerckléCPPclang++18.1.3Success1,785
May 5, 2026 09:16Victor MerckléVictor MerckléCPPclang++18.1.3Success1,719
May 5, 2026 09:12Victor MerckléVictor MerckléCPPclang++18.1.3Success1,711
May 5, 2026 09:09Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,749+479.21 RP
May 5, 2026 09:07Victor MerckléVictor MerckléCPPclang++18.1.3Success1,802
May 5, 2026 09:00Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,909+43.54 RP
May 5, 2026 08:50Victor MerckléVictor MerckléZIG0.16.0Success1,782+2'083.09 RP
May 5, 2026 08:41Victor MerckléVictor MerckléRUSTrust-1.95.0Error
May 5, 2026 08:35Victor MerckléVictor MerckléGOgo1.26.2Success1,779+544.99 RP
May 5, 2026 08:27Victor MerckléVictor MerckléCSHARP10.0.7Success1,817+2'298.45 RP
May 5, 2026 08:21Victor MerckléVictor MerckléZIG0.16.0Error
May 5, 2026 08:17Victor MerckléVictor MerckléRUSTrust-1.95.0Error
May 5, 2026 08:14olliecrowolliecrowCPPclang++18.1.3Success5,195
May 5, 2026 08:14Victor MerckléVictor MerckléZIG0.16.0Error
May 5, 2026 05:32olliecrowolliecrowRUSTrust-1.94.0Success5,081
May 5, 2026 04:28olliecrowolliecrowGOgo1.26.2Success6,166
May 5, 2026 02:20olliecrowolliecrowGOgo1.26.2Success5,969
May 5, 2026 02:09olliecrowolliecrowGOgo1.26.2Success6,386
May 5, 2026 01:59olliecrowolliecrowZIG0.14.0Success5,427
May 5, 2026 01:51olliecrowolliecrowZIG0.14.0Success5,485
May 5, 2026 01:45olliecrowolliecrowCPPclang++18.1.3Success5,151
May 4, 2026 22:00olliecrowolliecrowCPPclang++18.1.3Success5,236
May 4, 2026 13:01Victor MerckléVictor MerckléCPPg++14.2.0Success124,281
May 4, 2026 12:16Victor MerckléVictor MerckléCPPg++14.2.0Error
May 4, 2026 11:57Victor MerckléVictor MerckléCPPclang++18.1.3Success1,620+2'561.61 RP
May 4, 2026 11:51Victor MerckléVictor MerckléCPPg++14.2.0Success389,178
May 4, 2026 11:45Victor MerckléVictor MerckléCPPclang++18.1.3Error
May 4, 2026 11:21Victor MerckléVictor MerckléCPPclang++18.1.3Error
May 4, 2026 11:14Victor MerckléVictor MerckléCPPclang++18.1.3Error
May 1, 2026 09:35Dominique GarmierDominique GarmierCPPg++14.2.0Success16,943
May 1, 2026 09:34Dominique GarmierDominique GarmierCPPclang++20.1.2Success13,849
May 1, 2026 09:32Dominique GarmierDominique GarmierCPPg++10.5.0Success17,429
May 1, 2026 05:16olliecrowolliecrowGOgo1.26.2Success5,956
May 1, 2026 04:45olliecrowolliecrowCPPg++10.5.0Success5,564
May 1, 2026 00:13olliecrowolliecrowCPPg++10.5.0Success5,786
Apr 30, 2026 15:12Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,925+940.92 RP
Apr 30, 2026 15:05Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 14:48Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 14:06Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 13:59Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 13:52Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 13:38Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Apr 30, 2026 13:11Victor MerckléVictor MerckléGOgo1.26.2Success1,970+3'973.99 RP
Apr 30, 2026 12:14Charles CabergsCharles CabergsCPPg++13.3.0Success35,220+16.08 RP
Apr 30, 2026 11:57Victor MerckléVictor MerckléCSHARP10.0.7Success3,120+1'786.49 RP
Apr 30, 2026 11:40Victor MerckléVictor MerckléZIG0.16.0Success2,834+1'998.01 RP
Apr 30, 2026 11:27Victor MerckléVictor MerckléCPPg++14.2.0Success3,054+3'032.96 RP
Apr 30, 2026 10:45Victor MerckléVictor MerckléCPPg++14.2.0Success112,054
Apr 30, 2026 10:30Victor MerckléVictor MerckléCPPg++14.2.0Success116,948
Apr 30, 2026 10:23Victor MerckléVictor MerckléCPPg++14.2.0Success112,090
Apr 30, 2026 10:00Victor MerckléVictor MerckléCPPg++14.2.0Success112,880
Apr 30, 2026 09:39Victor MerckléVictor MerckléCPPg++14.2.0Success126,704
Apr 29, 2026 23:20olliecrowolliecrowGOgo1.26.2Success6,148
Apr 29, 2026 23:15Charles CabergsCharles CabergsCPPg++13.3.0Success37,335+98.35 RP
Apr 29, 2026 12:21olliecrowolliecrowCPPg++13.3.0Success5,284
Apr 29, 2026 11:35Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,301
Apr 29, 2026 07:20olliecrowolliecrowRUSTrust-1.95.0Success5,104
Apr 29, 2026 07:01olliecrowolliecrowGOgo1.26.2Success5,989
Apr 28, 2026 23:26Charles CabergsCharles CabergsCPPg++13.3.0Success61,101
Apr 28, 2026 23:26olliecrowolliecrowCPPg++10.5.0Success5,661
Apr 28, 2026 13:43Dominique GarmierDominique GarmierCPPclang++18.1.3Success100,775
Apr 28, 2026 12:46Dominique GarmierDominique GarmierCPPclang++20.1.2Success63,778
Apr 28, 2026 12:42Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,371
Apr 28, 2026 12:41Dominique GarmierDominique GarmierCPPclang++20.1.2Success14,379
Apr 28, 2026 12:34Dominique GarmierDominique GarmierCPPg++13.3.0Success19,329
Apr 28, 2026 10:46Victor MerckléVictor MerckléCPPg++14.2.0Success129,856
Apr 28, 2026 10:39Victor MerckléVictor MerckléCPPg++14.2.0Success128,201
Apr 28, 2026 10:10Victor MerckléVictor MerckléCPPg++14.2.0Success118,942
Apr 28, 2026 09:58Victor MerckléVictor MerckléCPPg++14.2.0Success120,357