ATS
An algorithmic trading system completely written in C++
OrderManager.h
Go to the documentation of this file.
1 
8 #ifndef ATS_ORDERMANAGER_H
9 #define ATS_ORDERMANAGER_H
10 
11 #include <string>
12 #include <queue>
13 #include <thread>
14 #include <mutex>
15 #include <map>
16 #include <vector>
17 #include <unordered_map>
18 #include <set>
19 
20 namespace ats {
25  enum OrderType {
33  OTCOUNT
34  };
35 
41  std::string OrderTypeToString(OrderType t);
42 
48  OrderType stringToOrderType(const std::string &s);
49 
54  enum Side {
55  BUY,
56  SELL,
57  SCOUNT
58  };
59 
65  std::string SideToString(Side t);
66 
72  Side stringToSide(const std::string &s);
73 
74 
78  struct Order {
79 
80  long id;
81  std::string symbol;
82  double quantity;
83  double price;
86  double stopPrice;
87  double icebergQty;
88  long recvWindow;
89  long emsId;
90  std::string timeInForce;
91  time_t time;
93  Order(long id=-1) : id(id) {}
94 
110  Order(long id, OrderType type, Side side, std::string symbol, double quantity, double price,
111  double stopPrice = 0., double icebergQty = 0., long recvWindow = 0, long emsId = 0,
112  std::string timeInForce = "", time_t time=0) {
113  this->id = id;
114  this->side = side;
115  this->symbol = symbol;
116  this->quantity = quantity;
117  this->type = type;
118  this->price = price;
119  this->stopPrice = stopPrice;
120  this->icebergQty = icebergQty;
121  this->recvWindow = recvWindow;
122  this->emsId = emsId;
123  this->timeInForce = timeInForce;
124  this->time = time;
125  }
126  };
127 
131  struct OrderBook{
132  std::vector<double> bid;
133  std::vector<double> bidVol;
134  std::vector<double> ask;
135  std::vector<double> askVol;
143  OrderBook(std::vector<double> bid={}, std::vector<double> bidVol={}, std::vector<double> ask={}, std::vector<double> askVol={}) {
144  this->bid = bid;
145  this->bidVol = bidVol;
146  this->ask = ask;
147  this->askVol = askVol;
148  }
149  };
150 
154  class OrderManager {
155  private:
156  std::unordered_map<long,Order> mSentOrders;
157  std::queue<std::pair<long,std::string>> mCancelOrders;
158  std::queue<Order> mOrders;
159  std::queue<Order> mPendingOrders;
160  std::thread mOrderManagerThread;
161  std::mutex mOrderCountMutex;
162  std::mutex mOrderFetchMutex;
163  bool mRunning;
164  long mOrderCount;
165  std::set<std::string> mSymbols;
166  double mLastOrderQty;
167  public:
172  OrderManager();
173 
179  OrderManager(std::vector<std::string> symbols);
180 
185  ~OrderManager();
186 
191  void start();
192 
197  void run();
198 
203  void stop();
204 
210  bool isRunning();
211 
217  double getLastOrderQty();
218 
223  void setLastOrderQty(double qty);
224 
236  long createOrder(OrderType type, Side side, std::string symbol, double quantity, double price=0);
237 
245  long createOrder(Order& order);
246 
254  void cancelOrder(long orderId, std::string symbol);
255 
259  void cancelAllOrders();
260 
266  void updateOpenOrders(std::unordered_map<long,Order> openOrders);
267 
273  void processOrder(Order order);
274 
279  void processOrders();
280 
287  bool hasOrders();
288 
295  bool hasCancelOrders();
296 
303 
311  Order getOrderById(long ID);
312 
318  std::pair<long,std::string> getCancelOrder();
319 
325  std::vector<std::string> getSymbols();
326 
327  private:
333  int getNewOrderId();
334  };
335 
336 } // ats
337 
338 #endif //ATS_ORDERMANAGER_H
A class for managing orders.
Definition: OrderManager.h:154
void start()
Start the order manager thread.
Definition: OrderManager.cpp:70
Order & getOldestOrder()
Get the oldest order from the order queue.
Definition: OrderManager.cpp:156
std::pair< long, std::string > getCancelOrder()
Get an order to cancel.
Definition: OrderManager.cpp:170
bool hasOrders()
Check if there are orders to be sent.
Definition: OrderManager.cpp:148
~OrderManager()
Destroy the OrderManager object.
Definition: OrderManager.cpp:66
double getLastOrderQty()
Get last filled order quantity.
Definition: OrderManager.cpp:91
void processOrder(Order order)
Process a single order.
Definition: OrderManager.cpp:128
std::vector< std::string > getSymbols()
Get symbols currently ordered.
Definition: OrderManager.cpp:176
void stop()
Stop the order manager thread.
Definition: OrderManager.cpp:81
Order getOrderById(long ID)
Returns order by ID.
Definition: OrderManager.cpp:164
void cancelAllOrders()
Cancel all orders.
Definition: OrderManager.cpp:117
long createOrder(OrderType type, Side side, std::string symbol, double quantity, double price=0)
Create a new order and add it to the queue.
Definition: OrderManager.cpp:99
void cancelOrder(long orderId, std::string symbol)
Cancel an order.
Definition: OrderManager.cpp:113
void setLastOrderQty(double qty)
Sets last filled order quantity.
Definition: OrderManager.cpp:95
bool isRunning()
Check if the order manager is running.
Definition: OrderManager.cpp:87
void updateOpenOrders(std::unordered_map< long, Order > openOrders)
Update open orders.
Definition: OrderManager.cpp:123
void run()
Run the order manager loop.
Definition: OrderManager.cpp:77
bool hasCancelOrders()
Check if there are orders to be cancelled.
Definition: OrderManager.cpp:152
OrderManager()
Construct a new OrderManager object.
Definition: OrderManager.cpp:55
void processOrders()
Process all orders in the queue.
Definition: OrderManager.cpp:134
Namespace for the algorithmic trading system.
Definition: BinanceExchangeManager.cpp:8
OrderType stringToOrderType(const std::string &s)
Converts a string to an OrderType enum value.
Definition: OrderManager.cpp:30
Side stringToSide(const std::string &s)
Converts a string to a Side enum value.
Definition: OrderManager.cpp:48
std::string SideToString(Side s)
Converts Side enum value to string.
Definition: OrderManager.cpp:37
Side
Enum for buy/sell side of an order.
Definition: OrderManager.h:54
@ SCOUNT
Definition: OrderManager.h:57
@ BUY
Definition: OrderManager.h:55
@ SELL
Definition: OrderManager.h:56
std::string OrderTypeToString(OrderType t)
Converts OrderType enum value to string.
Definition: OrderManager.cpp:9
OrderType
Enum for different types of orders.
Definition: OrderManager.h:25
@ MARKET
Definition: OrderManager.h:27
@ LIMIT_MAKER
Definition: OrderManager.h:32
@ OTCOUNT
Definition: OrderManager.h:33
@ TAKE_PROFIT
Definition: OrderManager.h:30
@ STOP_LOSS
Definition: OrderManager.h:28
@ LIMIT
Definition: OrderManager.h:26
@ STOP_LOSS_LIMIT
Definition: OrderManager.h:29
@ TAKE_PROFIT_LIMIT
Definition: OrderManager.h:31
The OrderBook struct represents the orderbook.
Definition: OrderManager.h:131
OrderBook(std::vector< double > bid={}, std::vector< double > bidVol={}, std::vector< double > ask={}, std::vector< double > askVol={})
The OrderBook constructor.
Definition: OrderManager.h:143
std::vector< double > ask
Definition: OrderManager.h:134
std::vector< double > askVol
Definition: OrderManager.h:135
std::vector< double > bid
Definition: OrderManager.h:132
std::vector< double > bidVol
Definition: OrderManager.h:133
The Order struct represents an order to be placed on an exchange.
Definition: OrderManager.h:78
Order(long id, OrderType type, Side side, std::string symbol, double quantity, double price, double stopPrice=0., double icebergQty=0., long recvWindow=0, long emsId=0, std::string timeInForce="", time_t time=0)
The Order constructor.
Definition: OrderManager.h:110
long recvWindow
Definition: OrderManager.h:88
std::string timeInForce
Definition: OrderManager.h:90
long id
Definition: OrderManager.h:80
std::string symbol
Definition: OrderManager.h:81
double price
Definition: OrderManager.h:83
long emsId
Definition: OrderManager.h:89
Side side
Definition: OrderManager.h:85
double quantity
Definition: OrderManager.h:82
time_t time
Definition: OrderManager.h:91
double icebergQty
Definition: OrderManager.h:87
OrderType type
Definition: OrderManager.h:84
double stopPrice
Definition: OrderManager.h:86