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 17, 2026 13:10Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:00Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:00Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:00Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:42Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:42Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:42Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:34Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:34Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:34Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:30Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:30Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:27Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:27Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:27Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:26Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:26Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:25Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:23Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:23Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:23Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:08Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:08Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:03Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:03Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 12:00Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 11:57Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 11:57Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 11:54Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 11:48Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 11:45Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 11:39Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 11:35Dominique GarmierDominique GarmierCPPclang++18.1.3Success32,063
Mar 17, 2026 11:28Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 11:28Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 11:21Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 16, 2026 16:25Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:24Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:22Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:21Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:19Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:08Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:02Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 16:00Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 15:58Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 15:58Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 15:19Dominique GarmierDominique GarmierCPPg++13.3.0Success27,157
Mar 16, 2026 15:00Dominique GarmierDominique GarmierCPPg++13.3.0Success21,583+124.47 RP
Mar 16, 2026 14:58Dominique GarmierDominique GarmierCPPg++13.3.0Success33,138
Mar 16, 2026 14:48Dominique GarmierDominique GarmierCPPg++13.3.0Success90,317
Mar 16, 2026 14:03Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 14:01Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 13:43Dominique GarmierDominique GarmierCPPg++13.3.0Success45,753
Mar 16, 2026 13:26Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 13:23Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 16, 2026 11:12Dominique GarmierDominique GarmierCPPclang++18.1.3Success174,341
Mar 16, 2026 09:27Dominique GarmierDominique GarmierCPPclang++18.1.3Success118,906
Mar 16, 2026 09:24Dominique GarmierDominique GarmierCPPg++13.3.0Success53,125
Mar 15, 2026 23:39Dominique GarmierDominique GarmierCPPclang++18.1.3Success29,511+6.12 RP
Mar 15, 2026 23:10Dominique GarmierDominique GarmierCPPclang++18.1.3Success34,125
Mar 15, 2026 22:40Dominique GarmierDominique GarmierCPPclang++18.1.3Success49,638
Mar 15, 2026 22:33Dominique GarmierDominique GarmierCPPclang++18.1.3Success30,054+12.29 RP
Mar 15, 2026 22:15Dominique GarmierDominique GarmierCPPclang++18.1.3Success51,540
Mar 15, 2026 21:54Dominique GarmierDominique GarmierCPPclang++18.1.3Success36,689
Mar 15, 2026 21:33Dominique GarmierDominique GarmierCPPg++13.3.0Success39,232
Mar 15, 2026 04:57Josu San MartinJosu San MartinRUSTrust-1.94.0Success3,747
Mar 15, 2026 03:59Josu San MartinJosu San MartinCPPg++13.3.0Success3,636
Mar 15, 2026 03:15Carl BergmanCarl BergmanRUSTrust-1.90.0Success24,109+192.03 RP
Mar 15, 2026 03:01Carl BergmanCarl BergmanRUSTrust-1.90.0Success44,893+175.63 RP
Mar 14, 2026 16:55Dominique GarmierDominique GarmierCPPclang++18.1.3Success31,207+101.24 RP
Mar 14, 2026 14:44Dominique GarmierDominique GarmierCPPclang++18.1.3Success49,527
Mar 14, 2026 14:42Dominique GarmierDominique GarmierCPPclang++18.1.3Success45,621+6.01 RP
Mar 14, 2026 13:39Dominique GarmierDominique GarmierCPPclang++18.1.3Success56,858
Mar 14, 2026 13:33Dominique GarmierDominique GarmierCPPclang++18.1.3Success46,907+55.69 RP
Mar 14, 2026 13:17Dominique GarmierDominique GarmierCPPg++13.3.0Success64,975
Mar 14, 2026 13:14Dominique GarmierDominique GarmierCPPclang++18.1.3Success63,491+96.76 RP
Mar 14, 2026 11:46Dominique GarmierDominique GarmierCPPclang++18.1.3Success164,626+7.08 RP
Mar 14, 2026 11:39Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 14, 2026 11:30Dominique GarmierDominique GarmierCPPg++13.3.0Success186,336+6.04 RP
Mar 14, 2026 11:18Dominique GarmierDominique GarmierCPPg++13.3.0Success209,960+7.02 RP
Mar 14, 2026 11:00Dominique GarmierDominique GarmierCPPg++13.3.0Success251,926
Mar 13, 2026 23:30olliecrowolliecrowCPPclang++18.1.3Success5,988
Mar 13, 2026 23:21olliecrowolliecrowCPPclang++18.1.3Success5,953+63.79 RP
Mar 13, 2026 22:52olliecrowolliecrowCPPclang++18.1.3Success6,393
Mar 13, 2026 22:38olliecrowolliecrowCPPclang++18.1.3Error
Mar 13, 2026 22:37olliecrowolliecrowCPPclang++18.1.3Success6,835
Mar 13, 2026 22:33olliecrowolliecrowCPPclang++18.1.3Error
Mar 13, 2026 22:30olliecrowolliecrowCPPclang++18.1.3Error
Mar 13, 2026 22:22olliecrowolliecrowCPPclang++18.1.3Success6,188+84.87 RP
Mar 13, 2026 22:13olliecrowolliecrowCPPclang++18.1.3Error
Mar 13, 2026 19:40KeefeKeefeCPPg++13.3.0Success14,809
Mar 13, 2026 19:35KeefeKeefeCPPg++13.3.0Error
Mar 13, 2026 18:39KeefeKeefeCPPg++13.3.0Success14,466+499.51 RP
Mar 13, 2026 17:48KeefeKeefeCPPg++13.3.0Error
Mar 13, 2026 17:10Dominique GarmierDominique GarmierCPPg++13.3.0Success266,159
Mar 13, 2026 12:06Dominique GarmierDominique GarmierCPPg++13.3.0Success246,246+34.11 RP
Mar 13, 2026 11:46Dominique GarmierDominique GarmierRUSTrust-1.94.0Success1,537,397+6.50 RP
Mar 12, 2026 16:44JarnoJarnoRUSTrust-1.94.0Success82,190
Mar 12, 2026 16:41JarnoJarnoRUSTrust-1.94.0Error
Mar 12, 2026 16:36JarnoJarnoRUSTrust-1.94.0Success68,724+23.96 RP