2017-02-02 4 views
0

이것은 정말로 바보 같은 질문 일뿐, 무엇을해야할지 확신하지 못합니다. 모두 ex div 날짜와 이에 해당하는 divYield를 반환하는 함수가 있습니다. evalDate~expiration 날짜 옵션입니다. 하나의 항목이 포함 evalDateexpiration, 따라서 ddy.exDivDates, ddy.dividendYields 각 사이에 하나 개의 배당이있는 경우부트 스트랩 ZeroCurve에 ex-div 날짜와 div 금액이 하나만 있습니다.

Handle<YieldTermStructure> dividendTermStructure(bootstrapDividendCurveDB("INTC", today, expiration, underlyingPrice)); 

boost::shared_ptr<ZeroCurve> 
bootstrapDividendCurveDB() 
{ 
.... 
    return boost::shared_ptr<ZeroCurve>(new ZeroCurve(ddy.exDivDates, ddy.dividendYields, ActualActual(), calendar)); 
} 

이 후, 그러나

//instantiate BSM process 
    Handle<Quote> underlyingH(boost::shared_ptr<Quote>(new SimpleQuote(underlyingPrice))); 
    boost::shared_ptr<BlackScholesMertonProcess> bsmProcess(new BlackScholesMertonProcess(underlyingH, 
     dividendTermStructure, yieldTermStructure, volatilityTermStructure)); 

에 전달되는, 오류가 발생합니다 :

unknown location(0): fatal error: in "testAmericanOptionPricingWithDividends": QuantLib::Error: not enough input dates given 
FD_Div_IRAmerican.cpp(524): last checkpoint: "testAmericanOptionPricingWithDividends" entry. 

이 코드 섹션을 얻은 예가이 문제를 해결하는 방법은 이전의 나누기를 사용하는 것입니다. evalDate (오늘)가 그 전 div 날짜를 지난 경우에도 수익이 발생합니다. 그런 식으로 ZeroCurve을 구축하기에 충분한 점수가있는 값이 적어도 두 개 있습니다.

그럴 것 같지 않습니다. 이 경우 만료일과 "오늘"사이에 단 하나의 배당금을 가질 수있는 짧은 일자 옵션의 경우 어떻게해야합니까?

답변

1

그런 경우 사용자가 가진 단일 값을 기반으로 플랫 커브를 사용하는 것이 좋습니다. 귀하의 공장 기능이 될 것입니다 뭔가 같은 :

boost::shared_ptr<YieldTermStructure> 
bootstrapDividendCurveDB() 
{ 
... 
if (just one dividend) 
    return boost::make_shared<FlatForward>(evalDate, single_dividend, 
              ActualActual()); 
else 
    return boost::make_shared<ZeroCurve>(ddy.exDivDates, ddy.dividendYields, 
             ActualActual(), calendar)); 
} 

참고 사항 : 당신이 위와을 구축 할 경우 ZeroCurve에 대한 참조 날짜가 exDivDate 벡터의 첫 번째 날짜가 아닌 평가 일 것입니다. 이것이 원하는 것이 아니라면 평가 날짜를 날짜 벡터 앞에 추가하고 또 다른 배당금 (첫 번째 코드의 사본 일 수도 있음)을 요금 벡터 앞에 추가해야합니다.

+0

감사합니다. 그거야. 나는 너의 "메모"에 약간 혼란 스럽다. 내가 반환하는 것은 ex-div 날짜가 아니라 평가 날짜 (오늘)가되어야한다고 말하고 있습니까? 나는 왜주의가 보증되는지 모르겠다. – Ivan

+0

커브는'ddy.exDivDates' 벡터의 첫 번째 날짜부터 시작하고 그 날짜 이전에 요금을 물으면 예외가 발생합니다. –

+0

Gotcha. 감사. – Ivan