PDPF

advertisement
Derivative Pricing Using Parallel
Monte Carlo Simulations
B97902052 楊朝富
B97902114 邱榮斌
Introduction
Nowadays, using mathematical analytical methods such as PDEs or some other
techniques to compute the valuation of derivatives seems to be developed to an
extreme.
However, there’re many derivatives cannot have a closed-form or analytical
solutions. Therefore, Monte Carlo simulations play more and more important roles in
today’s derivative pricing. But Monte Carlo simulations needs large and heavy
computations, and thus are too slow in sequential environment. With the advent of
lots of parallel structures and parallel APIs, we are able to push the Monte Carlo
methods to a parallel age now.
Method
The derivative's value equals to the expected cash flow it generates on the maturity
date.
The cash flow it generates depending on the underlying stock price on the maturity
date.
We assume that the stock price St follows Wiener process:
where Wt is a standard normal
distribution
In Monte Carlo method, we sample the possible outcomes of the stock price, and use
them to calculate the value of the derivative.
The Procedure
•
Simulate p paths, and average the value of options in each paths.
•
For each path, divide time interval T to n part, one with T/n=dt. Simulate the
stock price S step by step.
•
For each step, generate a random number in uniform distribution on [0,1] and
then map it to normal distribution.
•
The Simulation Formula
•
會有誤差,觀察到dWt數期望值為0時S期望值會越來越小( S + 0.8*1.2 =
S*0.96 < S) 跑出來股價會很小
轉成指數形式,直接算下一個時間點的S比較準
S(t+dt)=S(t)*exp( R + SD*dWt)
Problem with random variable
Should actually be uniform distribution on [0,1]
If its expected value doesn’t match, the stock price tends to increase or decrease
through time
If its variance value doesn’t match, the options’ price will be wrong since the options’
value includes hedging value which is highly correlated with variance
每階動差都要對才能模擬我們要的股價波動
Test on Random Variable
Rand() in <stdlib.h>
Should use properly or the expected value might be too small. The quality of this
random number is not so good, the answer converge slower thus result in bigger error
with limited trails.
Halton
It can generate tuples of low correlation number, but unfortunately, the variance of
the number seems to be too small. That will result in a very low option price.
Linear Congruential Generator
•
LCG(m,a,c,X0)
•
X0=1
•
Xn=(a*Xn-1 + c) mod m
LCG(2^31-1,16807,0,1) works fairly well
Result
We verify our result with a program using the same method, provide by [].
For European call, there is also mathematical formula to compute the result. Compare
with it to make sure our program is working well.
Parallelization
•
Generate the seed on first thread
•
Each thread simulate sum paths using a subset of random number
Why the speedup is only like this?
1. All random number generates on CPU before simulating the paths parallel
2.
Download