Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
F# is a relatively new .NET technology that is worthy of a developer’s arsenal. It provides quite a few benefits such as type inference, native non-mutable states for concurrency, pattern matching and script-esque capabilities.
One thing I would love is the ability to write unit tests in F#. I believe the resulting code would be succinct and reusable. Though, I have not figured out such a framework, here is my first attempt at F# through the famous Black Scholes .
Without much of a history, finance or math lesson, Black Scholes is an equation to price options. Basically, an option is a financial instrument that gives the buyer the option to buy or sell another underlying asset at a certain price in the future for a premium paid today. Black Scholes is a closed form equation to help estimate the premium to charge for such an option.
#light open System type PutOrCall = | Call = 1 | Put = 2 let CumulativeNormalDistribution (x: double) = let L = abs(x) let K = 1.0 / (1.0 + 0.2316419 * L) let dcnd = 1.0 - 1.0 / sqrt(2.0 * Math.PI) * exp(-L * L / 2.0) * (0.31938153 * K + -0.356563782 * K * K + 1.781477937 * Math.Pow(K, 3.0) + -1.821255978 * Math.Pow(K, 4.0) + 1.330274429 * Math.Pow(K, 5.0)) if x < 0.0 then 1.0 - dcnd else dcnd let BlackScholes (pc: PutOrCall) stock strike time interestRate vol = let d1 = (log(stock / strike) + (interestRate + vol * vol / 2.0) * time) / (vol * sqrt(time)) let d2 = d1 - vol * sqrt(time) if pc = PutOrCall.Call then stock * CumulativeNormalDistribution(d1) - strike * exp(-interestRate * time) * CumulativeNormalDistribution(d2) else strike * exp(-interestRate * time) * CumulativeNormalDistribution(-d2) - stock * CumulativeNormalDistribution(-d1)