Case study · Product engineering
A paper-trading platform with a broker-grade order engine
We built a simulated trading platform end to end: market and limit orders, short selling, positions and balances, a backtesting engine that replays historical prices, and a back office for operations.
- Client
- Bingeable Tech product (retired)
- Service
- Fintech product engineering
- Duration
- 11 months (March 2022 to February 2023)
- Team
- 6 engineers: backend, frontend and back office
- Stack
- .NET microservices, background workers, API gateway, Angular, SQL
01
Context
Paper trading lets people practice with simulated money against market prices. To feel real, the platform had to behave like a broker: orders move through the same states, positions open and close, balances update, and anything that happened can be reviewed afterwards.
We built it as our own product, as separate services for identity, orders, market data and backtesting, behind an API gateway.
02
Constraints
- Regulatory
- No real money moved, but the platform followed broker conventions so it behaved the way traders expect: day orders, short selling with buy-to-cover, and positions that expire.
- Data
- Balances, orders and positions are held per account, and every order's change of state is recorded.
- Integration
- Market prices come in through a feed service; backtests replay stored historical prices from memory for speed.
03
What we built
Orders are accepted by the order service and processed by a separate execution worker that runs every second, so placing an order never waits on execution. Every order moves through explicit states, from created and open to filled, completed, canceled or rejected, and each fill updates the account's positions and balance.
A backtesting engine loads historical prices into memory and replays them from a chosen start date. Traders use an Angular web app, and the operations team has a back office for users, orders and reports.
- Order service with a separate execution worker
- Market and limit orders; buy, sell, short and buy-to-cover; day time-in-force
- Positions and balances updated on every fill, with expiry handling
- Identity service and API gateway in front of the services
- Backtesting engine that replays historical prices from memory
- Angular trading app and an operations back office with order management and reports
04
Architecture
05
Results
- order states tracked, from created to filled, canceled or rejected
- 7
- execution cycle for pending orders
- 1 second
- order sides: buy, sell, short and buy-to-cover
- 4
- from first commit to the complete platform
- 11 months
The product has since been retired. The engineering carries straight over to client platforms: explicit order states that can be audited, execution kept apart from order entry, and historical data that can be replayed to check behavior.
Figures are as measured and approved by the client. We don't publish numbers we can't verify.