[][src]Function fang_oost_option::option_calibration::obj_fn_real

pub fn obj_fn_real<S, U>(
    num_u: usize,
    asset: f64,
    option_datum: &[OptionDataMaturity],
    rate: f64,
    params: &[f64],
    get_max_strike: U,
    cf_function: S
) -> f64 where
    S: Fn(&Complex<f64>, f64, &[f64]) -> Complex<f64> + Sync + Send,
    U: Fn(&[f64], f64) -> f64 + Sync + Send

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, &params, |_p, _m| max_strike, &cf
);
assert!(result.is_finite());
assert!(result > 0.0);