Напишите программу для простейшего матчинга заявок на упрощенной бирже. На бирже торгуется четыре ценных бумаги (A, B, C и D). Базовая валюта биржи - доллар ($).
Входные данные для программы содержатся в двух файлах. Первый файл (clients.txt) содержит список клиентов биржи с указанием их исходных балансов по торгующимся ценным бумагам и доллару. Второй файл (orders.txt) — это список заявок от клиентов в хронологическом порядке. Результатом работы программы является файл result.txt аналогичный по структуре файлу clients.txt и содержащий состояние балансов всех клиетов после обработки всех заявок.
Реализация должна быть на Scala.
Каждая строка тесктового файла содержит одну запись. Поля записи отделяются друг от друга с помощью символа табуляции (\t). Имена клиентов, названия ценных бумаг - строки, состоящие из буквенных и цифровых символов ASCII без разделителей. Числовые значения представлены целыми числами.
Файл списка клиетов имеет следующие поля:
- Имя клиента
- Баланс клиента по долларам
- Баланс клиента по ценной бумаге A в штуках
- Баланс по ценной бумаге B
- Баланс по ценной бумаге C
- Баланс по ценной бумаге D
Пример нескольких строк файла:
C1 1000 10 5 15 0
C2 2000 3 35 40 10
Файл списка заявок имеет формат:
- Имя клиента выставившего заявку
- Символ операции:
s- продажа илиb- покупка. - Наименование ценной бумаги
- Цена заявки (целое число за одну штуку ценной бумаги)
- Количество продаваемых или покупаемых ценных бумаг
Пример нескольких строк файла:
C1 b A 10 12
C2 s A 8 10
- Состояние счетов клиентов можно обрабатывать без транзакций.
- Балансы клиентов не могут уходить в минус. Заявки, не обеспеченные нужным количеством валюты (при покупке) или ценных бумаг (при продаже), должны отвергаться. Например:
C1 1000 10 5 15 0 C2 2000 3 35 40 10Заявка (1) должна быть отвергнута, потому что у С1 недостаточно валюты для того, чтобы купить 10 бумаг A по цене 150$. Заявка (2) должна быть отвергнута, потому что у С2 есть только 35 бумаг В.C1 b A 10 150 (1) C2 s B 40 10 (2) - Реализовать частичное сопоставление заявок:
Заявка 1 и 2 должна частично сопоставиться т.е. заявка 2 полностью погасится, заявка 1 погасится частично и изменит стейт на
C1 b A 10 12 (1) C2 s A 8 10 (2)C1 b A 2 12. - Заявки на исполнение по одной цене должны исполняться в порядке поступления:
В такой ситуации сначала сопоставятся заявки (3) и (1), (1) полностью погасится, а затем остаток от (3) сопоставится с заявкой (2).
C1 b A 10 10 (1) C2 b A 10 10 (2) C3 s A 10 15 (3)
- Основной результат - программа, которая обработав данные клиентов и список заявок (
clients.txtиorders.txt) генерирует файл конечного состояния счетов клиентов (results.txt).- программа должна запускаться через
sbt run(или любым другим способом, описанном в README)
- программа должна запускаться через
- Исходный код проекта на Github
- Набор unit-тестов (тесты, естественно, должны проходить)