-
-
Notifications
You must be signed in to change notification settings - Fork 122
/
option_pricing.rs
30 lines (26 loc) · 1.02 KB
/
option_pricing.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use time::macros::date;
use RustQuant::instruments::options::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let option = BlackScholesMertonBuilder::default()
.underlying_price(100.0)
.strike_price(100.0)
.volatility(0.3)
.risk_free_rate(0.03)
.cost_of_carry(0.05)
.expiration_date(date!(2024 - 12 - 31))
.option_type(TypeFlag::Call)
.build()?;
// Print the option price and greeks.
// There are more greeks available, but these are the most common.
println!("Call price = \t {}", option.price());
println!("Call delta = \t {}", option.delta());
println!("Call gamma = \t {}", option.gamma());
println!("Call theta = \t {}", option.theta());
println!("Call vega = \t {}", option.vega());
println!("Call rho = \t {}", option.rho());
// Implied volatility calculation.
// Based on 'Let's Be Rational' method by Peter Jaeckel.
let price = 10.0;
println!("IV = \t\t {}", option.implied_volatility(price));
Ok(())
}