#option #linux #pricing #algorithm #documentation

fang_oost_option

A library implementing Fang and Oosterlee’s algorithm for option pricing

47 releases (30 breaking)

new 0.31.0 Oct 23, 2020
0.29.1 Oct 12, 2020
0.28.1 Jan 11, 2020
0.28.0 Mar 2, 2019
0.20.0 Jul 26, 2018
Download history 35/week @ 2020-07-05 71/week @ 2020-07-12 1/week @ 2020-07-19 4/week @ 2020-07-26 75/week @ 2020-08-09 79/week @ 2020-08-16 43/week @ 2020-08-23 41/week @ 2020-08-30 220/week @ 2020-09-06 5/week @ 2020-09-13 5/week @ 2020-09-20 6/week @ 2020-09-27 41/week @ 2020-10-04 96/week @ 2020-10-11 198/week @ 2020-10-18

266 downloads per month
Used in carr_madan

MIT license

68KB
1.5K SLoC

Linux Codecov
lin-badge cov-badge

Fang-Oosterlee Option Pricing for Rust

Implements Fang-Oosterlee option pricing in Rust. Documentation is at docs.rs

Use

The crate is available on crates.io.

Import and use:

extern crate num_complex;
use num_complex::Complex;
extern crate fang_oost_option;
use fang_oost_option::option_pricing;
let num_u:usize = 256;
let asset = 50.0;
let strikes = vec![75.0, 50.0, 40.0];
// max_strike sets the domain of the empirical estimate.  
// This should be large enough to capture the potential
// dynamics of the underlying, but not too large or accuracy
// will sacrificed.  A good rule of thumb is to scale this
// in proportion to the volatility of the underlying.  For
// example, if the underlying is 50.0 and has a (log) 
// volatility of 0.3, then a good max strike would be
// exp(0.3*scale)*50.0.  I tend to use scale=10, yielding
// in this example ~1004.
let max_strike = 1004.0; 
let rate = 0.03;
let t_maturity = 0.5;
let volatility:f64 = 0.3; 
//As an example, cf is standard diffusion
let cf = |u: &Complex<f64>| {
    ((rate-volatility*volatility*0.5)*t_maturity*u+volatility*volatility*t_maturity*u*u*0.5).exp()
};
let prices = option_pricing::fang_oost_call_price(
    num_u, asset, &strikes, max_strike,
    rate, t_maturity, &cf
);

Speed

The benchmarks are comparable to my C++ implementation. To run the tests with benchmarking, use cargo bench. You can see the benchmarks at https://danielhstahl.github.io/fang_oost_option_rust/report/index.html.

Dependencies

~3MB
~63K SLoC