Merge branch 'master' of https://github.com/kevindkeogh/opt-pricer
This commit is contained in:
@@ -9,7 +9,9 @@
|
|||||||
double gbm_simulation(double spot, double rfr, double vol, double tte, double rand)
|
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} */
|
/* S_T = S_0e^{[r-\frac{\sigma^2}{2}]t + \sigma\sqrt{t}\xi_i} */
|
||||||
|
|
||||||
double drift, stoch;
|
double drift, stoch;
|
||||||
|
|
||||||
drift = (rfr - pow(vol, 2) / 2) * tte;
|
drift = (rfr - pow(vol, 2) / 2) * tte;
|
||||||
stoch = vol * pow(tte, 0.5) * rand;
|
stoch = vol * pow(tte, 0.5) * rand;
|
||||||
return spot * exp(drift + stoch);
|
return spot * exp(drift + stoch);
|
||||||
|
|||||||
@@ -15,46 +15,49 @@ int main(int argc, char *argv[])
|
|||||||
int opt, type = 0;
|
int opt, type = 0;
|
||||||
struct tm expiry, value;
|
struct tm expiry, value;
|
||||||
|
|
||||||
|
extern char *optarg;
|
||||||
|
extern int getopt();
|
||||||
|
|
||||||
memset(&expiry, 0, sizeof(expiry));
|
memset(&expiry, 0, sizeof(expiry));
|
||||||
memset(&value, 0, sizeof(value));
|
memset(&value, 0, sizeof(value));
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "s:k:r:v:d:e:n:cp")) != -1) {
|
while ((opt = getopt(argc, argv, "s:k:r:v:d:e:n:cp")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 's':
|
case 's': /* spot */
|
||||||
if (sscanf(optarg, "%lf", &spot) == EOF) {
|
if (sscanf(optarg, "%lf", &spot) == EOF) {
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'k':
|
case 'k': /* strike */
|
||||||
if (sscanf(optarg, "%lf", &strike) == EOF) {
|
if (sscanf(optarg, "%lf", &strike) == EOF) {
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r': /* risk-free rate */
|
||||||
if (sscanf(optarg, "%lf.", &rfr) == EOF) {
|
if (sscanf(optarg, "%lf.", &rfr) == EOF) {
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v': /* implied volatility */
|
||||||
if (sscanf(optarg, "%lf", &vol) == EOF) {
|
if (sscanf(optarg, "%lf", &vol) == EOF) {
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'e': /* expiry date, must be YYYY-MM-DD */
|
||||||
|
strptime(optarg, "%Y-%m-%d", &expiry);
|
||||||
|
break;
|
||||||
|
case 'd': /* valuation date, must be YYYY-MM-DD */
|
||||||
|
strptime(optarg, "%Y-%m-%d", &value);
|
||||||
|
break;
|
||||||
|
case 'n': /* number of simulations */
|
||||||
if (sscanf(optarg, "%lf", &sims) == EOF) {
|
if (sscanf(optarg, "%lf", &sims) == EOF) {
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'c': /* set as call */
|
||||||
strptime(optarg, "%Y-%m-%d", &expiry);
|
|
||||||
break;
|
|
||||||
case 'd':
|
|
||||||
strptime(optarg, "%Y-%m-%d", &value);
|
|
||||||
break;
|
|
||||||
case 'c':
|
|
||||||
type = 1;
|
type = 1;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p': /* set as put */
|
||||||
type = -1;
|
type = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user