nautilus_model/python/
mod.rs1#![expect(
19 clippy::missing_errors_doc,
20 reason = "errors documented on underlying Rust methods"
21)]
22
23use pyo3::prelude::*;
24
25pub mod account;
26pub mod common;
27pub mod data;
28pub mod enums;
29pub mod events;
30pub mod identifiers;
31pub mod instruments;
32pub mod macros;
33pub mod orderbook;
34pub mod orders;
35pub mod position;
36pub mod reports;
37pub mod types;
38
39#[cfg(feature = "defi")]
40pub mod defi;
41
42#[pymodule]
49pub fn model(_: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
50 m.add("HIGH_PRECISION", crate::types::fixed::HIGH_PRECISION_MODE)?;
52 m.add("FIXED_SCALAR", crate::types::fixed::FIXED_SCALAR)?;
53 m.add("FIXED_PRECISION", crate::types::fixed::FIXED_PRECISION)?;
54 m.add("PRECISION_BYTES", crate::types::fixed::PRECISION_BYTES)?;
55 m.add_class::<crate::types::currency::Currency>()?;
56 m.add_class::<crate::types::money::Money>()?;
57 m.add_class::<crate::types::price::Price>()?;
58 m.add_class::<crate::types::quantity::Quantity>()?;
59 m.add_class::<crate::types::balance::AccountBalance>()?;
60 m.add_class::<crate::types::balance::MarginBalance>()?;
61 m.add_function(wrap_pyfunction!(data::drop_cvec_pycapsule, m)?)?;
63 m.add_class::<crate::data::DataType>()?;
64 m.add_class::<crate::data::CustomData>()?;
65 m.add_function(pyo3::wrap_pyfunction!(
66 crate::python::data::deserialize_custom_from_json,
67 m
68 )?)?;
69 m.add_function(pyo3::wrap_pyfunction!(
70 crate::python::data::register_custom_data_class,
71 m
72 )?)?;
73 m.add_function(pyo3::wrap_pyfunction!(
74 crate::python::data::custom::custom_data_backend_kind,
75 m
76 )?)?;
77 m.add_class::<crate::data::bar::BarSpecification>()?;
78 m.add_class::<crate::data::bar::BarType>()?;
79 m.add_class::<crate::data::bar::Bar>()?;
80 m.add_class::<crate::data::bet::Bet>()?;
81 m.add_class::<crate::data::bet::BetPosition>()?;
82 m.add_class::<crate::data::order::BookOrder>()?;
83 m.add_class::<crate::data::prices::MarkPriceUpdate>()?;
84 m.add_class::<crate::data::prices::IndexPriceUpdate>()?;
85 m.add_class::<crate::data::delta::OrderBookDelta>()?;
86 m.add_class::<crate::data::deltas::OrderBookDeltas>()?;
87 m.add_class::<crate::data::depth::OrderBookDepth10>()?;
88 m.add_class::<crate::data::quote::QuoteTick>()?;
89 m.add_class::<crate::data::status::InstrumentStatus>()?;
90 m.add_class::<crate::data::trade::TradeTick>()?;
91 m.add_class::<crate::data::close::InstrumentClose>()?;
92 m.add_class::<crate::data::funding::FundingRateUpdate>()?;
93 m.add_class::<crate::data::greeks::OptionGreekValues>()?;
94 m.add_class::<crate::data::greeks::BlackScholesGreeksResult>()?;
95 m.add_class::<crate::data::greeks::GreeksData>()?;
96 m.add_class::<crate::data::greeks::PortfolioGreeks>()?;
97 m.add_class::<crate::data::option_chain::OptionGreeks>()?;
98 m.add_class::<crate::data::option_chain::OptionChainSlice>()?;
99 m.add_class::<crate::data::option_chain::OptionStrikeData>()?;
100 m.add_class::<crate::python::data::option_chain::PyStrikeRange>()?;
101 m.add_class::<crate::data::forward::ForwardPrice>()?;
102 m.add_function(wrap_pyfunction!(
103 crate::python::data::greeks::py_black_scholes_greeks,
104 m
105 )?)?;
106 m.add_function(wrap_pyfunction!(
107 crate::python::data::greeks::py_imply_vol,
108 m
109 )?)?;
110 m.add_function(wrap_pyfunction!(
111 crate::python::data::greeks::py_imply_vol_and_greeks,
112 m
113 )?)?;
114 m.add_function(wrap_pyfunction!(
115 crate::python::data::greeks::py_refine_vol_and_greeks,
116 m
117 )?)?;
118 m.add_class::<crate::enums::AccountType>()?;
120 m.add_class::<crate::enums::AggregationSource>()?;
121 m.add_class::<crate::enums::AggressorSide>()?;
122 m.add_class::<crate::enums::AssetClass>()?;
123 m.add_class::<crate::enums::BarAggregation>()?;
124 m.add_class::<crate::enums::BarIntervalType>()?;
125 m.add_class::<crate::enums::BetSide>()?;
126 m.add_class::<crate::enums::BookAction>()?;
127 m.add_class::<crate::enums::BookType>()?;
128 m.add_class::<crate::enums::ContingencyType>()?;
129 m.add_class::<crate::enums::CurrencyType>()?;
130 m.add_class::<crate::enums::GreeksConvention>()?;
131 m.add_class::<crate::enums::InstrumentClass>()?;
132 m.add_class::<crate::enums::InstrumentCloseType>()?;
133 m.add_class::<crate::enums::LiquiditySide>()?;
134 m.add_class::<crate::enums::MarketStatus>()?;
135 m.add_class::<crate::enums::MarketStatusAction>()?;
136 m.add_class::<crate::enums::OmsType>()?;
137 m.add_class::<crate::enums::OptionKind>()?;
138 m.add_class::<crate::enums::OtoTriggerMode>()?;
139 m.add_class::<crate::enums::OrderSide>()?;
140 m.add_class::<crate::enums::OrderStatus>()?;
141 m.add_class::<crate::enums::OrderType>()?;
142 m.add_class::<crate::enums::PositionAdjustmentType>()?;
143 m.add_class::<crate::enums::PositionSide>()?;
144 m.add_class::<crate::enums::PriceType>()?;
145 m.add_class::<crate::enums::TimeInForce>()?;
146 m.add_class::<crate::enums::TradingState>()?;
147 m.add_class::<crate::enums::TrailingOffsetType>()?;
148 m.add_class::<crate::enums::TriggerType>()?;
149 m.add_class::<crate::identifiers::AccountId>()?;
151 m.add_class::<crate::identifiers::ActorId>()?;
152 m.add_class::<crate::identifiers::ClientId>()?;
153 m.add_class::<crate::identifiers::ClientOrderId>()?;
154 m.add_class::<crate::identifiers::ComponentId>()?;
155 m.add_class::<crate::identifiers::ExecAlgorithmId>()?;
156 m.add_class::<crate::identifiers::InstrumentId>()?;
157 m.add_class::<crate::identifiers::OrderListId>()?;
158 m.add_class::<crate::identifiers::PositionId>()?;
159 m.add_class::<crate::identifiers::StrategyId>()?;
160 m.add_class::<crate::identifiers::Symbol>()?;
161 m.add_class::<crate::identifiers::TradeId>()?;
162 m.add_class::<crate::identifiers::TraderId>()?;
163 m.add_class::<crate::identifiers::Venue>()?;
164 m.add_class::<crate::identifiers::VenueOrderId>()?;
165 m.add_class::<crate::identifiers::OptionSeriesId>()?;
166 m.add_class::<crate::orders::LimitOrder>()?;
168 m.add_class::<crate::orders::LimitIfTouchedOrder>()?;
169 m.add_class::<crate::orders::MarketIfTouchedOrder>()?;
170 m.add_class::<crate::orders::MarketOrder>()?;
171 m.add_class::<crate::orders::MarketToLimitOrder>()?;
172 m.add_class::<crate::orders::StopLimitOrder>()?;
173 m.add_class::<crate::orders::StopMarketOrder>()?;
174 m.add_class::<crate::orders::TrailingStopLimitOrder>()?;
175 m.add_class::<crate::orders::TrailingStopMarketOrder>()?;
176 m.add_class::<crate::reports::fill::FillReport>()?;
178 m.add_class::<crate::reports::order::OrderStatusReport>()?;
179 m.add_class::<crate::reports::position::PositionStatusReport>()?;
180 m.add_class::<crate::reports::mass_status::ExecutionMassStatus>()?;
181 m.add_class::<crate::position::Position>()?;
183 m.add_class::<crate::instruments::BettingInstrument>()?;
185 m.add_class::<crate::instruments::BinaryOption>()?;
186 m.add_class::<crate::instruments::Cfd>()?;
187 m.add_class::<crate::instruments::Commodity>()?;
188 m.add_class::<crate::instruments::CryptoFuture>()?;
189 m.add_class::<crate::instruments::CryptoOption>()?;
190 m.add_class::<crate::instruments::CryptoPerpetual>()?;
191 m.add_class::<crate::instruments::CurrencyPair>()?;
192 m.add_class::<crate::instruments::Equity>()?;
193 m.add_class::<crate::instruments::FuturesContract>()?;
194 m.add_class::<crate::instruments::FuturesSpread>()?;
195 m.add_class::<crate::instruments::IndexInstrument>()?;
196 m.add_class::<crate::instruments::OptionContract>()?;
197 m.add_class::<crate::instruments::OptionSpread>()?;
198 m.add_class::<crate::instruments::PerpetualContract>()?;
199 m.add_class::<crate::instruments::SyntheticInstrument>()?;
200 m.add_class::<crate::instruments::TokenizedAsset>()?;
201 m.add_class::<crate::orderbook::book::OrderBook>()?;
203 m.add_class::<crate::orderbook::level::BookLevel>()?;
204 m.add_function(wrap_pyfunction!(
205 crate::python::orderbook::book::py_update_book_with_quote_tick,
206 m
207 )?)?;
208 m.add_function(wrap_pyfunction!(
209 crate::python::orderbook::book::py_update_book_with_trade_tick,
210 m
211 )?)?;
212 m.add_class::<crate::orderbook::own::OwnOrderBook>()?;
213 m.add_class::<crate::orderbook::own::OwnBookOrder>()?;
214 m.add_class::<crate::events::AccountState>()?;
216 m.add_class::<crate::events::OrderDenied>()?;
217 m.add_class::<crate::events::OrderFilled>()?;
218 m.add_class::<crate::events::OrderInitialized>()?;
219 m.add_class::<crate::events::OrderRejected>()?;
220 m.add_class::<crate::events::OrderTriggered>()?;
221 m.add_class::<crate::events::OrderSubmitted>()?;
222 m.add_class::<crate::events::OrderEmulated>()?;
223 m.add_class::<crate::events::OrderReleased>()?;
224 m.add_class::<crate::events::OrderUpdated>()?;
225 m.add_class::<crate::events::OrderPendingUpdate>()?;
226 m.add_class::<crate::events::OrderPendingCancel>()?;
227 m.add_class::<crate::events::OrderModifyRejected>()?;
228 m.add_class::<crate::events::OrderAccepted>()?;
229 m.add_class::<crate::events::OrderCancelRejected>()?;
230 m.add_class::<crate::events::OrderCanceled>()?;
231 m.add_class::<crate::events::OrderExpired>()?;
232 m.add_class::<crate::events::OrderSnapshot>()?;
233 m.add_class::<crate::events::PositionOpened>()?;
234 m.add_class::<crate::events::PositionChanged>()?;
235 m.add_class::<crate::events::PositionClosed>()?;
236 m.add_class::<crate::events::PositionAdjusted>()?;
237 m.add_class::<crate::events::PositionSnapshot>()?;
238 m.add_class::<crate::accounts::BettingAccount>()?;
240 m.add_class::<crate::accounts::CashAccount>()?;
241 m.add_class::<crate::accounts::MarginAccount>()?;
242 m.add_class::<crate::accounts::margin_model::StandardMarginModel>()?;
243 m.add_class::<crate::accounts::margin_model::LeveragedMarginModel>()?;
244 m.add_function(wrap_pyfunction!(
245 crate::python::account::transformer::betting_account_from_account_events,
246 m
247 )?)?;
248 m.add_function(wrap_pyfunction!(
249 crate::python::account::transformer::cash_account_from_account_events,
250 m
251 )?)?;
252 m.add_function(wrap_pyfunction!(
253 crate::python::account::transformer::margin_account_from_account_events,
254 m
255 )?)?;
256 m.add_function(wrap_pyfunction!(
257 crate::python::data::bet::py_calc_bets_pnl,
258 m
259 )?)?;
260 m.add_function(wrap_pyfunction!(
261 crate::python::data::bet::py_probability_to_bet,
262 m
263 )?)?;
264 m.add_function(wrap_pyfunction!(
265 crate::python::data::bet::py_inverse_probability_to_bet,
266 m
267 )?)?;
268 #[cfg(feature = "defi")]
270 {
271 m.add_class::<crate::defi::chain::Blockchain>()?;
272 m.add_class::<crate::defi::chain::Chain>()?;
273 m.add_class::<crate::defi::token::Token>()?;
274 m.add_class::<crate::defi::dex::AmmType>()?;
275 m.add_class::<crate::defi::dex::Dex>()?;
276 m.add_class::<crate::defi::amm::Pool>()?;
277 m.add_class::<crate::defi::data::PoolSwap>()?;
278 m.add_class::<crate::defi::data::PoolLiquidityUpdateType>()?;
279 m.add_class::<crate::defi::data::PoolLiquidityUpdate>()?;
280 m.add_class::<crate::defi::data::PoolFeeCollect>()?;
281 m.add_class::<crate::defi::data::PoolFlash>()?;
282 m.add_class::<crate::defi::data::Transaction>()?;
283 m.add_class::<crate::defi::data::Block>()?;
284 m.add_class::<crate::defi::dex::DexType>()?;
285 m.add_class::<crate::defi::pool_analysis::PoolProfiler>()?;
286 }
287 Ok(())
288}