7 #include <props/props.h>
33 bool (*on_can_send)(order_book_t*);
34 void (*on_activated)(order_book_t*);
35 void (*on_canceled)(order_book_t*);
36 void (*on_rejected)(order_book_t*, xroad_rej_reason_t,
xroad_str_t);
37 void (*on_replaced)(order_book_t*);
39 void (*on_trade)(order_book_t*, xroad_trade_t*);
40 void (*on_destroyed)(order_book_t*);
41 xroad_errno_t (*gen_qty)(order_book_t*, uint64_t, xroad_side_t,
xroad_qty_t*, size_t, xroad_sstream_t*);
47 order_book_side_none = 0,
48 order_book_side_buy = 1,
49 order_book_side_sell = 2,
50 order_book_side_both = 3
66 xroad_price_t best_bid;
67 xroad_price_t best_ask;
69 order_book_side_t side;
76 order_book_side_t side;
77 xroad_price_t best_bid;
78 xroad_price_t best_ask;
85 xroad_broker_t* broker_buy;
86 xroad_broker_t* broker_sell;
88 xroad_logger_t* logger;
92 xroad_currency_t* hedge_currency;
93 uint32_t destroy_timeout_ms;
115 #define order_book_create(instr, size, ...) \
117 order_book_create_args_t args = {.levels = 1, .price_step = 1U, .destroy_timeout_ms = 5000, ## __VA_ARGS__}; \
118 order_book_create_ex(instr, size, args.levels, args.side, args.best_bid, args.best_ask, \
119 args.price_step, args.trader_book, args.account_buy, args.account_sell, \
120 args.client_code_buy, args.client_code_sell, args.broker_buy, args.broker_sell, \
121 args.cback, args.logger, args.ss, args.flags, args.order_flags, args.hedge_currency, \
122 args.destroy_timeout_ms); \
153 xroad_instr_t* instr,
156 order_book_side_t side,
157 xroad_price_t best_bid,
158 xroad_price_t best_ask,
165 xroad_broker_t* broker_buy,
166 xroad_broker_t* broker_sell,
168 xroad_logger_t* logger,
172 xroad_currency_t* hedge_currency,
173 uint32_t destroy_timeout_ms);
175 void order_book_print(order_book_t* order_book);
177 xroad_instr_t* order_book_get_instr(order_book_t* order_book);
179 xroad_price_t order_book_get_size(order_book_t* order_book);
181 void* order_book_get_ctx(order_book_t*);
183 const order_t* order_book_get_order(order_book_t* order_book, order_book_side_t side, uint32_t idx);
185 xroad_errno_t order_book_replace_ex(
186 order_book_t* order_book,
188 order_book_side_t side,
189 xroad_price_t best_bid,
190 xroad_price_t best_ask,
192 xroad_sstream_t* ss);
194 #define order_book_replace(order_book, ...) \
196 xroad_qty_t def_size = -99999999999; \
197 xroad_price_t def_price = - 99999999999.0; \
198 order_book_replace_args_t args = (order_book_replace_args_t){ \
199 .size = def_size, .best_bid = def_price, .best_ask = def_price, .side = (order_book_side_t)-1, ## __VA_ARGS__}; \
201 mask |= !xroad_dbl_cmp(args.best_bid, def_price) ? 0 : order_book_replace_best_bid; \
202 mask |= !xroad_dbl_cmp(args.best_ask, def_price) ? 0 : order_book_replace_best_ask; \
203 mask |= args.side == (order_book_side_t)-1 ? 0 : order_book_replace_side; \
204 mask |= args.size == def_size ? 0 : order_book_replace_size; \
205 order_book_replace_ex(order_book, args.size, args.side, args.best_bid, args.best_ask, mask, args.ss); \
208 xroad_errno_t order_book_send(order_book_t* order_book);
210 xroad_errno_t order_book_cancel(order_book_t* order_book);
212 #define order_book_destroy(book, ...) \
214 order_book_destroy_args_t args = (order_book_destroy_args_t){__VA_ARGS__}; \
215 order_book_destroy_ex(book, args.force); \
218 void order_book_destroy_ex(order_book_t* order_book,
bool force);
order_book_replace_mask_t
Definition: order_book.h:57
@ order_book_replace_best_ask
replace best ask
Definition: order_book.h:59
@ order_book_replace_side
replace side
Definition: order_book.h:61
@ order_book_replace_best_bid
replace best bid
Definition: order_book.h:58
@ order_book_replace_size
replace size
Definition: order_book.h:60
order_book_state_t order_book_get_state(order_book_t *order_book)
order_book_state_t
Definition: order_book.h:16
@ order_book_state_active
order_book is in active state
Definition: order_book.h:18
@ order_book_state_awaiting_active
order_book is in awaiting active state
Definition: order_book.h:22
@ order_book_state_destroyed
order_book is in destroyed state
Definition: order_book.h:19
@ order_book_state_error
order_book is in errorneus state
Definition: order_book.h:27
@ order_book_state_awaiting_replace
order_book is in awaiting replace state
Definition: order_book.h:25
@ order_book_state_canceled
order_book is in canceled state
Definition: order_book.h:20
@ order_book_state_awaiting_cancel_replace
order_book is in awaiting cancel/replace state
Definition: order_book.h:28
@ order_book_state_awaiting_destroy
order_book is in awaiting destroyed state
Definition: order_book.h:23
@ order_book_state_initial
order_book is in initial state
Definition: order_book.h:17
@ order_book_state_awaiting_reject
order_book is awaiting to cancel all after reject
Definition: order_book.h:26
@ order_book_state_rejected
order_book is in rejected state
Definition: order_book.h:21
@ order_book_state_awaiting_cancel
order_book is in awaiting cancel state
Definition: order_book.h:24
xroad_str_t order_book_side_to_str(order_book_side_t side)
xroad_str_t order_book_state_to_str(order_book_state_t state)
order_book_t * order_book_create_ex(xroad_instr_t *instr, xroad_qty_t size, uint32_t levels, order_book_side_t side, xroad_price_t best_bid, xroad_price_t best_ask, uint32_t price_step, xroad_str_t trader_order_book, xroad_str_t account_buy, xroad_str_t account_sell, xroad_str_t client_code_buy, xroad_str_t client_code_sell, xroad_broker_t *broker_buy, xroad_broker_t *broker_sell, order_book_callback_t cback, xroad_logger_t *logger, xroad_sstream_t *ss, int32_t flags, int32_t order_flags, xroad_currency_t *hedge_currency, uint32_t destroy_timeout_ms)
Definition: order_book.h:32
void * ctx
stored context
Definition: order_book.h:42
Definition: order_book.h:74
Definition: order_book.h:97
Definition: order_book.h:65
Definition: xroad_string.h:29
struct xroad_str_s xroad_str_t
see common/xroad_string.h for details
Definition: xroad_common_fwd.h:39
int64_t xroad_qty_t
Definition: xroad_objects_types.h:159