use openpit::param::{AccountId, Asset, Price, Quantity, Side, TradeAmount, Volume};
use openpit::pretrade::policies::{
OrderSizeBrokerBarrier, OrderSizeLimit, OrderSizeLimitPolicy, OrderSizeLimitSettings,
};
use openpit::storage::NoLocking;
use openpit::{Engine, Instrument, OrderOperation};
#[test]
fn example_readme_hello_world() -> Result<(), Box<dyn std::error::Error>> {
let engine = Engine::builder::<OrderOperation, (), ()>()
.no_sync()
.pre_trade(OrderSizeLimitPolicy::<NoLocking>::new(
OrderSizeLimitSettings::new(
Some(OrderSizeBrokerBarrier {
limit: OrderSizeLimit {
max_quantity: Some(Quantity::from_str("500")?),
max_notional: Some(Volume::from_str("100000")?),
},
}),
[],
[],
)?,
))
.build()?;
let order = OrderOperation {
instrument: Instrument::new(Asset::new("AAPL")?, Asset::new("USD")?),
account_id: AccountId::from_u64(99224416),
side: Side::Buy,
trade_amount: TradeAmount::Quantity(Quantity::from_str("1000")?),
price: Some(Price::from_str("185")?),
};
match engine.execute_pre_trade(order) {
Ok(mut reservation) => reservation.commit(),
Err(rejects) => println!("order rejected: {rejects}"),
}
Ok(())
}