2010-10-25 11 views
1

Я получаю следующую ошибку при попытке оценить обмен 20x10 с загруженной кривой. Ошибка вышвырнут на последней строке функции ImpliedRateОшибка при попытке оценивать инструмент при использовании Quantlib

SwapRatesServiceTests.ImpliedRate_ForTwenty_x_TenYearSwap_ReturnsRate: System.ApplicationException: вторая нога: пустая ручка не может быть разыменовываются

Я не имею ни малейшего понятия, где чтобы начать отлаживать эту проблему. Любая помощь будет высоко оценена.

ВАЖНО: Я использую версию C# глотком Quantlib, поэтому мой фактический код прод выглядит следующим образом на примере swapvaluation.cpp:

Метод испытания:

[Test] 
    public void ImpliedRate_ForTwenty_x_TenYearSwap_ReturnsRate() 
    { 
     //Arrange 
     var startingDate = new Date(10,Month.October,2030); // starting date of 20x10yr swap 
     var length= 10; 
     repo.Setup(r => r.Read(It.IsAny<string>())).Returns(LoadSwapPoints()); // LoadSwapPoints returns IEnumerable<RateHelpers> 

     //Act 
     service.ConstructSwapPoints(SettlementDate); 
     var instrumentRate = service.ImpliedRate(startingDate, length); 

     //Assert 
     Assert.That(instrumentRate, Is.Not.Null); // this must change to a value test 

    } 

Это является частью более крупного метода ConstructSwapPoints

 var depoFRASwapInstruments = PointVector; // RateHelperVector populated with RateHelpers 
     DayCounter termStructureDayCounter = new ActualActual(ActualActual.Convention.Actual365); 

     QuoteHandleVector quotes = new QuoteHandleVector(); 
     DateVector quoteDates = new DateVector(); 

     py = CreatePiecewiseLinearCurve(settlementDate, depoFRASwapInstruments, termStructureDayCounter, quotes, quoteDates); 
     DiscountingTermStructure = new RelinkableYieldTermStructureHandle(py); //RelinkableYieldTermStructureHandle 
     //DiscountingTermStructure.linkTo(py); // alternate way 

     PricingEngine = new DiscountingSwapEngine(DiscountingTermStructure); // DiscountingSwapEngine   

с помощью метода ImpliedRate следующим образом (я отрезала некоторые части из-за ограничений IP);

public double ImpliedRate(Date startingDate, int length) 
    { 

     var swapMaturityDate = startingDate.Add(new Period(length, TimeUnit.Years)); 
     var curveMaturityDate = py.maxDate(); 

     Schedule fixedSchedule = new Schedule(startingDate, swapMaturityDate, new Period(Frequency.Quarterly), SouthAfricanCalender, Convention, Convention, DateGeneration.Rule.Forward, false); 
     Schedule floatSchedule = new Schedule(startingDate, swapMaturityDate, new Period(Frequency.Quarterly), SouthAfricanCalender, Convention, Convention, DateGeneration.Rule.Forward, false); 

     VanillaSwap impliedSwap = new VanillaSwap(
      _VanillaSwap.Type.Payer, 
      10000000.0, 
      fixedSchedule, 
      0.1, 
      Actual365FixedDayCounter, 
      floatSchedule, 
      new Jibar(new Period(Frequency.Quarterly)), 
      0, 
      Actual365FixedDayCounter); 

     impliedSwap.setPricingEngine(PricingEngine); 

     return impliedSwap.fairRate(); // <---exception thrown here 
    } 

Надеюсь, моя терминология верна, поскольку финансовый жаргон по-прежнему новеньен для меня.

Редактировать: Я добавил тег C++, так как я полагаю, что это связано с некоторым базовым кодом C++. Надеясь, что это воздействие может показать некоторые сведения о том, что может происходить здесь.

+0

Я также отправить группу пользователей quantlib, так что я буду обновлять с любой соответствующей обратной связи, полученной. – Ahmad

ответ

0

На основе обратной связи от Quantlib mailing list

Индекс Jibar должен иметь ссылку на риск свободной кривой, созданной. Без структуры сроков, Jibar может возвращать прошлые фиксации, но не прогнозировать будущие. Конструктор Jibar должен быть заменен

new Jibar(new Period(Frequency.Quarterly), DiscountingTermStructure) 

с

VanillaSwap impliedSwap = new VanillaSwap(
    _VanillaSwap.Type.Payer, 
    10000000.0, 
    fixedSchedule, 
    0.1, 
    Actual365FixedDayCounter, 
    floatSchedule, 
    new Jibar(new Period(Frequency.Quarterly), DiscountingTermStructure), 
    0, 
    Actual365FixedDayCounter); 

 Смежные вопросы

  • Нет связанных вопросов^_^