Frage

Ich erhalte die folgende Fehlermeldung, wenn einen 20x10-Swap von einer Bootstrap-Kurve des Preis versuchen. Der Fehler in der letzten Zeile der ImpliedRate Funktion geworfen bekommen

  

SwapRatesServiceTests.ImpliedRate_ForTwenty_x_TenYearSwap_ReturnsRate:   System.ApplicationException: 2. Etappe: leer Handle nicht dereferenzierte

sein kann

Ich habe nicht die leiseste Ahnung, wo Sie anfangen, dieses Problem zu debuggen. Jede Hilfe wird sehr geschätzt.

WICHTIG: Ich bin mit der C # Swig Version von quantlib, so mein eigentlichen prod Code folgt, wie auf der Grundlage des swapvaluation.cpp Beispiel:

Die Testmethode:

    [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

    }

Dies ist ein Teil der größeren ConstructSwapPoints Methode

        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           

Mit der ImpliedRate Methode wie folgt (i IP Einschränkungen einige Teile aus durch snipped habe);

    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
    }

Ich hoffe, meine Terminologie korrekt ist, wie der Finanzjargon mir noch neu ist.

Edit: Ich habe den C ++ Tag hinzugefügt, da ich Figur tatsächlich bis zu einem gewissen zugrunde liegenden C ++ Code verwendet ist. Hoffnung, dass diese Exposition einen Einblick in offenbaren kann, was hier passiert sein kann.

War es hilfreich?

Lösung

Basierend auf dem Feedback aus der quantlib Mailingliste

Der Jibar Index muss erstellt einen Verweis auf die risikofreie Kurve haben. Ohne Begriff Struktur kann die Jibar Vergangenheit Befestigungen zurück, aber nicht Vorhersage zukünftiges Leben. Die Jibar Konstruktor Bedürfnisse zu ersetzen

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

mit

VanillaSwap impliedSwap = new VanillaSwap(
    _VanillaSwap.Type.Payer, 
    10000000.0, 
    fixedSchedule, 
    0.1, 
    Actual365FixedDayCounter, 
    floatSchedule, 
    new Jibar(new Period(Frequency.Quarterly), DiscountingTermStructure), 
    0, 
    Actual365FixedDayCounter);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top