Провожу тренинг для студентов, на котором они между собой торгуют акциями. На данный момент формат проведения - как на старых биржах, где торговцы на площадке (в яме) выкрикивали свои предложения и заключали сделки. Хотелось бы автоматизировать процесс.
Схема работы симулятора: студенты подают заявки с ценой и количеством акций, которые они хотят приобрести или продать. Эта информация отображается для всех участников торгов. Они могут принять заявку, осуществив таким образом сделку.
Вопрос касается скорее даже архитектуры. Интересует, каким образом лучше построить симулятор и какие навыки / инструменты нужны для такого решения. Мой опыт в программировании ограничивается несложными программами на python, но я готов к освоению необходимых знаний.
Архитектура на коленке - пользователи выставляют заявки (кол-во - цена), затем их обрабатывает отдельный биржевой демон, который проверяет новые ордера, если они по цене совпали - совершает сделку, увеличивая балансы покупателя и продавца.
Всё очень просто, если не внедрять сложные биржевые инструменты типа маржинального кредитования. Демон берет первый необработанный ордер, ищет среди уже обработанных встречный ордер с подходящей ценой, если не находит, то просто помечает текущий как исполненный и берет следущий...а если находит встречный то совершает сделку (уменьшает суммы и кол-ва по ордерам и увеличивает балансы пользователей выставивших эти ордера)
Вполне это все можно сделать и в вебе. Есть сервер, есть клиенты, которые сокетами коннектятся к серверу (здесть хоть node.js, хоть python, что душе угодно). От клиентов (браузер) вам приходят либо ордер "тикер – сторона – цена – кол-во", либо заявка на снятие ордера. Пришла заявка - присваиваете ей ид, сохраняете. Либо удаляете заявку по пришедшему ид. На основании этого вы собираете стаканы по каждому инструменту на сервере. При изменении стакана отправляете либо только изменение, либо (проще) полностью весь снапшот стакана всем подключенным клиентам. Все.