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
Jul 2, 2026 05:49A_ShamanA_ShamanCPPg++10.5.0Error
Jul 2, 2026 05:34A_ShamanA_ShamanCPPg++10.5.0Success270,675
Jul 2, 2026 05:23A_ShamanA_ShamanCPPg++10.5.0Success106,658
Jul 2, 2026 05:15A_ShamanA_ShamanCPPg++10.5.0Error
Jul 2, 2026 05:05A_ShamanA_ShamanCPPg++10.5.0Success257,595
Jul 2, 2026 04:48A_ShamanA_ShamanCPPg++10.5.0Success141,432
Jul 2, 2026 04:20A_ShamanA_ShamanCPPg++10.5.0Success112,038
Jun 30, 2026 16:02Victor MerckléVictor MerckléCPPclang++18.1.3Error+10.47 RP
Jun 30, 2026 15:57Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 30, 2026 15:49Victor MerckléVictor MerckléCPPg++14.2.0Success7,121
Jun 30, 2026 03:31Victor MerckléVictor MerckléGOgo1.26.2Error
Jun 29, 2026 01:12Victor MerckléVictor MerckléGOgo1.26.2Error
Jun 28, 2026 01:57Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jun 28, 2026 01:41Victor MerckléVictor MerckléGOgo1.26.2Error
Jun 27, 2026 10:17Victor MerckléVictor MerckléGOgo1.26.2Error
Jun 27, 2026 05:49Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jun 27, 2026 05:44Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jun 27, 2026 05:39Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jun 26, 2026 18:51A_ShamanA_ShamanCPPg++10.5.0Success115,277
Jun 26, 2026 18:47A_ShamanA_ShamanCPPg++10.5.0Success113,495
Jun 26, 2026 18:42A_ShamanA_ShamanCPPg++10.5.0Success106,876
Jun 26, 2026 18:35A_ShamanA_ShamanCPPg++10.5.0Success119,562
Jun 26, 2026 18:32A_ShamanA_ShamanCPPg++10.5.0Success103,299
Jun 21, 2026 13:31Zhou180Zhou180CPPclang++20.1.2Error+1'468.66 RP
Jun 21, 2026 10:26Zhou180Zhou180CPPclang++20.1.2Error+25.80 RP
Jun 21, 2026 10:26Zhou180Zhou180CPPg++14.2.0Success3,042
Jun 21, 2026 10:24Zhou180Zhou180CPPg++10.5.0Success2,851
Jun 21, 2026 10:22Zhou180Zhou180CPPg++10.5.0Error+136.76 RP
Jun 21, 2026 10:18Zhou180Zhou180CPPg++10.5.0Success2,905+10.63 RP
Jun 21, 2026 10:15Zhou180Zhou180CPPg++10.5.0Error+40.73 RP
Jun 21, 2026 10:12Zhou180Zhou180CPPg++10.5.0Success3,055
Jun 21, 2026 10:08Zhou180Zhou180CPPg++10.5.0Success3,094
Jun 21, 2026 10:03Zhou180Zhou180CPPg++10.5.0Success3,133
Jun 21, 2026 10:00Zhou180Zhou180CPPg++10.5.0Success3,026
Jun 21, 2026 08:25Zhou180Zhou180CPPg++10.5.0Error+63.19 RP
Jun 21, 2026 08:23Zhou180Zhou180CPPg++10.5.0Success3,011
Jun 21, 2026 08:21Zhou180Zhou180CPPg++10.5.0Success3,129
Jun 21, 2026 08:19Zhou180Zhou180CPPg++10.5.0Error+66.21 RP
Jun 21, 2026 08:17Zhou180Zhou180CPPg++14.2.0Error+175.16 RP
Jun 21, 2026 08:16Zhou180Zhou180CPPclang++18.1.3Error+1'850.17 RP
Jun 21, 2026 08:12Zhou180Zhou180CPPclang++18.1.3Error+138.07 RP
Jun 21, 2026 08:07Zhou180Zhou180CPPclang++18.1.3Error
Jun 21, 2026 08:02Zhou180Zhou180CPPclang++18.1.3Error+1'023.26 RP
Jun 21, 2026 07:45Zhou180Zhou180CPPclang++18.1.3Success133,486+74.91 RP
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.3Error
Jun 19, 2026 11:36Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 11:31Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 11:22Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 11:12Victor MerckléVictor MerckléCPPclang++18.1.3Success3,683
Jun 19, 2026 03:23Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 03:17Victor MerckléVictor MerckléCPPclang++18.1.3Success2,387
Jun 19, 2026 03:10Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 02:59Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 02:53Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 02:48Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 19, 2026 02:43Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 19:12Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 19:07Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 19:02Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 18:57Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 18:52Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 18:47Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 18:42Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 18:37Victor MerckléVictor MerckléCPPclang++18.1.3Error+178.47 RP
Jun 18, 2026 18:31Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 11:28Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 11:23Victor MerckléVictor MerckléCPPclang++18.1.3Error+150.87 RP
Jun 18, 2026 11:18Victor MerckléVictor MerckléCPPclang++18.1.3Error+144.55 RP
Jun 18, 2026 10:58Victor MerckléVictor MerckléCPPclang++18.1.3Error
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.3Error
Jun 18, 2026 00:54Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 00:49Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 13:06Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 13:01Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:56Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:51Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:46Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:41Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:36Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:31Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:19Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:14Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:09Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 17, 2026 12:04Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 13, 2026 18:19Victor MerckléVictor MerckléZIG0.16.0Error+81.19 RP
Jun 13, 2026 18:10Victor MerckléVictor MerckléZIG0.16.0Error
Jun 13, 2026 17:16Victor MerckléVictor MerckléCSHARP10.0.7Error