XROAD
strategy.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include <common/xroad_xml.h>
9 #include <cache/xroad_objects.h>
11 #include <order/order.h>
12 
13 #ifdef __cplusplus
14 extern "C"
15 {
16 #endif
17 
18 #define ST_PREV_QTY 0
19 #define ST_PREV_PRICE 0.0
20 
21 typedef struct strategy_s strategy_t;
22 
23 typedef struct
24 {
25  xroad_instr_t* instr;
26  xroad_str_t account;
27  xroad_side_t side;
28  bool use_native;
30 
31 typedef struct
32 {
33  xroad_qty_t qty;
34  xroad_price_t price;
36 
37 typedef struct
38 {
39  xroad_str_t account;
40  xroad_str_t client_code;
41  xroad_ord_type_t type;
42  xroad_qty_t qty;
43  xroad_price_t price;
44  xroad_str_t ext_ref;
45  int32_t flags;
46  xroad_tif_t tif;
47  xroad_date_t till_date;
49 
53 typedef struct
54 {
58  void* ctx;
62  void (*on_mdata_trade)(strategy_t*, xroad_instr_t*, const mdata_trade_t*, void*);
66  void (*on_mdata_quote)(strategy_t*, xroad_instr_t*, const mdata_quote_t*, void*);
70  void (*on_mdata_book)(strategy_t*, xroad_instr_t*, const mdata_book_20_t*, void*);
74  void (*on_mdata_common)(strategy_t*, xroad_instr_t*, const mdata_common_info_t*, void*);
78  void (*on_mdata_order)(strategy_t*, xroad_instr_t*, const mdata_order_t*, void*);
82  void (*on_mdata_feed_state)(strategy_t*, xroad_instr_t*, const mdata_feed_state_type_t, void*);
86  void (*on_order_before_send)(strategy_t*, order_t*, void* ctx);
90  void (*on_order_activated)(strategy_t*, order_t*, void* ctx);
94  void (*on_order_trade)(strategy_t*, order_t*, xroad_trade_t*, void* ctx);
98  void (*on_order_canceled)(strategy_t*, order_t*, xroad_rej_reason_t, xroad_str_t, void*);
102  void (*on_order_canceled_unexpected)(strategy_t*, order_t*, xroad_rej_reason_t, xroad_str_t, void*);
106  void (*on_order_replaced)(strategy_t*, order_t*, void*);
110  void (*on_order_rejected)(strategy_t*, order_t*, xroad_rej_reason_t, xroad_str_t, void*);
114  void (*on_order_cancel_rejected)(strategy_t*, order_t*, xroad_rej_reason_t, xroad_str_t, void*);
118  void (*on_order_replace_rejected)(strategy_t*, order_t*, xroad_rej_reason_t, xroad_str_t, void*);
129  void (*on_pos_updated)(strategy_t*, xroad_instr_t*, xroad_price_t, xroad_qty_t, xroad_price_t, xroad_price_t, void*);
133  void (*on_order_destroyed)(strategy_t*, order_t*, void*);
137  xroad_errno_t (*on_order_restore)(strategy_t*, order_t*, xroad_order_t*, void*);
139 
146 strategy_t* strategy_create(xroad_xml_tag_t cfg, strategy_callback_t cback);
147 
152 void strategy_destroy(strategy_t* s);
153 
159 xroad_errno_t strategy_start(strategy_t* s);
160 
166 xroad_errno_t strategy_stop(strategy_t* s);
167 
175 xroad_errno_t strategy_subscribe(strategy_t* s, xroad_instr_t* i, int32_t mask);
176 
183 xroad_errno_t strategy_unsubscribe(strategy_t* s, xroad_instr_t* i);
184 
202  strategy_t* s,
203  xroad_str_t name,
204  xroad_instr_t* instr,
205  xroad_side_t side,
206  xroad_str_t account,
207  xroad_str_t client_code,
208  xroad_ord_type_t type,
209  xroad_qty_t qty,
210  xroad_price_t price,
211  xroad_str_t ext_ref,
212  int32_t flags,
213  xroad_tif_t tif,
214  xroad_date_t till_date);
215 
216 #define strategy_add_order(s, name, instr, side, ...) \
217 ({ \
218  xroad_str_t def_account = xroad_str("XXX"); \
219  strategy_add_order_ex_args_t args = {.account = def_account, .type = xroad_ord_type_limit, \
220  .tif = xroad_tif_day, .till_date = xroad_date_nul, __VA_ARGS__}; \
221  strategy_add_order_ex(s, name, instr, side, args.account, args.client_code, args.type, args.qty, args.price, \
222  args.ext_ref, args.flags, args.tif, args.till_date); \
223 })
224 
242  strategy_t* s,
243  xroad_str_t name,
244  xroad_instr_t* instr,
245  xroad_side_t side,
246  xroad_str_t account,
247  xroad_str_t client_code,
248  xroad_ord_type_t type,
249  xroad_qty_t qty,
250  xroad_price_t price,
251  xroad_str_t ext_ref,
252  int32_t flags,
253  xroad_tif_t tif,
254  xroad_date_t till_date);
255 
256 #define strategy_replace_order(s, name, instr, side, ...) \
257 ({ \
258  xroad_str_t def_account = xroad_str("XXX"); \
259  strategy_add_order_ex_args_t args = {.account = def_account, .type = xroad_ord_type_limit, \
260  .tif = xroad_tif_day, .till_date = xroad_date_null, __VA_ARGS__}; \
261  strategy_replace_order_ex(s, name, instr, side, args.account, args.client_code, args.type, args.qty, args.price, \
262  args.ext_ref, args.flags, args.tif, args.till_date); \
263 })
264 
265 
272 xroad_errno_t strategy_del_order(strategy_t* s, xroad_str_t oname);
273 
280 order_t* strategy_get_order(strategy_t* s, xroad_str_t oname);
281 
289 
298 xroad_errno_t strategy_send_order_ex(strategy_t* s, xroad_str_t oname, xroad_qty_t qty, xroad_price_t price);
299 
300 #define strategy_send_order(s, oname, ...) \
301 ({ \
302  strategy_send_order_ex_args_t args = (strategy_send_order_ex_args_t){ \
303  .qty = ST_PREV_QTY, .price = ST_PREV_PRICE, __VA_ARGS__}; \
304  strategy_send_order_ex(s, oname, args.qty, args.price); \
305 })
306 
313 xroad_errno_t strategy_cancel_order(strategy_t* s, xroad_str_t oname);
314 
322 void strategy_init_orders(strategy_t* s, xroad_instr_t* instr, xroad_str_t account, xroad_str_t client_code);
323 
324 void strategy_init_orders_ex(strategy_t* s, xroad_instr_t* instr, xroad_str_t account, xroad_str_t client_code, xroad_str_t ext_ref);
325 
335  strategy_t* s, const xroad_instr_t* i, xroad_side_t side, xroad_qty_t qty, xroad_price_t price);
336 
348  strategy_t* s, xroad_instr_t* i, xroad_str_t account, xroad_side_t side, bool use_native);
349 
350 #define strategy_cancel_orders(s, ...) \
351 ({ \
352  strategy_cancel_orders_args_t args_ = (strategy_cancel_orders_args_t){.instr = NULL, \
353  .side = xroad_side_undef, .use_native = false, __VA_ARGS__}; \
354  strategy_cancel_orders_ex(s, args_.instr, args_.account, args_.side, args_.use_native); \
355  })
356 
364 xroad_str_t strategy_gen_order_name(const xroad_instr_t* i, xroad_side_t side, xroad_ord_type_t type);
365 
366 /*
367  * reset current position
368  * @param[in] s - strategy instance
369  * @param[in] i - instrument
370  * @param[in] avg_price - average price
371  * @param[in] qty - current qty(negative for short)
372  * @param[in] realized_pnl - realized pnl
373  * @return XROAD_OK on success, otherwise XROAD_FAILED
374  */
375 xroad_errno_t strategy_reset_position(strategy_t* s, xroad_instr_t* i, xroad_price_t avg_price, xroad_qty_t qty, xroad_price_t realized_pnl);
376 
377 /*
378  * gets instance of mdata_engine
379  * @param[in] s - strategy instance
380  */
381 mdata_engine_t* strategy_get_mdata(strategy_t* s);
382 #ifdef __cplusplus
383 }
384 #endif
order_state_t
Definition: order.h:23
xroad_errno_t strategy_stop(strategy_t *s)
xroad_errno_t strategy_send_order_instr(strategy_t *s, const xroad_instr_t *i, xroad_side_t side, xroad_qty_t qty, xroad_price_t price)
xroad_errno_t strategy_unsubscribe(strategy_t *s, xroad_instr_t *i)
xroad_errno_t strategy_subscribe(strategy_t *s, xroad_instr_t *i, int32_t mask)
void strategy_destroy(strategy_t *s)
xroad_errno_t strategy_del_order(strategy_t *s, xroad_str_t oname)
order_t * strategy_replace_order_ex(strategy_t *s, xroad_str_t name, xroad_instr_t *instr, xroad_side_t side, xroad_str_t account, xroad_str_t client_code, xroad_ord_type_t type, xroad_qty_t qty, xroad_price_t price, xroad_str_t ext_ref, int32_t flags, xroad_tif_t tif, xroad_date_t till_date)
xroad_errno_t strategy_start(strategy_t *s)
xroad_str_t strategy_gen_order_name(const xroad_instr_t *i, xroad_side_t side, xroad_ord_type_t type)
order_state_t strategy_get_order_state(strategy_t *s, xroad_str_t oname)
xroad_errno_t strategy_send_order_ex(strategy_t *s, xroad_str_t oname, xroad_qty_t qty, xroad_price_t price)
order_t * strategy_add_order_ex(strategy_t *s, xroad_str_t name, xroad_instr_t *instr, xroad_side_t side, xroad_str_t account, xroad_str_t client_code, xroad_ord_type_t type, xroad_qty_t qty, xroad_price_t price, xroad_str_t ext_ref, int32_t flags, xroad_tif_t tif, xroad_date_t till_date)
xroad_errno_t strategy_cancel_orders_ex(strategy_t *s, xroad_instr_t *i, xroad_str_t account, xroad_side_t side, bool use_native)
strategy_t * strategy_create(xroad_xml_tag_t cfg, strategy_callback_t cback)
void strategy_init_orders(strategy_t *s, xroad_instr_t *instr, xroad_str_t account, xroad_str_t client_code)
order_t * strategy_get_order(strategy_t *s, xroad_str_t oname)
xroad_errno_t strategy_cancel_order(strategy_t *s, xroad_str_t oname)
Definition: mdata_proto.h:107
Definition: mdata_proto.h:197
Definition: mdata_proto.h:142
Definition: mdata_proto.h:118
Definition: mdata_proto.h:130
Definition: strategy.h:38
Definition: strategy.h:54
void * ctx
Definition: strategy.h:58
Definition: strategy.h:24
Definition: strategy.h:32
Definition: xroad_date.h:20
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
CAUTION: do not change this file - it is autogenerated.
xroad_ord_type_t
Definition: xroad_objects_types.h:254
int64_t xroad_qty_t
Definition: xroad_objects_types.h:159