AsianOption.cpp
#include "AsianOption.h"
#include "matlib.h"
#include "MonteCarloPricer.h"
#include "CallOption.h"
double AsianOption::payoff(
const std::vector<double>& stockPrices
) const {
double m = mean(stockPrices);
if (m > getStrike()) {
return m - getStrike();
}
else {
return 0;
}
}
static void testMonteCarloPriceAsian() {
rng("default");
AsianOption option;
option.setMaturity(1.0);
option.setStrike(100.0);
BlackScholesModel model;
model.stockPrice = 95;
model.volatility = 0.1;
model.drift = 0.0;
model.riskFreeRate = 0.0;
MonteCarloPricer pricer;
pricer.nSteps = 100;
pricer.nScenarios = 3;
double price = pricer.price(option, model);
CallOption callOption;
callOption.setMaturity(1.0);
callOption.setStrike(100.0);
double europeanPrice = callOption.price(model);
// without studying any theory on asian options we
// can't guess much about the price, but it is presumably
// not too wildly different from the european option price
assert(price > 0);
assert(price < 2*europeanPrice);
}
void testAsianOption() {
TEST(testMonteCarloPriceAsian);
}