nautilus_model/python/
mod.rs1use pyo3::prelude::*;
19
20pub mod account;
21pub mod common;
22pub mod data;
23pub mod enums;
24pub mod events;
25pub mod identifiers;
26pub mod instruments;
27pub mod macros;
28pub mod orderbook;
29pub mod orders;
30pub mod position;
31pub mod reports;
32pub mod types;
33
34#[cfg(feature = "defi")]
35pub mod defi;
36
37#[pymodule]
47pub fn model(_: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
48 m.add("HIGH_PRECISION", crate::types::fixed::HIGH_PRECISION_MODE)?;
50 m.add("FIXED_SCALAR", crate::types::fixed::FIXED_SCALAR)?;
51 m.add("FIXED_PRECISION", crate::types::fixed::FIXED_PRECISION)?;
52 m.add("PRECISION_BYTES", crate::types::fixed::PRECISION_BYTES)?;
53 m.add_class::<crate::types::currency::Currency>()?;
54 m.add_class::<crate::types::money::Money>()?;
55 m.add_class::<crate::types::price::Price>()?;
56 m.add_class::<crate::types::quantity::Quantity>()?;
57 m.add_class::<crate::types::balance::AccountBalance>()?;
58 m.add_class::<crate::types::balance::MarginBalance>()?;
59 m.add_function(wrap_pyfunction!(data::drop_cvec_pycapsule, m)?)?;
61 m.add_class::<crate::data::DataType>()?;
62 m.add_class::<crate::data::bar::BarSpecification>()?;
63 m.add_class::<crate::data::bar::BarType>()?;
64 m.add_class::<crate::data::bar::Bar>()?;
65 m.add_class::<crate::data::bet::Bet>()?;
66 m.add_class::<crate::data::bet::BetPosition>()?;
67 m.add_class::<crate::data::order::BookOrder>()?;
68 m.add_class::<crate::data::prices::MarkPriceUpdate>()?;
69 m.add_class::<crate::data::prices::IndexPriceUpdate>()?;
70 m.add_class::<crate::data::delta::OrderBookDelta>()?;
71 m.add_class::<crate::data::deltas::OrderBookDeltas>()?;
72 m.add_class::<crate::data::depth::OrderBookDepth10>()?;
73 m.add_class::<crate::data::quote::QuoteTick>()?;
74 m.add_class::<crate::data::status::InstrumentStatus>()?;
75 m.add_class::<crate::data::trade::TradeTick>()?;
76 m.add_class::<crate::data::close::InstrumentClose>()?;
77 m.add_class::<crate::data::funding::FundingRateUpdate>()?;
78 m.add_class::<crate::data::greeks::BlackScholesGreeksResult>()?;
79 m.add_function(wrap_pyfunction!(
80 crate::python::data::greeks::py_black_scholes_greeks,
81 m
82 )?)?;
83 m.add_function(wrap_pyfunction!(
84 crate::python::data::greeks::py_imply_vol,
85 m
86 )?)?;
87 m.add_function(wrap_pyfunction!(
88 crate::python::data::greeks::py_imply_vol_and_greeks,
89 m
90 )?)?;
91 m.add_function(wrap_pyfunction!(
92 crate::python::data::greeks::py_refine_vol_and_greeks,
93 m
94 )?)?;
95 m.add_class::<crate::enums::AccountType>()?;
97 m.add_class::<crate::enums::AggregationSource>()?;
98 m.add_class::<crate::enums::AggressorSide>()?;
99 m.add_class::<crate::enums::AssetClass>()?;
100 m.add_class::<crate::enums::BarAggregation>()?;
101 m.add_class::<crate::enums::BetSide>()?;
102 m.add_class::<crate::enums::BookAction>()?;
103 m.add_class::<crate::enums::BookType>()?;
104 m.add_class::<crate::enums::ContingencyType>()?;
105 m.add_class::<crate::enums::CurrencyType>()?;
106 m.add_class::<crate::enums::InstrumentClass>()?;
107 m.add_class::<crate::enums::InstrumentCloseType>()?;
108 m.add_class::<crate::enums::LiquiditySide>()?;
109 m.add_class::<crate::enums::MarketStatus>()?;
110 m.add_class::<crate::enums::MarketStatusAction>()?;
111 m.add_class::<crate::enums::OmsType>()?;
112 m.add_class::<crate::enums::OptionKind>()?;
113 m.add_class::<crate::enums::OrderSide>()?;
114 m.add_class::<crate::enums::OrderStatus>()?;
115 m.add_class::<crate::enums::OrderType>()?;
116 m.add_class::<crate::enums::PositionAdjustmentType>()?;
117 m.add_class::<crate::enums::PositionSide>()?;
118 m.add_class::<crate::enums::PriceType>()?;
119 m.add_class::<crate::enums::TimeInForce>()?;
120 m.add_class::<crate::enums::TradingState>()?;
121 m.add_class::<crate::enums::TrailingOffsetType>()?;
122 m.add_class::<crate::enums::TriggerType>()?;
123 m.add_class::<crate::identifiers::AccountId>()?;
125 m.add_class::<crate::identifiers::ActorId>()?;
126 m.add_class::<crate::identifiers::ClientId>()?;
127 m.add_class::<crate::identifiers::ClientOrderId>()?;
128 m.add_class::<crate::identifiers::ComponentId>()?;
129 m.add_class::<crate::identifiers::ExecAlgorithmId>()?;
130 m.add_class::<crate::identifiers::InstrumentId>()?;
131 m.add_class::<crate::identifiers::OrderListId>()?;
132 m.add_class::<crate::identifiers::PositionId>()?;
133 m.add_class::<crate::identifiers::StrategyId>()?;
134 m.add_class::<crate::identifiers::Symbol>()?;
135 m.add_class::<crate::identifiers::TradeId>()?;
136 m.add_class::<crate::identifiers::TraderId>()?;
137 m.add_class::<crate::identifiers::Venue>()?;
138 m.add_class::<crate::identifiers::VenueOrderId>()?;
139 m.add_class::<crate::orders::LimitOrder>()?;
141 m.add_class::<crate::orders::LimitIfTouchedOrder>()?;
142 m.add_class::<crate::orders::MarketOrder>()?;
143 m.add_class::<crate::orders::MarketToLimitOrder>()?;
144 m.add_class::<crate::orders::StopLimitOrder>()?;
145 m.add_class::<crate::orders::StopMarketOrder>()?;
146 m.add_class::<crate::orders::TrailingStopLimitOrder>()?;
147 m.add_class::<crate::orders::TrailingStopMarketOrder>()?;
148 m.add_class::<crate::reports::fill::FillReport>()?;
150 m.add_class::<crate::reports::order::OrderStatusReport>()?;
151 m.add_class::<crate::reports::position::PositionStatusReport>()?;
152 m.add_class::<crate::reports::mass_status::ExecutionMassStatus>()?;
153 m.add_class::<crate::position::Position>()?;
155 m.add_class::<crate::instruments::BettingInstrument>()?;
157 m.add_class::<crate::instruments::BinaryOption>()?;
158 m.add_class::<crate::instruments::CryptoFuture>()?;
159 m.add_class::<crate::instruments::CryptoOption>()?;
160 m.add_class::<crate::instruments::CryptoPerpetual>()?;
161 m.add_class::<crate::instruments::CurrencyPair>()?;
162 m.add_class::<crate::instruments::Equity>()?;
163 m.add_class::<crate::instruments::FuturesContract>()?;
164 m.add_class::<crate::instruments::FuturesSpread>()?;
165 m.add_class::<crate::instruments::OptionContract>()?;
166 m.add_class::<crate::instruments::OptionSpread>()?;
167 m.add_class::<crate::instruments::SyntheticInstrument>()?;
168 m.add_class::<crate::orderbook::book::OrderBook>()?;
170 m.add_class::<crate::orderbook::level::BookLevel>()?;
171 m.add_function(wrap_pyfunction!(
172 crate::python::orderbook::book::py_update_book_with_quote_tick,
173 m
174 )?)?;
175 m.add_function(wrap_pyfunction!(
176 crate::python::orderbook::book::py_update_book_with_trade_tick,
177 m
178 )?)?;
179 m.add_class::<crate::orderbook::own::OwnOrderBook>()?;
180 m.add_class::<crate::orderbook::own::OwnBookOrder>()?;
181 m.add_class::<crate::events::AccountState>()?;
183 m.add_class::<crate::events::OrderDenied>()?;
184 m.add_class::<crate::events::OrderFilled>()?;
185 m.add_class::<crate::events::OrderInitialized>()?;
186 m.add_class::<crate::events::OrderRejected>()?;
187 m.add_class::<crate::events::OrderTriggered>()?;
188 m.add_class::<crate::events::OrderSubmitted>()?;
189 m.add_class::<crate::events::OrderEmulated>()?;
190 m.add_class::<crate::events::OrderReleased>()?;
191 m.add_class::<crate::events::OrderUpdated>()?;
192 m.add_class::<crate::events::OrderPendingUpdate>()?;
193 m.add_class::<crate::events::OrderPendingCancel>()?;
194 m.add_class::<crate::events::OrderModifyRejected>()?;
195 m.add_class::<crate::events::OrderAccepted>()?;
196 m.add_class::<crate::events::OrderCancelRejected>()?;
197 m.add_class::<crate::events::OrderCanceled>()?;
198 m.add_class::<crate::events::OrderExpired>()?;
199 m.add_class::<crate::events::OrderSnapshot>()?;
200 m.add_class::<crate::events::PositionAdjusted>()?;
201 m.add_class::<crate::events::PositionSnapshot>()?;
202 m.add_class::<crate::accounts::CashAccount>()?;
204 m.add_class::<crate::accounts::MarginAccount>()?;
205 m.add_function(wrap_pyfunction!(
206 crate::python::account::transformer::cash_account_from_account_events,
207 m
208 )?)?;
209 m.add_function(wrap_pyfunction!(
210 crate::python::account::transformer::margin_account_from_account_events,
211 m
212 )?)?;
213 m.add_function(wrap_pyfunction!(
214 crate::python::data::bet::py_calc_bets_pnl,
215 m
216 )?)?;
217 m.add_function(wrap_pyfunction!(
218 crate::python::data::bet::py_probability_to_bet,
219 m
220 )?)?;
221 m.add_function(wrap_pyfunction!(
222 crate::python::data::bet::py_inverse_probability_to_bet,
223 m
224 )?)?;
225 #[cfg(feature = "defi")]
227 {
228 m.add_class::<crate::defi::chain::Blockchain>()?;
229 m.add_class::<crate::defi::chain::Chain>()?;
230 m.add_class::<crate::defi::token::Token>()?;
231 m.add_class::<crate::defi::dex::AmmType>()?;
232 m.add_class::<crate::defi::dex::Dex>()?;
233 m.add_class::<crate::defi::amm::Pool>()?;
234 m.add_class::<crate::defi::data::PoolSwap>()?;
235 m.add_class::<crate::defi::data::PoolLiquidityUpdateType>()?;
236 m.add_class::<crate::defi::data::PoolLiquidityUpdate>()?;
237 m.add_class::<crate::defi::data::PoolFeeCollect>()?;
238 m.add_class::<crate::defi::data::PoolFlash>()?;
239 m.add_class::<crate::defi::data::Transaction>()?;
240 m.add_class::<crate::defi::data::Block>()?;
241 m.add_class::<crate::defi::dex::DexType>()?;
242 m.add_class::<crate::defi::pool_analysis::PoolProfiler>()?;
243 }
244 Ok(())
245}