Ejemplo de contrato de derivado financiero: Swap de tipos de interés:
Si este derivado financiero esta colateralizado con cash EUR tendriamos aplicar curva descuento EONIA. (market practice IFRS)
Swap de tipos de interés
maturity: 20 nov 2022
nominal: 1M
fecha inicio: 20 nov 2012
pata variable paga: Euribor 3meses + 2% cada 3 meses
pata fija paga:4% anualmente
calendario: TARGET
calculo días pata fija: 30/360
calculo días pata variable: Actual/360
Datos de mercado :
ultima fijación de tipo Euribor 3m : 1%
para descontar flujos del swap usaremos la curva EONIA (podemos obtener desde reuters o bloomberg):
(datos de mercado ficticios)
31 Dec 2013 0.99
31 Dec 2024 0.80
para calcular forwards curva de tipos de proyección Euribor 3m:
31 dec 2013 0.999
31 dec 2024 0.89
ejemplo de código QuantLib swap en C++ para valoración del swap a 31/dec/2012
#includeusing namespace std; using namespace QuantLib; using namespace boost; int main() { vector dates; vector discountFactor; Date valuationDate(31,December,2012); Settings::instance().evaluationDate()=valuationDate; dates.push_back(valuationDate); discountFactor.push_back(1.0); dates.push_back(Date(31,December, 2013)); discountFactor.push_back(0.99); dates.push_back(Date(31,December, 2024)); discountFactor.push_back(0.80); shared_ptr forwardCurve(new InterpolatedDiscountCurve (dates,discountFactor,Actual360())); discountFactor.pop_back();discountFactor.pop_back(); discountFactor.push_back(0.999); discountFactor.push_back(0.89); shared_ptr oisCurve(new InterpolatedDiscountCurve (dates,discountFactor,Actual360())); Handle discountingTermStructure(oisCurve); Handle forwardingTermStructure(forwardCurve); Real nominal = 1000000.0; Date previousResetDate(20,November,2012); Date maturity(20,November,2022); double spread = 0.02; double fixedRate=0.04; shared_ptr euribor(new Euribor(3*Months,forwardingTermStructure)); euribor->addFixing(euribor->fixingDate(previousResetDate),0.01,true); VanillaSwap::Type swapType = VanillaSwap::Payer; Schedule fixedSchedule(previousResetDate, maturity,1*Years, TARGET(), ModifiedFollowing,ModifiedFollowing, DateGeneration::Forward, false); Schedule floatSchedule(previousResetDate,maturity,3*Months, TARGET(),ModifiedFollowing ,ModifiedFollowing, DateGeneration::Forward, false); VanillaSwap swap(VanillaSwap::Payer, nominal,fixedSchedule, fixedRate, Thirty360(), floatSchedule, euribor, spread,Actual360()); shared_ptr swapEngine(new DiscountingSwapEngine(discountingTermStructure)); swap.setPricingEngine(swapEngine); double res=swap.NPV(); }