double SingleOptionContract::getPayoff(double forSpot) { double premium = 0; if (getPremiumPaymentDate() > getMaturityDate()) { premium = getPremiumAmount(); } if (type == PUT) { return (max(0.0, getStrike() - forSpot) - premium) * getVolume() * getBuySellAsDouble(); } else { return (max(0.0, forSpot - getStrike()) - premium) * getVolume() * getBuySellAsDouble(); } }
double Put::payoff() { double po = getStrike() - getSpot(); if(po>0) { return po; }; return 0; //return max(spot-getStrike(),0); };
double EuropeanOption::getOptionValue(boost::shared_ptr<RatesEnvironment> re) { Date valueDate = re->getAnchorDate(); if (valueDate > getSettlementDate()) { return 0; } double premium = 0; double F = (re->getFRS())->getForward(getSettlementDate()); double df = (re->getDRS()->getDiscountFactor(getSettlementDate())); if (valueDate < getMaturityDate()) { double sd = (re->getVRS())->getStandardDeviation(getMaturityDate(), getStrike(), F); option->setParameters(F,strike,sd,df); premium += option->getPremium(); return premium * getVolume(); } return option->getPremiumAfterMaturity(F, df) * volume; }