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 16, 2026 18:03marko1597marko1597CPPclang++19.1.1Error
Aug 16, 2026 18:03marko1597marko1597CPPclang++20.1.2Error
Aug 16, 2026 18:03marko1597marko1597CPPg++11.5.0Error
Aug 16, 2026 18:03marko1597marko1597CPPg++12.4.0Error
Aug 16, 2026 18:03marko1597marko1597CPPg++13.3.0Error
Aug 16, 2026 17:52marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:52marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:51marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:44marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:44marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:43marko1597marko1597CPPg++14.2.0Error+1'191.20 RP
Aug 16, 2026 17:37marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:37marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 17:37marko1597marko1597CPPg++14.2.0Error+334.61 RP
Aug 16, 2026 17:37marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:27marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:27marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:27marko1597marko1597CPPg++14.2.0Error+45.56 RP
Aug 16, 2026 15:22marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:22marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:22marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:13marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 15:13marko1597marko1597CPPg++14.2.0Error+5'843.35 RP
Aug 16, 2026 15:00marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 14:14marko1597marko1597CPPg++14.2.0Success33,854+4.84 RP
Aug 16, 2026 14:14marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 14:14marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 13:28marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 13:20marko1597marko1597CPPg++14.2.0Success34,418+3.80 RP
Aug 16, 2026 13:17marko1597marko1597CPPg++14.2.0Error+286.75 RP
Aug 16, 2026 13:07marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 13:07marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 01:00Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+55.10 RP
Aug 16, 2026 00:47Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+94.68 RP
Aug 15, 2026 06:31Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+252.68 RP
Aug 15, 2026 06:23Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+178.00 RP
Aug 15, 2026 06:19Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+141.37 RP
Aug 15, 2026 06:06Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+235.37 RP
Aug 15, 2026 00:42Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+1'949.14 RP
Aug 14, 2026 17:01Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+1'152.02 RP
Aug 14, 2026 16:15Tomislav TunkovicTomislav TunkovicCPPclang++20.1.2Error+4'268.03 RP
Aug 14, 2026 14:24Tomislav TunkovicTomislav TunkovicCPPclang++18.1.3Error
Aug 13, 2026 10:09Yehor BondarYehor BondarCPPg++14.2.0Success266,847+37.47 RP
Aug 3, 2026 11:00Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 3, 2026 10:50Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 3, 2026 10:39Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 10:32Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:40Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:35Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 3, 2026 03:30Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:20Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:10Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 3, 2026 03:02Victor MerckléVictor MerckléCPPg++14.2.0Error+5.00 RP
Aug 2, 2026 20:31Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 2, 2026 20:26Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 2, 2026 20:18Victor MerckléVictor MerckléCPPg++14.2.0Error
Jul 31, 2026 06:16TonyTonyCPPg++10.5.0Success279,162+35.82 RP
Jul 14, 2026 11:46Andrew TsibinAndrew TsibinRUSTrust-1.95.0Error+1'736.15 RP
Jul 14, 2026 10:49Andrew TsibinAndrew TsibinRUSTrust-1.95.0Error+3'947.23 RP
Jul 14, 2026 01:18Andrew TsibinAndrew TsibinRUSTrust-1.95.0Error+168.00 RP
Jul 13, 2026 22:34Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 13, 2026 22:30Victor MerckléVictor MerckléCPPg++14.2.0Error
Jul 13, 2026 22:23Victor MerckléVictor MerckléCPPg++14.2.0Error
Jul 11, 2026 04:09RayRayCPPg++10.5.0Success276,287+36.19 RP
Jul 10, 2026 18:40Genos0Genos0CPPg++10.5.0Success309,155+32.35 RP
Jul 9, 2026 19:12Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 9, 2026 19:03Victor MerckléVictor MerckléCPPclang++18.1.3Success4,959
Jul 9, 2026 18:50Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 9, 2026 18:45Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 9, 2026 18:40Victor MerckléVictor MerckléCPPclang++18.1.3Success2,336
Jul 9, 2026 18:21Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 9, 2026 18:15Victor MerckléVictor MerckléCPPclang++18.1.3Success4,573
Jul 7, 2026 22:46Victor MerckléVictor MerckléZIG0.16.0Error
Jul 7, 2026 17:58Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jul 7, 2026 15:40Victor MerckléVictor MerckléZIG0.16.0Error
Jul 7, 2026 06:04Victor MerckléVictor MerckléCSHARP10.0.7Error
Jul 7, 2026 05:01Victor MerckléVictor MerckléZIG0.16.0Error
Jul 7, 2026 04:25Victor MerckléVictor MerckléZIG0.16.0Error
Jul 7, 2026 03:59Victor MerckléVictor MerckléGOgo1.26.2Error
Jul 7, 2026 03:52Victor MerckléVictor MerckléRUSTrust-1.95.0Error
Jul 7, 2026 02:07Victor MerckléVictor MerckléCPPclang++18.1.3Success2,435
Jul 7, 2026 01:59Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 6, 2026 23:05Victor MerckléVictor MerckléCPPclang++18.1.3Error+39.15 RP
Jul 6, 2026 22:57Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 6, 2026 22:50Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 6, 2026 22:45Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 6, 2026 22:40Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 6, 2026 22:31Victor MerckléVictor MerckléCPPclang++18.1.3Error+38.77 RP
Jul 6, 2026 22:26Victor MerckléVictor MerckléCPPclang++18.1.3Error+617.32 RP
Jul 6, 2026 22:14Victor MerckléVictor MerckléCPPclang++18.1.3Error+5.00 RP
Jul 5, 2026 23:32Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:46Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:41Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:36Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:31Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:26Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:20Victor MerckléVictor MerckléCPPclang++18.1.3Error+160.79 RP
Jul 3, 2026 13:13Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jul 3, 2026 13:08Victor MerckléVictor MerckléCPPclang++18.1.3Error