3 votos

Intercambios de base en Quantlib/Python

Soy consciente de que puedo crear un IRS en Quantlib/Python usando la siguiente función:

def makeSwap(start, maturity, nominal, fixedRate, index, typ=ql.VanillaSwap.Payer):
    end = ql.TARGET().advance(start, maturity)
    fixedLegTenor = ql.Period('1y')
    fixedLegBDC = ql.ModifiedFollowing
    fixedLegDC = ql.Thirty360(ql.Thirty360.BondBasis)
    spread = 0.0
    fixedSchedule = ql.Schedule(start,
                            end, 
                            fixedLegTenor, 
                            index.fixingCalendar(), 
                            fixedLegBDC,
                            fixedLegBDC, 
                            ql.DateGeneration.Backward,
                            False)
    floatSchedule = ql.Schedule(start,
                            end,
                            index.tenor(),
                            index.fixingCalendar(),
                            index.businessDayConvention(),
                            index.businessDayConvention(),
                            ql.DateGeneration.Backward,
                            False)
    swap = ql.VanillaSwap(typ, 
                      nominal,
                      fixedSchedule,
                      fixedRate,
                      fixedLegDC,
                      floatSchedule,
                      index,
                      spread,
                      index.dayCounter())
    return swap, [index.fixingDate(x) for x in floatSchedule][:-1]

y luego llamar por ejemplo:

makeSwap(t + ql.Period('2d'),
                  ql.Period('5Y'),
                  1e6,
                  0.03,
                  ql.euribor6m)

pero ¿cómo puedo crear un intercambio de bases en su lugar?

2voto

tralston Puntos 76

Si se trata de un swap de base de una sola moneda, entonces FloatFloatSwap es la clase que está buscando.

Aquí está el archivo hpp de la clase: https://github.com/lballabio/QuantLib/blob/master/ql/instruments/floatfloatswap.hpp

Y se incluye en el archivo de entrada de SWIG swap.i como puedes ver aquí:

https://github.com/lballabio/QuantLib-SWIG/blob/66ca96765688e9094dcfbbbd032ffd0596e7cadf/SWIG/swap.i#L295-L316

%shared_ptr(FloatFloatSwap)
class FloatFloatSwap : public Swap {
  public:
    FloatFloatSwap(VanillaSwap::Type type, const std::vector<Real> &nominal1,
        const std::vector<Real> &nominal2, const Schedule &schedule1,
        const boost::shared_ptr<InterestRateIndex> &index1,
        const DayCounter &dayCount1, const Schedule &schedule2,
        const boost::shared_ptr<InterestRateIndex> &index2,
        const DayCounter &dayCount2,
        const bool intermediateCapitalExchange = false,
        const bool finalCapitalExchange = false,
        const std::vector<Real> &gearing1 = std::vector<Real>(),
        const std::vector<Real> &spread1 = std::vector<Real>(),
        const std::vector<Real> &cappedRate1 = std::vector<Real>(),
        const std::vector<Real> &flooredRate1 = std::vector<Real>(),
        const std::vector<Real> &gearing2 = std::vector<Real>(),
        const std::vector<Real> &spread2 = std::vector<Real>(),
        const std::vector<Real> &cappedRate2 = std::vector<Real>(),
        const std::vector<Real> &flooredRate2 = std::vector<Real>(),
        BusinessDayConvention paymentConvention1 = Following,
        BusinessDayConvention paymentConvention2 = Following);
};

0 votos

Muchas gracias, lo intentaré con esta clase. ¿Hay una manera de incluir también el caso de intercambio de divisas?

0 votos

AFAIK no, por supuesto que podrías tener dos swaps con dos monedas diferentes y con tasa fija cero, y manejar las conversiones de FX tú mismo (calcular el npv y luego convertirlo usando el Fx spot). Pero no conozco ninguna clase de swap de base Xccy en QL.

0 votos

Ya veo, así que si tengo EURUSD y colateralizado en USD, crearé una cartera de un EUR IRS y un USD IRS. Entonces el IRS en USD se valora como siempre, descontando con la curva OIS en USD. Para el EUR IRS tendré que utilizar la curva de proyección habitual del EUR pero descontando con la curva EUR OIS implícita en el USD? ¿No hay que hacer ningún otro truco?

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X