Joel Grunbaum
2022-01-19 0bef191acd5a77544852e6a3daae2df05bd34a31
commit | author | age
16b655 1 #include "strat.hpp"
JG 2
0b7aa0 3 #include "bom.hpp"
JG 4 #include "book.hpp"
5 #include "json.hpp"
6 #include "secrets.hpp"
7
8 #include "protocol.hpp"
9 #include <deque>
10 #include <unordered_map>
11
2c515f 12 namespace strat
JG 13 {
0b7aa0 14 std::unordered_map<std::string, json::Message*> orders;
16b655 15
0b7aa0 16 void deleteOrder(json::AddedMessage* m);
JG 17 void freeMessages(std::deque<json::Message*>& m);
18 void printFeed(std::deque<json::Message*>& m);
19 void dumbHit(std::deque<json::Message*>& m);
20
21 void initialise()
22 {
23     bom::initialise();
24     protocol::createWebSocket();
16b655 25 }
0b7aa0 26
JG 27 void destroy()
28 {
29     bom::destroy();
30     for (auto& i : orders) {
31         switch (i.second->type) {
32         case json::FUTURE_TYPE:
33         case json::SPREAD_TYPE:
34         case json::CALL_TYPE:
35         case json::PUT_TYPE:
36             deleteOrder((json::AddedMessage*)i.second);
37         default:;
38         }
39         delete i.second;
40     }
41 }
42
43 void mainLoop()
44 {
45     auto bs = protocol::recoverBook();
46     while (true) {
47         auto messages = protocol::catchUp(bs);
48         // bom::updateBom(bs);
0bef19 49         // printFeed(messages);
JG 50         dumbHit(messages);
0b7aa0 51         freeMessages(messages);
JG 52     }
53 }
54
55 void deleteOrder(json::AddedMessage* m)
56 {
57     json::DeleteMessage a(json::DELETE, m->product, m->id);
58     delete protocol::deleteOrder(a);
59 }
60
61 void printFeed(std::deque<json::Message*>& m)
62 {
63     for (auto& i : m) {
64         switch (i->type) {
65         case json::FUTURE_TYPE:
66         case json::SPREAD_TYPE:
67         case json::CALL_TYPE:
68         case json::PUT_TYPE:
69             std::cout << ((json::AnnounceMessage*)i)->as_string() << std::endl;
70             break;
71         case json::SETTLEMENT:
72             std::cout << ((json::SettleMessage*)i)->as_string() << std::endl;
73             break;
74         case json::ADDED:
75             std::cout << ((json::AddedMessage*)i)->as_string() << std::endl;
76             break;
77         case json::DELETED:
78             std::cout << ((json::DeletedMessage*)i)->as_string() << std::endl;
79             break;
80         case json::TRADE:
81             std::cout << ((json::TradeMessage*)i)->as_string() << std::endl;
82             break;
83         case json::BROKER_REQUEST:
84             std::cout << ((json::BrokerRequest*)i)->as_string() << std::endl;
85             break;
86         case json::BROKER_ACK:
87             std::cout << ((json::BrokerAck*)i)->as_string() << std::endl;
88             break;
89         case json::BROKER_CONFIRM:
90             std::cout << ((json::BrokerConfirm*)i)->as_string() << std::endl;
91             break;
92         default:;
93         }
94     }
95 }
96
97 void freeMessages(std::deque<json::Message*>& m)
98 {
99     for (auto i : m) {
100         delete i;
101     }
102 }
103
104 void dumbHit(std::deque<json::Message*>& m)
105 {
0bef19 106     for (auto& i : m) {
JG 107         if (i->type == json::ADDED) {
108             json::AddedMessage* j = (json::AddedMessage*)i;
109             if (j->owner == "jgrunbau") {
110                 book::OrderSideEnum s =
111                     j->side == book::Buy ? book::Sell : book::Buy;
112                 json::AddMessage a(json::ADD, j->product, j->price, s,
113                                    j->resting);
114                 auto b = protocol::addOrder(a);
115                 if (b->type == json::ADDED &&
116                     ((json::AddedMessage*)b)->resting > 0) {
117                     json::DeleteMessage d(json::DELETE, j->product,
118                                           ((json::AddedMessage*)b)->id);
119                     delete protocol::deleteOrder(d);
120                 }
121                 if (b->type == json::ADDED) {
122                     std::cout << "Hit " << j->owner << " for "
123                               << ((json::AddedMessage*)b)->filled
124                               << ", resting "
125                               << ((json::AddedMessage*)b)->resting << std::endl;
126                 }
127                 delete b;
128             }
129         }
130     }
0b7aa0 131 }
JG 132 } // namespace strat