use crate::{
core::{Greeks, MarketData, OptionStyle, OptionType, VanillaOption},
models::black_scholes::BlackScholes,
};
pub fn price_eur_vanilla_bs(
kind: OptionType,
spot: f64,
strike: f64,
maturity: f64,
rate: f64,
dividend_yield: f64,
vol: f64,
) -> Result<f64, String> {
let option = VanillaOption::new(OptionStyle::European, kind, strike, maturity);
let market = MarketData::new(spot, rate, dividend_yield);
BlackScholes::price(&option, &market, vol)
}
pub fn greeks_eur_vanilla_bs(
kind: OptionType,
spot: f64,
strike: f64,
maturity: f64,
rate: f64,
dividend_yield: f64,
vol: f64,
) -> Result<Greeks, String> {
let option = VanillaOption::new(OptionStyle::European, kind, strike, maturity);
let market = MarketData::new(spot, rate, dividend_yield);
BlackScholes::greeks(&option, &market, vol)
}
pub fn rational_iv_eur_vanilla_bs(
kind: OptionType,
spot: f64,
strike: f64,
maturity: f64,
rate: f64,
dividend_yield: f64,
target_price: f64,
) -> Result<f64, String> {
let option = VanillaOption::new(OptionStyle::European, kind, strike, maturity);
let market = MarketData::new(spot, rate, dividend_yield);
BlackScholes::rational_implied_vol(target_price, &option, &market)
}