Function fang_oost_option::option_calibration::obj_fn_real [−][src]
pub fn obj_fn_real<'b, 'a: 'b, S, U>(
num_u: usize,
asset: f64,
option_datum: &'a [OptionDataMaturity],
rate: f64,
get_max_strike: U,
cf_function: S
) -> impl Fn(&[f64]) -> f64 + Sync + Send + 'b where
S: Fn(&Complex<f64>, f64, &[f64]) -> Complex<f64> + Sync + Send + 'a,
U: Fn(&[f64], f64) -> f64 + Sync + Send + 'a,
Expand description
Returns function which computes the mean squared error between the empirical and analytical option prices.
Examples
extern crate num_complex;
use num_complex::Complex;
extern crate fang_oost_option;
use fang_oost_option::option_calibration;
let num_u=128;
let cf = |u: &Complex<f64>, _m: f64, _sl: &[f64]| Complex::new(u.im, 0.0);
let arr = vec![
option_calibration::OptionData {
price: 3.0,
strike: 15.0,
},
option_calibration::OptionData {
price: 4.0,
strike: 13.5,
},
option_calibration::OptionData {
price: 5.0,
strike: 11.0,
},
];
let option_data_mat = vec![option_calibration::OptionDataMaturity {
maturity: 1.0,
option_data: arr,
}];
let params = vec![0.0];
let asset = 15.0;
let rate = 0.04;
let max_strike = 300.0;
let result = option_calibration::obj_fn_real(
num_u, asset, &option_data_mat,
rate, |_p, _m| max_strike, &cf
)(¶ms);
assert!(result.is_finite());
assert!(result > 0.0);