nautilus_model/orders/
default.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16use nautilus_core::{UnixNanos, UUID4};
17use rust_decimal_macros::dec;
18
19use super::{
20    limit::LimitOrder, limit_if_touched::LimitIfTouchedOrder, market::MarketOrder,
21    market_if_touched::MarketIfTouchedOrder, market_to_limit::MarketToLimitOrder,
22    stop_limit::StopLimitOrder, stop_market::StopMarketOrder,
23    trailing_stop_limit::TrailingStopLimitOrder, trailing_stop_market::TrailingStopMarketOrder,
24};
25use crate::{
26    enums::{OrderSide, TimeInForce, TrailingOffsetType, TriggerType},
27    identifiers::{ClientOrderId, InstrumentId, StrategyId, TraderId},
28    types::{Price, Quantity},
29};
30
31impl Default for LimitOrder {
32    /// Creates a new default [`LimitOrder`] instance for testing.
33    fn default() -> Self {
34        Self::new(
35            TraderId::default(),
36            StrategyId::default(),
37            InstrumentId::default(),
38            ClientOrderId::default(),
39            OrderSide::Buy,
40            Quantity::from(100_000),
41            Price::from("1.00000"),
42            TimeInForce::Gtc,
43            None,
44            false,
45            false,
46            false,
47            None,
48            None,
49            None,
50            None,
51            None,
52            None,
53            None,
54            None,
55            None,
56            None,
57            None,
58            UUID4::default(),
59            UnixNanos::default(),
60        )
61        .unwrap() // SAFETY: Valid default values are used
62    }
63}
64
65impl Default for LimitIfTouchedOrder {
66    /// Creates a new default [`LimitIfTouchedOrder`] instance for testing.
67    fn default() -> Self {
68        Self::new(
69            TraderId::default(),
70            StrategyId::default(),
71            InstrumentId::default(),
72            ClientOrderId::default(),
73            OrderSide::Buy,
74            Quantity::from(100_000),
75            Price::from("1.00000"),
76            Price::from("1.00000"),
77            TriggerType::BidAsk,
78            TimeInForce::Gtc,
79            None,
80            false,
81            false,
82            false,
83            None,
84            None,
85            None,
86            None,
87            None,
88            None,
89            None,
90            None,
91            None,
92            None,
93            None,
94            UUID4::default(),
95            UnixNanos::default(),
96        )
97    }
98}
99
100impl Default for MarketOrder {
101    /// Creates a new default [`MarketOrder`] instance for testing.
102    fn default() -> Self {
103        Self::new(
104            TraderId::default(),
105            StrategyId::default(),
106            InstrumentId::default(),
107            ClientOrderId::default(),
108            OrderSide::Buy,
109            Quantity::from(100_000),
110            TimeInForce::Day,
111            UUID4::default(),
112            UnixNanos::default(),
113            false,
114            false,
115            None,
116            None,
117            None,
118            None,
119            None,
120            None,
121            None,
122            None,
123        )
124    }
125}
126
127impl Default for MarketIfTouchedOrder {
128    /// Creates a new default [`MarketIfTouchedOrder`] instance for testing.
129    fn default() -> Self {
130        Self::new(
131            TraderId::default(),
132            StrategyId::default(),
133            InstrumentId::default(),
134            ClientOrderId::default(),
135            OrderSide::Buy,
136            Quantity::from(100_000),
137            Price::from("1.00000"),
138            TriggerType::BidAsk,
139            TimeInForce::Gtc,
140            None,
141            false,
142            false,
143            None,
144            None,
145            None,
146            None,
147            None,
148            None,
149            None,
150            None,
151            None,
152            None,
153            None,
154            UUID4::default(),
155            UnixNanos::default(),
156        )
157    }
158}
159
160impl Default for MarketToLimitOrder {
161    /// Creates a new default [`MarketToLimitOrder`] instance for testing.
162    fn default() -> Self {
163        Self::new(
164            TraderId::default(),
165            StrategyId::default(),
166            InstrumentId::default(),
167            ClientOrderId::default(),
168            OrderSide::Buy,
169            Quantity::from(100_000),
170            TimeInForce::Gtc,
171            None,
172            false,
173            false,
174            false,
175            None,
176            None,
177            None,
178            None,
179            None,
180            None,
181            None,
182            None,
183            None,
184            UUID4::default(),
185            UnixNanos::default(),
186        )
187    }
188}
189
190impl Default for StopLimitOrder {
191    /// Creates a new default [`StopLimitOrder`] instance for testing.
192    fn default() -> Self {
193        Self::new(
194            TraderId::default(),
195            StrategyId::default(),
196            InstrumentId::default(),
197            ClientOrderId::default(),
198            OrderSide::Buy,
199            Quantity::from(100_000),
200            Price::from("1.00000"),
201            Price::from("1.00000"),
202            TriggerType::BidAsk,
203            TimeInForce::Gtc,
204            None,
205            false,
206            false,
207            false,
208            None,
209            None,
210            None,
211            None,
212            None,
213            None,
214            None,
215            None,
216            None,
217            None,
218            None,
219            UUID4::default(),
220            UnixNanos::default(),
221        )
222    }
223}
224
225impl Default for StopMarketOrder {
226    /// Creates a new default [`StopMarketOrder`] instance for testing.
227    fn default() -> Self {
228        Self::new(
229            TraderId::default(),
230            StrategyId::default(),
231            InstrumentId::default(),
232            ClientOrderId::default(),
233            OrderSide::Buy,
234            Quantity::from(100_000),
235            Price::from("1.00000"),
236            TriggerType::BidAsk,
237            TimeInForce::Gtc,
238            None,
239            false,
240            false,
241            None,
242            None,
243            None,
244            None,
245            None,
246            None,
247            None,
248            None,
249            None,
250            None,
251            None,
252            UUID4::default(),
253            UnixNanos::default(),
254        )
255    }
256}
257
258impl Default for TrailingStopLimitOrder {
259    /// Creates a new default [`TrailingStopLimitOrder`] instance for testing.
260    fn default() -> Self {
261        Self::new(
262            TraderId::default(),
263            StrategyId::default(),
264            InstrumentId::default(),
265            ClientOrderId::default(),
266            OrderSide::Buy,
267            Quantity::from(100_000),
268            Price::from("1.00000"),
269            Price::from("1.00000"),
270            TriggerType::BidAsk,
271            dec!(0.001),
272            dec!(0.001),
273            TrailingOffsetType::Price,
274            TimeInForce::Gtc,
275            None,
276            false,
277            false,
278            false,
279            None,
280            None,
281            None,
282            None,
283            None,
284            None,
285            None,
286            None,
287            None,
288            None,
289            None,
290            UUID4::default(),
291            UnixNanos::default(),
292        )
293    }
294}
295
296impl Default for TrailingStopMarketOrder {
297    /// Creates a new default [`TrailingStopMarketOrder`] instance for testing.
298    fn default() -> Self {
299        Self::new(
300            TraderId::default(),
301            StrategyId::default(),
302            InstrumentId::default(),
303            ClientOrderId::default(),
304            OrderSide::Buy,
305            Quantity::from(100_000),
306            Price::from("1.00000"),
307            TriggerType::BidAsk,
308            dec!(0.001),
309            TrailingOffsetType::Price,
310            TimeInForce::Gtc,
311            None,
312            false,
313            false,
314            None,
315            None,
316            None,
317            None,
318            None,
319            None,
320            None,
321            None,
322            None,
323            None,
324            None,
325            UUID4::default(),
326            UnixNanos::default(),
327        )
328    }
329}