2 votos

Pregunta sobre el ajuste de la curva del Euribor utilizando diferentes comillas base con Quantlib Python

Estoy tratando de ajustar una curva EUR basada en los siguientes instrumentos

  1. Citas de EONIA
  2. Comillas básicas de 1m vs 6m
  3. Comillas de 3 millones de euros (en firme)
  4. Comillas de 6 millones de euros (en firme)
  5. Comillas de 6m vs 12m

(1) , (3) & (4) son simplemente comillas y las encajo (usando un optimizador de python) modelándolas como :-

  1. EONIA se modela como un objeto Quantlib OvernightIndexedSwap
  2. Los Swaps de 3 y 6 metros se modelan como el objeto VanillaSwap

Tengo problemas para encajar las comillas de la base.

Comillas básicas de 1m vs 6m

Las citas son las siguientes:- [('1Y',12.3),('2Y',12.6),('3Y',13),('4Y',13.1),('5Y',13.1),('10Y',11.6),('20Y',6.5),('30Y',4.4)]

Comillas base de 6m vs 12m

Las citas son las siguientes:- [('1Y',7),('2Y',7.2),('3Y',7.4),('4Y',7.6),('5Y',7.7),('10Y',7.5),('20Y',6.3),('30Y',5.4)]

El código adjunto es el que utilizo para modelar estos basis swaps (básicamente los modelo como 2 VanillaSwaps - largo el Euribor a largo plazo y corto el Euribor a corto plazo)

Mi pregunta es con respecto a qué pierna utilizar un Swap1 vs Swap2.

Según tengo entendido, el diferencial se añade a la pata del libor del tenor corto.

Así, por ejemplo, para modelar 1m vs 6m, creo el objeto VanillaSwap1 (para el tramo de 1m de Euribor) y añado el spread al tramo flotante. A continuación, creo el objeto VanillaSwap2 para el tramo largo (es decir, el Euribor de 6 metros)

Del mismo modo, para modelar la base de 6m vs 12m,:- Creo el objeto VanillSwap1 (para el tramo de 6m Euribor) y añado el spread al tramo flotante. A continuación, creo el objeto VanillaSwap2 para el tramo largo (es decir, el Euribor 12m).

Sin embargo, estoy obteniendo una tasa cero negativa ajustada (después del proceso de optimización) para los 6m frente a los 12m. NOTA:Obtengo la tasa correcta del diferencial cero que coincide con el mercado pero el signo es -ve

Para la base de 1m frente a 6m, he ajustado correctamente los diferenciales de tipo cero al mercado

¿Estoy haciendo algo mal?

self.z_leg1_forcurve = curves[self.leg1_forcurve]
self.z_leg2_forcurve = curves[self.leg2_forcurve]
self.z_discurve_1 = curves[self.leg1_discurve]
self.z_discurve_2 = curves[self.leg2_discurve]

# set the base curve IborIndex
self.IBOR_Index1 = ql.IborIndex(
    'IborIndex1',
    ql.Period(self.leg1_frequency),
    self.settle_days,
    self.currency,
    self.calendar,
    ql.ModifiedFollowing,
    False,
    self.day_count,
    self.z_leg1_forcurve.QLZeroCurve # Zero curve for the forecasting curve
)

# set the spread curve IborIndex
self.IBOR_Index2 = ql.IborIndex(
    'IborIndex2',
    ql.Period(self.leg2_frequency),
    self.settle_days,
    self.currency,
    self.calendar,
    ql.ModifiedFollowing,
    False,
    self.day_count,
    self.z_leg2_forcurve.QLZeroCurve # Zero curve for the forecasting curve
)

# create a payment schedule for leg_1
schedule1 = ql.Schedule(
    self.start_date,
    self.end_date,
    ql.Period(self.leg1_frequency),
    self.calendar,
    ql.ModifiedFollowing,
    ql.ModifiedFollowing,
    ql.DateGeneration.Backward,
    False
)

# create a payment schedule for leg_2
schedule2 = ql.Schedule(
    self.start_date,
    self.end_date,
    ql.Period(self.leg2_frequency),
    self.calendar,
    ql.ModifiedFollowing,
    ql.ModifiedFollowing,
    ql.DateGeneration.Backward,
    False
)

# Swap1 is the short tenor (to which we add the spread quote)
self.QL_Swap1 = ql.VanillaSwap(
    ql.VanillaSwap.Payer,
    self.notional,      # nominal
    schedule1,          # fixed leg schedule
    0.0,                # fixed rate
    self.day_count,     # fixed leg day_count
    schedule1,          # float leg schedule
    self.IBOR_Index1,   # libor index
    self.quote,         # spread (added to leg1 ALWAYS)
    self.day_count      # float leg day_count
)

# Swap2 is the long tenor
self.QL_Swap2 = ql.VanillaSwap(
    ql.VanillaSwap.Payer,
    self.notional,      # nominal
    schedule2,          # fixed schedule
    0.0,                # fixedRate
    self.day_count,     # fixed leg DayCount
    schedule2,          # float schedule
    self.IBOR_Index2,   # liborIndex
    0.0,                # spread
    self.day_count      # float leg day_count
)

# discount the base curve with it's own discounting_curve
engine = ql.DiscountingSwapEngine(self.z_discurve_1.QLZeroCurve)
self.QL_Swap1.setPricingEngine(engine)

# discount the spread curve with it's own discounting_curve
engine2 = ql.DiscountingSwapEngine(self.z_discurve_2.QLZeroCurve)
self.QL_Swap2.setPricingEngine(engine2)
```

1voto

Chris Mc Puntos 31

Es probable que tu reclutador esté tratando de evitar tener que pagar la parte del empleador de los impuestos sobre el empleo, e incluso puede estar tratando de evitar tener que presentar un 1099 para ti tratando tu relación como un proveedor/prestador de servicios al que está comprando servicios, lo que haría que tu pago fuera sólo un gasto de negocios. Definitivamente está en su mejor interés para que lo hagas de esta manera. Ya sea en su El mejor interés depende de ti. Debe consultar a un profesional legal/fiscal autorizado para que le ayude a determinar si este es un buen acuerdo para usted. (La mayoría de las veces, cuando alguien empieza a jugar a la evasión fiscal, acaba picando por ella).

La siguiente gran pregunta: Si ya sabes que este tipo es una serpiente, ¿por qué sigues trabajando con él? Si no confías en él, ¿por qué aceptas sus consejos legales y fiscales? Puede que te consiga un trabajo bien pagado. Pero también podría causarle años de dolores de cabeza si su asesoramiento fiscal resulta ser erróneo.

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