На бирже проходят торги по акциям некоторой компании.
Новостные сайты публикуют информацию об успешности этой компании. В случае, если новости в основном положительные, трейдеры могут сделать более выгодное предложение о покупке, чем те, что есть данный момент. В случае негативных новостей, трейдеры постараются эти акции продать.
Торговую биржу, новостные сайты и трейдеров реализовать в виде акторов, живущих в отдельных процессах. Четвёртый процесс отображает на пользовательском интерфейсе новости и ход торгов.
Сервер биржи принимает ордера на покупку и продажу, а также сообщает о лучших ценах. Закрытие (исполнение) ордеров происходит только в момент обработки нового ордера. Если новый ордер хуже чем существующие, то он запоминается. Если лучше - система проходит по отсортированным ордерам другого класса и пытается закрыть новый ордер.
Релизация модели акторов - Akka. Пользовательский интерфейс - JavaFX.
Системы акторов расположены на различных портах (задаётся в файле application.conf
):
- 127.0.0.1:59001 - сервер биржи,
- 127.0.0.1:59002 - новостные сайты,
- 127.0.0.1:59003 - все трейдеры,
- 127.0.0.1:59004 - пользовательский интерфейс.
Сервер биржи и новостные сайты только отвечают на запросы. Трейдеры получают новости, текущие цены и добавляют новые ордера. Пользовательский интерфейс (через актор сбора статистики) получает новости и текущие цены.
Последовательно запустить (например, в IntelliJ IDEA):
perm.tryfuture.exchange.ExchangeServer
perm.tryfuture.exchange.NewsServer
perm.tryfuture.exchange.UI
perm.tryfuture.exchange.Trader
- У трейдеров нет состояния (количества акций и денег). Трейдер может купить/продать бесконечно много акций.
- При смене новостей трейдер может закрыть новым ордером свой же ордер.