From d793ecb2feac4ab02e0ff51c07f09c310354f0f4 Mon Sep 17 00:00:00 2001 From: Kevin Keogh Date: Sun, 2 Apr 2017 18:50:01 -0400 Subject: [PATCH] merge 2 loops --- src/black_scholes.c | 3 --- src/gbm_mc.c | 19 ++++++++----------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/black_scholes.c b/src/black_scholes.c index 20ec751..32b1c3d 100644 --- a/src/black_scholes.c +++ b/src/black_scholes.c @@ -3,10 +3,7 @@ #include "black_scholes.h" #include #include -#include -#include #include -#include double normalcdf(double value) { diff --git a/src/gbm_mc.c b/src/gbm_mc.c index 1bce48c..1bbfe37 100644 --- a/src/gbm_mc.c +++ b/src/gbm_mc.c @@ -10,6 +10,7 @@ double gbm_simulation(double spot, double rfr, double vol, double tte, double rand) { + /* S_T = S_0e^{[r-\frac{\sigma^2}{2}]t + \sigma\sqrt{t}\xi_i} */ double drift, stoch; drift = (rfr - pow(vol, 2) / 2) * tte; stoch = vol * pow(tte, 0.5) * rand; @@ -17,39 +18,35 @@ double gbm_simulation(double spot, double rfr, double vol, double tte, double ra } -double gbm(double spot, double rfr, double vol, double strike, struct tm expiry, struct tm value, int type, int sims) +double gbm(double spot, double rfr, double vol, double strike, struct tm expiry, + struct tm value, int type, int sims) { const gsl_rng_type *T; + double tte, expiry_date, value_date, level, price, rand; + double *results; gsl_rng *r; - double tte, expiry_date, value_date, level, price; - double *rands, *results; int i; - rands = (double *)malloc(sizeof(double) * sims); results = (double *)malloc(sizeof(double) * sims); expiry_date = mktime(&expiry); value_date = mktime(&value); tte = difftime(expiry_date, value_date) / (60 * 60 * 24 * 365); - /* get array of normal random numbers */ + /* GSL RNG setup */ gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc(T); for (i=0; i