Skip to main content

rustyqlib/equity/
build_contracts.rs

1//use crate::rates;
2//use crate::rates::deposits::Deposit;
3
4use super::vanilla_option::{EquityOption};
5use crate::core::utils::Contract;
6use crate::core::data_models::ProductData;
7
8pub fn build_eq_contracts_from_json(data: Vec<Contract>) -> Vec<Box<EquityOption>> {
9    let derivatives:Vec<Box<EquityOption>> = data.iter().map(|x| {
10        let ProductData::Option(opt_data) = &x.product_type else {
11            panic!("Not an option!");
12        };
13        // quotes used for implied vol calibration carry a market price but
14        // no input vol; seed a placeholder flat vol (the implied solve does
15        // not depend on it)
16        let mut opt_data = opt_data.clone();
17        if opt_data.volatility.is_none() && opt_data.vol_surface.is_none() {
18            opt_data.volatility = Some(0.2);
19        }
20        EquityOption::from_json(&opt_data)
21    }).collect();
22    return derivatives;
23}