finlib 0.0.10

Quant finance functions implemented in Rust
Documentation
use crate::derivatives::options::Moneyness::{AtTheMoney, InTheMoney, OutOfTheMoney};
use crate::derivatives::options::{Moneyness, OptionContract, OptionType};

pub trait IntrinsicValue {
    fn intrinsic_value(&self, underlying_value: f64) -> f64;
    fn moneyness(&self, underlying_value: f64) -> Moneyness;
}

impl IntrinsicValue for OptionContract {
    fn intrinsic_value(&self, underlying_value: f64) -> f64 {
        match self.option_type {
            OptionType::Call => underlying_value - self.strike,
            OptionType::Put => self.strike - underlying_value,
        }
    }

    fn moneyness(&self, underlying_value: f64) -> Moneyness {
        let val = self.intrinsic_value(underlying_value);
        if val < 0. {
            OutOfTheMoney
        } else if val == 0. {
            AtTheMoney
        } else {
            InTheMoney
        }
    }
}