use market_maker_rs::prelude::*;
use market_maker_rs::strategy::avellaneda_stoikov::*;
fn main() {
println!("=== Basic Quote Generation ===\n");
let risk_aversion = dec!(0.1); let order_intensity = dec!(1.5); let time_to_terminal = 3600000; let volatility = dec!(0.2);
let mid_price = dec!(100.0);
let inventory = Decimal::ZERO;
println!("Market Conditions:");
println!(" Mid Price: ${}", mid_price);
println!(" Volatility: {}%", volatility * dec!(100.0));
println!(
" Time to Terminal: {} ms ({} hours)",
time_to_terminal,
time_to_terminal / 3_600_000
);
println!();
let reservation_price = calculate_reservation_price(
mid_price,
inventory,
risk_aversion,
volatility,
time_to_terminal,
)
.expect("Failed to calculate reservation price");
println!("Reservation Price: ${:.2}", reservation_price);
println!(" (Fair value adjusted for inventory risk)");
println!();
let spread =
calculate_optimal_spread(risk_aversion, volatility, time_to_terminal, order_intensity)
.expect("Failed to calculate spread");
println!("Optimal Spread: ${:.4}", spread);
println!();
let (bid, ask) = calculate_optimal_quotes(
mid_price,
inventory,
risk_aversion,
volatility,
time_to_terminal,
order_intensity,
)
.expect("Failed to calculate quotes");
let hundred = dec!(100.0);
println!("Optimal Quotes:");
println!(
" Bid: ${:.2} ({:.2}% below mid)",
bid,
(mid_price - bid) / mid_price * hundred
);
println!(
" Ask: ${:.2} ({:.2}% above mid)",
ask,
(ask - mid_price) / mid_price * hundred
);
println!(" Spread: ${:.2}", ask - bid);
println!();
let quote = Quote {
bid_price: bid,
bid_size: dec!(10.0),
ask_price: ask,
ask_size: dec!(10.0),
timestamp: 0,
};
println!("Quote Summary:");
println!(" Mid: ${:.2}", quote.mid_price());
println!(" Spread: ${:.4}", quote.spread());
println!(
" Spread %: {:.3}%",
quote.spread() / quote.mid_price() * hundred
);
}