4 people like it.

Black Scholes Option Pricing

The code shows simple implementation of blackscholes algorithm.

 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: 
31: 
32: 
33: 
34: 
type Style = Call | Put
  
let cnd x =
   let pow x n = exp (n * log(x) ) 
   let a1 =  0.31938153
   let a2 = -0.356563782
   let a3 =  1.781477937
   let a4 = -1.821255978
   let a5 =  1.330274429
   let pi = 4.0 * atan 1.0
   let l  = abs(x)
   let k  = 1.0 / (1.0 + 0.2316419 * l)
   let w  = ref (1.0-1.0/sqrt(2.0*pi)*exp(-l*l/2.0)*(a1*k+a2*k*k+a3*(pow k 3.0)+a4*(pow k 4.0)+a5*(pow k 5.0)))
   if (x < 0.0) then  w := 1.0 - !w
   !w
 
// call_put_flag: 'c' if call option; otherwise put option
// s: stock price
// x: strike price of option
// t: time to expiration in years
// r: risk free interest rate
// v: volatility
let black_scholes style s x t r v =
        let d1=(log(s / x) + (r+v*v/2.0)*t)/(v*sqrt(t))
        let d2=d1-v*sqrt(t)
        let res = ref 0.0
        match style with
         | Call -> res := s*cnd(d1)-x*exp(-r*t)*cnd(d2)
         | Put -> res := x*exp(-r*t)*cnd(-d2)-s*cnd(-d1)
        !res
 
 
// Example usage::
// black_scholes Call 60.0 65.0 0.25 0.08 0.3;;
union case Style.Call: Style
union case Style.Put: Style
val cnd : x:float -> float

Full name: Script.cnd
val x : float
val pow : (float -> float -> float)
val n : float
val exp : value:'T -> 'T (requires member Exp)

Full name: Microsoft.FSharp.Core.Operators.exp
val log : value:'T -> 'T (requires member Log)

Full name: Microsoft.FSharp.Core.Operators.log
val a1 : float
val a2 : float
val a3 : float
val a4 : float
val a5 : float
val pi : float
val atan : value:'T -> 'T (requires member Atan)

Full name: Microsoft.FSharp.Core.Operators.atan
val l : float
val abs : value:'T -> 'T (requires member Abs)

Full name: Microsoft.FSharp.Core.Operators.abs
val k : float
val w : float ref
Multiple items
val ref : value:'T -> 'T ref

Full name: Microsoft.FSharp.Core.Operators.ref

--------------------
type 'T ref = Ref<'T>

Full name: Microsoft.FSharp.Core.ref<_>
val sqrt : value:'T -> 'U (requires member Sqrt)

Full name: Microsoft.FSharp.Core.Operators.sqrt
val black_scholes : style:Style -> s:float -> x:float -> t:float -> r:float -> v:float -> float

Full name: Script.black_scholes
val style : Style
val s : float
val t : float
val r : float
val v : float
val d1 : float
val d2 : float
val res : float ref
Next Version Raw view Test code New version

More information

Link:http://fssnip.net/3I
Posted:13 years ago
Author:Kishor Aher
Tags: finance