1
0
mirror of https://github.com/payden/libwsclient synced 2025-06-13 12:53:52 +00:00
payden_libwsclient/utils/profit_calculator.rs

20 lines
925 B
Rust
Raw Permalink Normal View History

2025-05-16 06:09:24 +00:00
use crate::error::Result;
use crate::models::market::Market;
use crate::models::order::{Order, OrderSide};
use rust_decimal::Decimal;
pub fn calculate_profit(market: &Market, buy_order: &Order, sell_order: &Order) -> Result<f64> {
if buy_order.side != OrderSide::Bid || sell_order.side != OrderSide::Ask {
return Err(anyhow!("Invalid order sides for profit calculation"));
}
let buy_price = Decimal::from_f64(buy_order.price).ok_or_else(|| anyhow!("Invalid buy price"))?;
let sell_price = Decimal::from_f64(sell_order.price).ok_or_else(|| anyhow!("Invalid sell price"))?;
let quantity = Decimal::from_f64(buy_order.quantity).ok_or_else(|| anyhow!("Invalid quantity"))?;
let buy_value = buy_price * quantity;
let sell_value = sell_price * quantity;
let profit = sell_value - buy_value;
Ok(profit.to_f64().ok_or_else(|| anyhow!("Failed to convert profit to f64"))?)
}