/*
Copyright (C) 2011 Tim Blackler
This source code is release under the BSD License.
This file is part of JQuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://jquantlib.org/
JQuantLib is free software: you can redistribute it and/or modify it
under the terms of the JQuantLib license. You should have received a
copy of the license along with this program; if not, please email
. The license is also available online at
.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
JQuantLib is based on QuantLib. http://quantlib.org/
When applicable, the original copyright notice follows this notice.
*/
package org.jquantlib.indexes;
import org.jquantlib.QL;
import org.jquantlib.currencies.Europe.EURCurrency;
import org.jquantlib.daycounters.Actual360;
import org.jquantlib.quotes.Handle;
import org.jquantlib.termstructures.YieldTermStructure;
import org.jquantlib.time.Calendar;
import org.jquantlib.time.Date;
import org.jquantlib.time.Period;
import org.jquantlib.time.TimeUnit;
import org.jquantlib.time.calendars.JointCalendar;
import org.jquantlib.time.calendars.JointCalendar.JointCalendarRule;
import org.jquantlib.time.calendars.Target;
import org.jquantlib.time.calendars.UnitedKingdom;
import org.jquantlib.time.calendars.UnitedKingdom.Market;
/**
* EurLibor index
*
* EurLibor rate fixed in London fixing by BBA.
*
* @note This is the London fixing by BBA . Use Euribor if you're interested in the rate fixed by the ECB.
*
* @author Tim Blackler
**/
public class EURLibor extends IborIndex {
private Calendar target;
/**
* JoinBusinessDays is the fixing calendar for all indexes but o/n
*
* @see http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=225&a=1412
*/
public EURLibor(final Period tenor) {
this(tenor, new Handle());
}
public EURLibor(final Period tenor, final Handle h) {
super("EURLibor",
tenor,
2, // settlement days
new EURCurrency(),
new JointCalendar(new UnitedKingdom(Market.Exchange),
new Target(),
JointCalendarRule.JoinBusinessDays),
eurliborConvention(tenor),
eurliborEOM(tenor),
new Actual360(),
h);
QL.require(tenor().units() != TimeUnit.Days , "for daily tenors dedicated DailyTenor constructor must be used");
this.target = new Target();
}
/**
* Date calculations
*
* @see http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=225&a=1412
*/
@Override
public Date valueDate (final Date fixingDate) {
// http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=225&a=1412 :
// In the case of EUR the Value Date shall be two TARGET
// business days after the Fixing Date.
QL.require(isValidFixingDate(fixingDate), "Fixing date " + fixingDate + " is not valid");
return this.target.advance(fixingDate, fixingDays, TimeUnit.Days);
}
@Override
public Date maturityDate (final Date valueDate) {
// http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=225&a=1412 :
// In the case of EUR only, maturity dates will be based on days in
// which the Target system is open.
return this.target.advance(valueDate, tenor(), businessDayConvention(), endOfMonth());
}
}
Ads help maintain this website.