이미 채권 및 할인 곡선을 구축 한 점을 감안, 당신은와 비슷한 방식으로 연결 한 :
discount_handle = YieldTermStructureRelinkableHandle(discount_curve)
bond.setPricingEngine(DiscountingBondEngine(discount_handle))
먼저 사용하고 기존의 할인 곡선을 통해 확산을 추가 할 수 있습니다 수정 된 곡선은 채권 가격을 책정합니다. 뭔가 같은 : 위의 후
discount_handle.linkTo(new_curve)
을 :
nodes = [ 1, 2, 5, 7, 10 ] # the durations
dates = [ today + Period(n, Years) for n in nodes ]
spreads = [ SimpleQuote(0.0) for n in nodes ] # null spreads to begin
new_curve = SpreadedLinearZeroInterpolatedTermStructure(
discount_curve,
[ QuoteHandle(q) for q in spreads ],
dates)
는 당신에게 당신이 원래의 할인 곡선 대신 사용할 수있는 모든 0 초기 스프레드와 새로운 곡선 (그리고 끔찍한 클래스 이름을) 줄 것이다 , 채권은 여전히 동일한 가격을 반환해야합니다 (스프레드가 모두 null이므로). 특정 키 속도 기간을 계산할 때
, 당신은 해당 견적을 이동할 수 있습니다 당신은 5 년 따옴표 (위의 목록에서 세 번째)을 충돌 할 경우, 예를 들어 실행
spreads[2].setValue(0.001) # 10 bps
곡선이 그에 따라 업데이트되고 채권 가격이 변경되어야합니다.
참고 : 위의 내용은 스프레드간에 삽입되므로 5 년 간을 10bps로 이동하고 2 년 간을 변경하지 않으면 약 3 년이 약 3bps만큼 이동합니다. 이것을 줄이려면 (원하는 것이 아닌 경우) 커브에 포인트를 더 추가하고 다양한 범위를 제한 할 수 있습니다. 예를 들어, 5 년에서 1 개월을, 5 년에서 1 개월을 더한 포인트를 추가하면 5 년 포인트를 이동하면 2 개월 만 영향을받습니다.
답변 해 주셔서 대단히 감사드립니다. 말할 필요도없이 패키지와 팁이 매우 유용합니다. 내가 구조를 배우려고 시도하고 있지만 스프레드 [2] .setValue (0.001)를 사용하여 커브를 수정하는 방법이 있다는 것에 대한 나의 무지에 사과드립니다. 위의 답변 오프, 나는 다음과 같은 discount_handle.linkTo (new_curve)을 실행하면 스프레드 [2] .setValue (0.001) fixed_rate_bond.setPricingEngine (new_curve) 인쇄 (fixed_rate_bond.NPV()) 난 여전히 setValue() 이전과 동일한 NPV를 수신합니다. 예상 되나요? – user6142489
해당 위치에서 업데이트해야합니다. 코드를 QuantLib 메일 링리스트에 올리면 알아낼 수 있습니다. –
참조하는 곳이 sourceforge에 게시하는 방법을 모릅니다. 내가 보낼 수있는 전자 메일 배포본이 있습니까? 고맙습니다. – user6142489