nautilus_model/events/order/
snapshot.rs1use indexmap::IndexMap;
17use nautilus_core::{UnixNanos, UUID4};
18use rust_decimal::Decimal;
19use serde::{Deserialize, Serialize};
20use ustr::Ustr;
21
22use crate::{
23 enums::{
24 ContingencyType, LiquiditySide, OrderSide, OrderStatus, OrderType, TimeInForce,
25 TrailingOffsetType, TriggerType,
26 },
27 identifiers::{
28 AccountId, ClientOrderId, ExecAlgorithmId, InstrumentId, OrderListId, PositionId,
29 StrategyId, TradeId, TraderId, VenueOrderId,
30 },
31 orders::OrderAny,
32 types::{Money, Price, Quantity},
33};
34
35#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
37#[cfg_attr(
38 feature = "python",
39 pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.model")
40)]
41pub struct OrderSnapshot {
42 pub trader_id: TraderId,
44 pub strategy_id: StrategyId,
46 pub instrument_id: InstrumentId,
48 pub client_order_id: ClientOrderId,
50 pub venue_order_id: Option<VenueOrderId>,
52 pub position_id: Option<PositionId>,
54 pub account_id: Option<AccountId>,
56 pub last_trade_id: Option<TradeId>,
58 pub order_type: OrderType,
60 pub order_side: OrderSide,
62 pub quantity: Quantity,
64 pub price: Option<Price>,
66 pub trigger_price: Option<Price>,
68 pub trigger_type: Option<TriggerType>,
70 pub limit_offset: Option<Decimal>,
72 pub trailing_offset: Option<Decimal>,
74 pub trailing_offset_type: Option<TrailingOffsetType>,
76 pub time_in_force: TimeInForce,
78 pub expire_time: Option<UnixNanos>,
80 pub filled_qty: Quantity,
82 pub liquidity_side: Option<LiquiditySide>,
84 pub avg_px: Option<f64>,
86 pub slippage: Option<f64>,
88 pub commissions: Vec<Money>,
90 pub status: OrderStatus,
92 pub is_post_only: bool,
94 pub is_reduce_only: bool,
96 pub is_quote_quantity: bool,
98 pub display_qty: Option<Quantity>,
100 pub emulation_trigger: Option<TriggerType>,
102 pub trigger_instrument_id: Option<InstrumentId>,
104 pub contingency_type: Option<ContingencyType>,
106 pub order_list_id: Option<OrderListId>,
108 pub linked_order_ids: Option<Vec<ClientOrderId>>,
110 pub parent_order_id: Option<ClientOrderId>,
112 pub exec_algorithm_id: Option<ExecAlgorithmId>,
114 pub exec_algorithm_params: Option<IndexMap<Ustr, Ustr>>,
116 pub exec_spawn_id: Option<ClientOrderId>,
118 pub tags: Option<Vec<Ustr>>,
120 pub init_id: UUID4,
122 pub ts_init: UnixNanos,
124 pub ts_last: UnixNanos,
126}
127
128impl From<OrderAny> for OrderSnapshot {
129 fn from(order: OrderAny) -> Self {
130 Self {
131 trader_id: order.trader_id(),
132 strategy_id: order.strategy_id(),
133 instrument_id: order.instrument_id(),
134 client_order_id: order.client_order_id(),
135 venue_order_id: order.venue_order_id(),
136 position_id: order.position_id(),
137 account_id: order.account_id(),
138 last_trade_id: order.last_trade_id(),
139 order_type: order.order_type(),
140 order_side: order.order_side(),
141 quantity: order.quantity(),
142 price: order.price(),
143 trigger_price: order.trigger_price(),
144 trigger_type: order.trigger_type(),
145 limit_offset: order.limit_offset(),
146 trailing_offset: order.trailing_offset(),
147 trailing_offset_type: order.trailing_offset_type(),
148 time_in_force: order.time_in_force(),
149 expire_time: order.expire_time(),
150 filled_qty: order.filled_qty(),
151 liquidity_side: order.liquidity_side(),
152 avg_px: order.avg_px(),
153 slippage: order.slippage(),
154 commissions: order.commissions().values().cloned().collect(),
155 status: order.status(),
156 is_post_only: order.is_post_only(),
157 is_reduce_only: order.is_reduce_only(),
158 is_quote_quantity: order.is_quote_quantity(),
159 display_qty: order.display_qty(),
160 emulation_trigger: order.emulation_trigger(),
161 trigger_instrument_id: order.trigger_instrument_id(),
162 contingency_type: order.contingency_type(),
163 order_list_id: order.order_list_id(),
164 linked_order_ids: order.linked_order_ids(),
165 parent_order_id: order.parent_order_id(),
166 exec_algorithm_id: order.exec_algorithm_id(),
167 exec_algorithm_params: order.exec_algorithm_params(),
168 exec_spawn_id: order.exec_spawn_id(),
169 tags: order.tags(),
170 init_id: order.init_id(),
171 ts_init: order.ts_init(),
172 ts_last: order.ts_last(),
173 }
174 }
175}