2017-02-16 12 views
1

바닥이있는 채권에서 현금 흐름을 생성하는 중 문제가 발생했습니다.QuantLib을 사용하여 FloatingRateBonds의 현금 흐름 계산

제가 처음에는 가격을 책정하지 않아서 문제가있었습니다. 나는 그 이후로 다음과 같이 더 값진 사람을 세웠다.

ql_bond = QuantLib.FloatingRateBond(settlement_days, #settlementDays 
           face_amount, # faceAmount 
           ql_schedule, 
           ql_index, 
           QuantLib.Thirty360(), 
           gearings = [], 
           spreads = [libor_spread], 
           caps = [], 
           floors = [libor_floor] 
    ) 

    volatility = 0 
    vol = QuantLib.ConstantOptionletVolatility(settlement_days, 
              QuantLib.UnitedKingdom(), 
              QuantLib.Unadjusted, 
              volatility, 
              QuantLib.Thirty360()) 

    pricer = QuantLib.BlackIborCouponPricer(QuantLib.OptionletVolatilityStructureHandle(vol)) 
    QuantLib.setCouponPricer(ql_bond.cashflows(), pricer) 

현금 흐름에 따라 적절한 금액을 현금으로 생성 할 수 있습니다. 그러나 다른 때는 오류가 발생합니다. 경고 (-.0225)에 주어진 값은 libor_floor-libor_spread와 같습니다. 나는 여기서 확실한 실수를하고 있다고 확신하지만 어디서부터 시작해야할지 확신하지 못한다. QuantLib에 익숙한 사람이라면 누구나 제안 해 주시면 대단히 감사하겠습니다.

Traceback (most recent call last): 
    File "C:\Users\Ryan\git\optimizer\src\calcs\cashflow_calcs.py", line 161, in generate_cashflow 
    cashflows.append(utils.cashflow.InterestCashflow(cf_date, cf.amount(), cf_fixing_date, c.indexFixing(), c.accrualDays())) 
    File "C:\Users\Ryan\Anaconda3\lib\site-packages\QuantLib\QuantLib.py", line 8844, in amount 
    return _QuantLib.CashFlow_amount(self) 
RuntimeError: strike + displacement (-0.0225 + 0) must be non-negative 

이것은 내가 문제는 QuantLib 자체하지 Using QuantLib to compute cash flows for FloatingRateBond with Floor

답변

0

을 만들어 이전 게시물에 관련이있다. 검정 모델은 로그 정규식이며 음수 값에는 사용할 수 없습니다 (로그를 취할 수 없기 때문에). 추측 할 수 있듯이, 금리가 마이너스로 돌아서 자 문제가되는 것으로 밝혀졌습니다. 첫 번째는 모델을 변경하고 정상적인 것을 사용하는 것이고 두 번째는 고정 된 변위 Dlog(R+D)log(R) 대신에 도입하여 로그의 인수가 양수가되도록하는 두 가지 방법으로 해결할 수 있습니다.

두 경우 모두 변동성이 변경되어야합니다 (실제로는 변동 이자율도 사용 된 모델 및 변위를 알려줍니다). QuantLib에서 이것은 변동성 기간 구조 —을 만들 때 관련 정보를 전달해야 함을 의미합니다. 현재 문제가있는 부분입니다. C++ 라이브러리는 잠시 동안 기능을 제공했지만 Python 모듈은 해당하는 ConstantOptionletVolatility을 아직 내 보내지 않으므로 기본값 (로그 정규 모델 및 널 변위)을 얻게됩니다.

당신이 꿀꺽 꿀꺽 다소 마음에 드시면, 당신은 해당 인터페이스 파일을 수정할 수 있습니다 QuantLib-SWIG/SWIG/volatilities.i (당신은 같은에 ConstantSwaptionVolatility 클래스 끝낼 같은 방식으로는 ConstantOptionletVolatility 생성자에 인수의 몇 가지를 추가해야합니다 파일)에서, 랩퍼를 재생성하고 컴파일하십시오. 그렇지 않은 경우 https://github.com/lballabio/QuantLib-SWIG/issues에서 문제를 열면 다음 출시에서 해당 기능을 추가하려고 시도합니다.