Ошибка при попытке цена прибора при использовании QuantLib

StackOverflow https://stackoverflow.com/questions/4013277

  •  26-09-2019
  •  | 
  •  

Вопрос

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

SWAPRATESSERVICETSTESTS.IMPLIEDRATE_FORTWENTY_X_TENYEARSWAP_RETURNSRATE: SYSTEM.ApplicationException: 2-я нога: пустая ручка не может быть разветвлена

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

ВАЖНО: Я использую версию C # Swig 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

    }

Это часть более крупного метода конструктивных каприз

        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           

С помощью метода подразумеваемого действия следующим образом (я вышел на некоторые части из-за 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 ++. Надеяся, что это воздействие может раскрыть некоторое понимание того, что может происходить здесь.

Это было полезно?

Решение

На основе обратной связи от Quantlib рассылающий список

Индекс 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top