예제 #1
0
파일: Contracts.cpp 프로젝트: daveysj/sjd
    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();
        }
    }
예제 #2
0
double Put::payoff()
	{
		double po = getStrike() - getSpot();
		if(po>0)
			{
			return po;
			};
			return 0;
		//return max(spot-getStrike(),0);
	};
예제 #3
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;
  }