Going to use a package by Patrick O Perry.

The obvious problem that I face is that there is no documentation. Hope this blog save someone else’s time1. Installation (On linux for windows use cygwin ) [Tested on Linux Mint and Windows XP

a. Install gsl-random.. Prerequisites is to install gsl for linux.. Follow the steps here

i) Go here –. http://mirrors.ispros.com.bd/gnu/gsl/

ii) Get the latest gsl-version.tar.gz from there. My case it was gsl-1.16.tar.gz

iii) Open the terminal and do the following

cd ~/Downloads

`tar -xzf gsl-1.16.tar.gz`

cd gsl-1.16/

sudo ./configure

sudo make

sudo make install

b.) Install gsl-random from hackage

1. sudo cabal install gsl-random

2. sudo cabal install monte-carlo

——————————————————Using the package———————————————————

1. Generate random number for various distributions (check)

———- Please note that all of the example is not 100 % my effort —–

—– in fact I have written only bmt and display random functions here —

<span style="font-family: ‘Helvetica Neue’, Helvetica, Arial, ‘Nimbus Sans L’, sans-serif; font-size: 15px; font-style: inherit; line-height: 1.625;">import System.Random</span></pre>

import Data.List

— Number of samples to take

count = 10000

— Function to process our random sequence

process :: [(Double, Double)] -> (Int, Int)

process = foldl’ sumInCircle (0, 0)

— Function to process a running value and a random value, producing a new running value.

sumInCircle :: (Int, Int) -> (Double, Double) -> (Int, Int)

sumInCircle (ins, total) (x, y) = (ins + if x*x + y*y [Double]

bmt (u1:u2:xs) = [sqrt(-2 * log u1) * cos (2 * pi * u1),sqrt(-2 * log u1) * cos ( 2* pi * u2) ] ++ (bmt xs)

— Function to display the running value.

display:: (Int, Int) -> String

display (heads, coins) = "pi = " ++ (show $ 4.0 * fromIntegral heads / fromIntegral coins)

— to display random numbers

displayRand:: [Double] -> String

displayRand [] = ""

displayRand (x:xs) = "list = " ++ show x ++ displayRand xs

— function to prepare the random sequence for processing

prep :: [Double] -> [(Double, Double)]

prep (a:b:r) = (a,b):prep r

main = do

g <- newStdGen

putStrLn . display .process . take count . prep $ randoms g

putStrLn . displayRand . take 100 $ (randomRs (0,1) g)

putStrLn . displayRand . take 100 $ (bmt (randomRs (0,1) g))

<pre>

API –> (should be similar to this one )

simulate 1000 (with randnormal 1000) (fun “callprice”)

—- plot random numbers generated by last and second last line —-

so the good news is that plot looks like they the random numbers are good enough to be used

**— To Do —**

— use MC simulations to get put and call price and compare with the Black scholes prices

—– To be continued ———