Joel Grunbaum
2022-01-07 127d5af6f934b162c98a40ce414b98415d899cea
commit | author | age
bb2353 1 #pragma once
JG 2
3 #include <chrono>
127d5a 4 #include <cstddef>
bb2353 5 #include <iostream>
JG 6 #include <queue>
7 #include <string>
8 #include <vector>
127d5a 9 #include <algorithm>
bb2353 10
JG 11 enum OrderSideEnum { Buy, Sell };
12 enum ProductTypeEnum { TEST, FUTURE, SPREAD, CALL, PUT };
13
14 struct Order {
15   double price;
16   OrderSideEnum side;
17   int remaining_volume;
18   int filled_volume;
19   std::chrono::nanoseconds timestamp;
20   std::string id;
21   Order(double price, OrderSideEnum side, int volume,
22         std::chrono::nanoseconds timestamp, std::string id);
23 };
24
25 struct Level {
26   double price;
27   int volume;
28   OrderSideEnum side;
29   std::chrono::nanoseconds timestamp;
30   std::string id;
31
32   Level(Order &order);
33 };
34
35 bool operator>(const Level &a, const Level &b);
36 bool operator<(const Level &a, const Level &b);
37 bool operator>=(const Level &a, const Level &b);
38 bool operator<=(const Level &a, const Level &b);
39 bool operator==(const Level &a, const Level &b);
127d5a 40 std::ostream& operator<<(std::ostream& out, const Level& a);
bb2353 41
JG 42 template <class T>
43 struct Side : public std::priority_queue<Level, std::vector<Level>, T> {
44 public:
127d5a 45     void deleteLevel(std::string orderId);
JG 46     void topRemoveVolume(int volume);
47     void printTop(std::size_t num = 5);
bb2353 48 };
JG 49
50 using AskSide = Side<std::greater<Level>>;
51 using BidSide = Side<std::less<Level>>;
52
53 struct Book {
54   BidSide bidSide;
55   AskSide askSide;
56   ProductTypeEnum productType;
57   std::string product;
58   std::string stationId;
59   std::string unit;
60   std::chrono::nanoseconds expiry;
61   double aggFee;
62   double pasFee;
63   double broFee;
64
65   Book();
66   Book(ProductTypeEnum productType, std::string product, std::string stationId,
67        std::string unit, std::chrono::nanoseconds expiry, double aggFee,
68        double pasFee, double broFee);
69   void ask(Order &order);
70   void bid(Order &order);
127d5a 71     void printBook(std::size_t numOrders = 10);
bb2353 72 };
JG 73
74 Book testBook(int orders = 10, bool printBook = true);