Configurar un SwapICPCLP de Mercado¶
Se muestra una forma posible de configurar una operación de Swap ICPCLP de mercado. Se definirán algunos parámetros por default y sólo será necesario especificar el nocional, el plazo, el valor de la tasa fija y si ésta se recibe o se paga para obtener la estructura completa.
Para ejecutar todos los ejemplos se debe importar la librería. Se sugiere utilizar siempre el alias qcf
.
import qcfinancial as qcf
import pandas as pd
import aux_functions as aux
Se verifica la versión y build de qcfinancial
.
qcf.id()
'version: 0.11.0, build: 2024-06-16 09:00'
Parámetros por Default de la Operación¶
Se comienza estableciendo una fecha de trade y dando de alta un dict
con los parámetros por default comunes y los específicos de ambas patas.
trade_date = qcf.QCDate(14, 6, 2024)
both_default_values = {
"bus_adj_rule": qcf.BusyAdjRules.MODFOLLOW,
"settlement_calendar": qcf.BusinessCalendar(trade_date, 20),
"settlement_lag": 1,
"amort_is_cashflow": False,
"notional_currency": qcf.QCCLP(),
"sett_lag_behaviour": qcf.SettLagBehaviour.DONT_MOVE
}
icpclp_default_values = {
"stub_period": qcf.StubPeriod.NO,
"fix_adj_rule": qcf.BusyAdjRules.MODFOLLOW,
"fixing_calendar": qcf.BusinessCalendar(trade_date, 20),
"dates_for_eq_rate": qcf.DatesForEquivalentRate.ACCRUAL,
"interest_rate": qcf.QCInterestRate(.0, qcf.QCAct360(), qcf.QCLinearWf()),
"eq_rate_decimal_places": 4,
}
fixed_rate_default_values = {
"settlement_stub_period": qcf.StubPeriod.NO,
"is_bond":False,
}
Pata Fija¶
Se da de alta los parámetros variables de la pata fija. Notar la utilización del parámetro auxiliar maturity
que permite calcular la fecha final.
str_maturity = "1Y"
maturity = qcf.Tenor(str_maturity)
meses = maturity.get_months() + 12 * maturity.get_years()
Se da de alta el objeto.
fixed_rate_value = .03
fixed_rate_leg_other_values = {
"settlement_periodicity": qcf.Tenor('2Y') if str_maturity in ['1M', '2M', '3M', '6M', '9M', '12M', '1Y', '18M'] else qcf.Tenor('6M'),
"rec_pay": qcf.RecPay.RECEIVE,
"initial_notional": 1_000_000_000.0,
"start_date": (start_date:=qcf.QCDate(18, 6, 2024)),
"end_date": start_date.add_months(meses),
"interest_rate": qcf.QCInterestRate(fixed_rate_value, qcf.QCAct360(), qcf.QCLinearWf()),
}
fixed_rate_leg = qcf.LegFactory.build_bullet_fixed_rate_leg(
**(both_default_values | fixed_rate_default_values | fixed_rate_leg_other_values)
)
Se visualiza el resultado.
aux.leg_as_dataframe(fixed_rate_leg).style.format(aux.format_dict)
fecha_inicial | fecha_final | fecha_pago | nominal | amortizacion | interes | amort_es_flujo | flujo | moneda | valor_tasa | tipo_tasa | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2024-06-18 | 2025-06-18 | 2025-06-19 | 1,000,000,000.00 | 1,000,000,000.00 | 30,416,666.67 | False | 30,416,666.67 | CLP | 3.0000% | LinAct360 |
Pata OvernightIndex¶
Se da de alta los parámetros variables de la pata OvernightIndex. Notar que se reutilizan algunos de los parámetros de la pata fija.
rp = qcf.RecPay.RECEIVE if fixed_rate_leg_other_values['rec_pay'] == qcf.RecPay.PAY else qcf.RecPay.RECEIVE
icpclp_leg_other_values = {
"rec_pay": rp,
"initial_notional": fixed_rate_leg_other_values["initial_notional"],
"start_date": fixed_rate_leg_other_values["start_date"],
"end_date": fixed_rate_leg_other_values["end_date"],
"settlement_periodicity": fixed_rate_leg_other_values["settlement_periodicity"],
"interest_rate": qcf.QCInterestRate(0.0, qcf.QCAct360(), qcf.QCLinearWf()),
"index_name": "ICPCLP",
"spread": 0.0,
"gearing": 1.0,
}
Finalmente, se da de alta el objeto.
on_index_leg = qcf.LegFactory.build_bullet_overnight_index_leg(
**(both_default_values | icpclp_default_values | icpclp_leg_other_values)
)
Se visualiza.
aux.leg_as_dataframe(on_index_leg).style.format(aux.format_dict)
fecha_inicial_devengo | fecha_final_devengo | fecha_inicial_indice | fecha_final_indice | fecha_pago | nocional | amortizacion | amort_es_flujo | moneda_nocional | nombre_indice | valor_indice_inicial | valor_indice_final | valor_tasa_equivalente | tipo_tasa | interes | flujo | spread | gearing | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2024-06-18 | 2025-06-18 | 2024-06-18 | 2025-06-18 | 2025-06-19 | 1,000,000,000.00 | 1,000,000,000.00 | False | CLP | ICPCLP | 1.000000 | 1.000000 | 0.0000% | LinAct360 | 0.00 | 0.00 | 0.0000% | 1.00 |