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
Mar 31, 2026 10:52Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 31, 2026 10:49Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 31, 2026 10:47Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 31, 2026 10:45Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 31, 2026 10:41Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:38Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:36Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:31Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:29Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:21Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 31, 2026 10:17Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,605
Mar 31, 2026 10:16Dominique GarmierDominique GarmierCPPg++13.3.0Success21,054
Mar 31, 2026 00:41olliecrowolliecrowCPPg++13.3.0Success7,612
Mar 31, 2026 00:24olliecrowolliecrowCPPg++13.3.0Success6,227
Mar 31, 2026 00:21olliecrowolliecrowCPPg++13.3.0Success6,295
Mar 31, 2026 00:17olliecrowolliecrowCPPg++13.3.0Success6,143
Mar 31, 2026 00:13olliecrowolliecrowCPPg++13.3.0Success5,874
Mar 30, 2026 23:54Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,527
Mar 30, 2026 22:10Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 30, 2026 01:06Dominique GarmierDominique GarmierRUSTrust-1.94.1Success19,160
Mar 28, 2026 11:50Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 28, 2026 01:56olliecrowolliecrowRUSTrust-1.94.1Success5,093+179.04 RP
Mar 27, 2026 21:02Dominique GarmierDominique GarmierRUSTrust-1.94.1Success126,310
Mar 27, 2026 20:20Dominique GarmierDominique GarmierRUSTrust-1.94.0Success16,535
Mar 27, 2026 20:16Dominique GarmierDominique GarmierRUSTrust-1.94.0Success153,489
Mar 27, 2026 20:15Dominique GarmierDominique GarmierRUSTrust-1.94.1Success155,999
Mar 27, 2026 20:13Dominique GarmierDominique GarmierRUSTrust-1.94.1Success155,389
Mar 27, 2026 20:07Dominique GarmierDominique GarmierRUSTrust-1.94.1Success162,063
Mar 27, 2026 17:09Dominique GarmierDominique GarmierRUSTrust-1.94.0Success17,426
Mar 27, 2026 16:23Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,827
Mar 27, 2026 15:25Dominique GarmierDominique GarmierCPPclang++18.1.3Success21,592
Mar 27, 2026 15:18Dominique GarmierDominique GarmierRUSTrust-1.94.1Success153,801
Mar 27, 2026 14:13Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,025
Mar 27, 2026 14:12Dominique GarmierDominique GarmierCPPg++13.3.0Success19,291
Mar 26, 2026 13:04Dominique GarmierDominique GarmierCPPg++13.3.0Success19,835
Mar 26, 2026 12:17Dominique GarmierDominique GarmierCPPclang++18.1.3Success14,659
Mar 26, 2026 12:15Dominique GarmierDominique GarmierCPPclang++18.1.3Success21,260
Mar 26, 2026 12:08Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,552
Mar 26, 2026 11:47Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,793
Mar 26, 2026 10:58Dominique GarmierDominique GarmierRUSTrust-1.94.0Success19,056
Mar 25, 2026 21:53Dominique GarmierDominique GarmierRUSTrust-1.94.0Success136,944
Mar 25, 2026 21:07Dominique GarmierDominique GarmierZIG0.13.0Success16,950
Mar 25, 2026 20:55Dominique GarmierDominique GarmierZIG0.13.0Success29,461
Mar 25, 2026 20:03Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 25, 2026 19:04Dominique GarmierDominique GarmierZIG0.13.0Success397,472
Mar 25, 2026 18:49Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 25, 2026 11:43Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,594
Mar 25, 2026 11:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,332
Mar 25, 2026 11:15Dominique GarmierDominique GarmierCPPclang++18.1.3Success27,945
Mar 25, 2026 07:42Dominique GarmierDominique GarmierCPPg++13.3.0Success26,822
Mar 25, 2026 07:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,029
Mar 25, 2026 07:19Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,879
Mar 25, 2026 07:14Dominique GarmierDominique GarmierCPPclang++18.1.3Success28,514
Mar 25, 2026 04:16Dominique GarmierDominique GarmierGOgo1.26.1Success25,293
Mar 25, 2026 03:32Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,719
Mar 25, 2026 03:06Dominique GarmierDominique GarmierCPPg++13.3.0Success17,254
Mar 25, 2026 02:16Dominique GarmierDominique GarmierGOgo1.26.1Error
Mar 25, 2026 01:20Dominique GarmierDominique GarmierCPPg++13.3.0Success26,469
Mar 25, 2026 00:47Dominique GarmierDominique GarmierRUSTrust-1.94.0Success16,175
Mar 24, 2026 23:32Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,941
Mar 24, 2026 22:53Dominique GarmierDominique GarmierRUSTrust-1.94.0Success170,741
Mar 24, 2026 22:27Dominique GarmierDominique GarmierRUSTrust-1.94.0Success159,786
Mar 24, 2026 22:16Dominique GarmierDominique GarmierRUSTrust-1.94.0Success312,515
Mar 24, 2026 22:06Dominique GarmierDominique GarmierCPPclang++18.1.3Success26,698
Mar 24, 2026 22:06Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,259
Mar 24, 2026 22:03Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 24, 2026 14:19Dominique GarmierDominique GarmierRUSTrust-1.94.0Success16,909
Mar 24, 2026 13:09Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,728
Mar 24, 2026 12:50Dominique GarmierDominique GarmierRUSTrust-1.94.0Success142,303
Mar 24, 2026 07:08Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,608
Mar 24, 2026 06:26Dominique GarmierDominique GarmierRUSTrust-1.94.0Success49,142
Mar 24, 2026 06:23Dominique GarmierDominique GarmierGOgo1.26.1Success53,374
Mar 24, 2026 04:49olliecrowolliecrowRUSTrust-1.94.0Success7,045
Mar 24, 2026 00:14Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,380
Mar 23, 2026 20:36Dominique GarmierDominique GarmierCPPclang++18.1.3Success35,889
Mar 23, 2026 18:37Dominique GarmierDominique GarmierCPPclang++18.1.3Success38,050
Mar 23, 2026 01:42olliecrowolliecrowRUSTrust-1.94.0Success7,601
Mar 23, 2026 01:39olliecrowolliecrowCPPclang++18.1.3Success5,604+104.61 RP
Mar 22, 2026 19:47Dominique GarmierDominique GarmierGOgo1.26.1Success403,093
Mar 22, 2026 15:18Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,873
Mar 22, 2026 15:10Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,628
Mar 22, 2026 13:51Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,582
Mar 22, 2026 12:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,399
Mar 22, 2026 10:54Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,583
Mar 22, 2026 07:46Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,471
Mar 21, 2026 23:41Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,213
Mar 21, 2026 23:40Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,979
Mar 21, 2026 22:13Dominique GarmierDominique GarmierCPPclang++18.1.3Success14,598+50.99 RP
Mar 21, 2026 22:12Dominique GarmierDominique GarmierCPPclang++18.1.3Success15,772+14.15 RP
Mar 21, 2026 19:54Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,301
Mar 21, 2026 19:53Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,296
Mar 21, 2026 19:49Yuriy LyfenkoYuriy LyfenkoCPPg++13.3.0Success2,611
Mar 21, 2026 19:45Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,319
Mar 21, 2026 19:40Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,295+180.19 RP
Mar 21, 2026 18:24Dominique GarmierDominique GarmierRUSTrust-1.94.0Success18,904
Mar 21, 2026 16:08Dominique GarmierDominique GarmierRUSTrust-1.94.0Success20,062
Mar 21, 2026 15:15Dominique GarmierDominique GarmierRUSTrust-1.94.0Success19,833
Mar 21, 2026 15:13Dominique GarmierDominique GarmierRUSTrust-1.94.0Success21,132
Mar 21, 2026 15:10Dominique GarmierDominique GarmierRUSTrust-1.94.0Success20,643
Mar 21, 2026 15:08Dominique GarmierDominique GarmierRUSTrust-1.94.0Success18,406