Changed DateOffset to be an integer instead of enum. Usages and examples also changed. Also renamed to fixingPeriodOffset

Renamed fixingPeriod -> fixingPeriodOffset in the .json files
This commit is contained in:
Richard Green
2016-06-15 11:42:21 +01:00
parent 3e82ee45f2
commit 6b80530ac6
5 changed files with 15 additions and 27 deletions

View File

@ -372,7 +372,7 @@ class InterestRateSwap() : Contract {
var rollConvention: DateRollConvention, var rollConvention: DateRollConvention,
var fixingRollConvention: DateRollConvention, var fixingRollConvention: DateRollConvention,
var resetDayInMonth: Int, var resetDayInMonth: Int,
var fixingPeriod: DateOffset, var fixingPeriodOffset: Int,
var resetRule: PaymentRule, var resetRule: PaymentRule,
var fixingsPerPayment: Frequency, var fixingsPerPayment: Frequency,
var fixingCalendar: BusinessCalendar, var fixingCalendar: BusinessCalendar,
@ -383,7 +383,7 @@ class InterestRateSwap() : Contract {
dayCountBasisDay, dayCountBasisYear, dayInMonth, paymentRule, paymentDelay, paymentCalendar, interestPeriodAdjustment) { dayCountBasisDay, dayCountBasisYear, dayInMonth, paymentRule, paymentDelay, paymentCalendar, interestPeriodAdjustment) {
override fun toString(): String = "FloatingLeg(Payer=$floatingRatePayer," + super.toString() + override fun toString(): String = "FloatingLeg(Payer=$floatingRatePayer," + super.toString() +
"rollConvention=$rollConvention,FixingRollConvention=$fixingRollConvention,ResetDayInMonth=$resetDayInMonth" + "rollConvention=$rollConvention,FixingRollConvention=$fixingRollConvention,ResetDayInMonth=$resetDayInMonth" +
"FixingPeriond=$fixingPeriod,ResetRule=$resetRule,FixingsPerPayment=$fixingsPerPayment,FixingCalendar=$fixingCalendar," + "FixingPeriondOffset=$fixingPeriodOffset,ResetRule=$resetRule,FixingsPerPayment=$fixingsPerPayment,FixingCalendar=$fixingCalendar," +
"Index=$index,IndexSource=$indexSource,IndexTenor=$indexTenor" "Index=$index,IndexSource=$indexSource,IndexTenor=$indexTenor"
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
@ -397,7 +397,7 @@ class InterestRateSwap() : Contract {
if (rollConvention != other.rollConvention) return false if (rollConvention != other.rollConvention) return false
if (fixingRollConvention != other.fixingRollConvention) return false if (fixingRollConvention != other.fixingRollConvention) return false
if (resetDayInMonth != other.resetDayInMonth) return false if (resetDayInMonth != other.resetDayInMonth) return false
if (fixingPeriod != other.fixingPeriod) return false if (fixingPeriodOffset != other.fixingPeriodOffset) return false
if (resetRule != other.resetRule) return false if (resetRule != other.resetRule) return false
if (fixingsPerPayment != other.fixingsPerPayment) return false if (fixingsPerPayment != other.fixingsPerPayment) return false
if (fixingCalendar != other.fixingCalendar) return false if (fixingCalendar != other.fixingCalendar) return false
@ -409,7 +409,7 @@ class InterestRateSwap() : Contract {
} }
override fun hashCode() = super.hashCode() + 31 * Objects.hash(floatingRatePayer, rollConvention, override fun hashCode() = super.hashCode() + 31 * Objects.hash(floatingRatePayer, rollConvention,
fixingRollConvention, resetDayInMonth, fixingPeriod, resetRule, fixingsPerPayment, fixingCalendar, fixingRollConvention, resetDayInMonth, fixingPeriodOffset, resetRule, fixingsPerPayment, fixingCalendar,
index, indexSource, indexTenor) index, indexSource, indexTenor)
@ -430,7 +430,7 @@ class InterestRateSwap() : Contract {
rollConvention: DateRollConvention = this.rollConvention, rollConvention: DateRollConvention = this.rollConvention,
fixingRollConvention: DateRollConvention = this.fixingRollConvention, fixingRollConvention: DateRollConvention = this.fixingRollConvention,
resetDayInMonth: Int = this.resetDayInMonth, resetDayInMonth: Int = this.resetDayInMonth,
fixingPeriod: DateOffset = this.fixingPeriod, fixingPeriod: Int = this.fixingPeriodOffset,
resetRule: PaymentRule = this.resetRule, resetRule: PaymentRule = this.resetRule,
fixingsPerPayment: Frequency = this.fixingsPerPayment, fixingsPerPayment: Frequency = this.fixingsPerPayment,
fixingCalendar: BusinessCalendar = this.fixingCalendar, fixingCalendar: BusinessCalendar = this.fixingCalendar,
@ -515,7 +515,7 @@ class InterestRateSwap() : Contract {
"The termination dates are aligned" by (irs.floatingLeg.terminationDate == irs.fixedLeg.terminationDate) "The termination dates are aligned" by (irs.floatingLeg.terminationDate == irs.fixedLeg.terminationDate)
"The rates are valid" by checkRates(arrayOf(irs.fixedLeg, irs.floatingLeg)) "The rates are valid" by checkRates(arrayOf(irs.fixedLeg, irs.floatingLeg))
"The schedules are valid" by checkSchedules(arrayOf(irs.fixedLeg, irs.floatingLeg)) "The schedules are valid" by checkSchedules(arrayOf(irs.fixedLeg, irs.floatingLeg))
"The fixing period date offset cannot be negative" by (irs.floatingLeg.fixingPeriodOffset >= 0)
// TODO: further tests // TODO: further tests
} }
@ -705,7 +705,7 @@ class InterestRateSwap() : Contract {
periodEndDate, periodEndDate,
floatingLeg.dayCountBasisDay, floatingLeg.dayCountBasisDay,
floatingLeg.dayCountBasisYear, floatingLeg.dayCountBasisYear,
calcFixingDate(periodStartDate, floatingLeg.fixingPeriod, floatingLeg.fixingCalendar), calcFixingDate(periodStartDate, floatingLeg.fixingPeriodOffset, floatingLeg.fixingCalendar),
floatingLeg.notional, floatingLeg.notional,
ReferenceRate(floatingLeg.indexSource, floatingLeg.indexTenor, floatingLeg.index) ReferenceRate(floatingLeg.indexSource, floatingLeg.indexTenor, floatingLeg.index)
) )
@ -721,11 +721,10 @@ class InterestRateSwap() : Contract {
return TransactionType.General.Builder(notary = notary).withItems(state, Command(Commands.Agree(), listOf(state.floatingLeg.floatingRatePayer.owningKey, state.fixedLeg.fixedRatePayer.owningKey))) return TransactionType.General.Builder(notary = notary).withItems(state, Command(Commands.Agree(), listOf(state.floatingLeg.floatingRatePayer.owningKey, state.fixedLeg.fixedRatePayer.owningKey)))
} }
private fun calcFixingDate(date: LocalDate, fixingPeriod: DateOffset, calendar: BusinessCalendar): LocalDate { private fun calcFixingDate(date: LocalDate, fixingPeriodOffset: Int, calendar: BusinessCalendar): LocalDate {
return when (fixingPeriod) { return when (fixingPeriodOffset) {
DateOffset.ZERO -> date 0 -> date
DateOffset.TWODAYS -> calendar.moveBusinessDays(date, DateRollDirection.BACKWARD, 2) else -> calendar.moveBusinessDays(date, DateRollDirection.BACKWARD, fixingPeriodOffset)
else -> TODO("Improved fixing date calculation logic")
} }
} }

View File

@ -50,7 +50,7 @@ fun createDummyIRS(irsSelect: Int): InterestRateSwap.State {
paymentDelay = 3, paymentDelay = 3,
paymentCalendar = BusinessCalendar.getInstance("London", "NewYork"), paymentCalendar = BusinessCalendar.getInstance("London", "NewYork"),
interestPeriodAdjustment = AccrualAdjustment.Adjusted, interestPeriodAdjustment = AccrualAdjustment.Adjusted,
fixingPeriod = DateOffset.TWODAYS, fixingPeriodOffset = 2,
resetRule = PaymentRule.InAdvance, resetRule = PaymentRule.InAdvance,
fixingsPerPayment = Frequency.Quarterly, fixingsPerPayment = Frequency.Quarterly,
fixingCalendar = BusinessCalendar.getInstance("London"), fixingCalendar = BusinessCalendar.getInstance("London"),
@ -140,7 +140,7 @@ fun createDummyIRS(irsSelect: Int): InterestRateSwap.State {
paymentDelay = 0, paymentDelay = 0,
paymentCalendar = BusinessCalendar.getInstance(), paymentCalendar = BusinessCalendar.getInstance(),
interestPeriodAdjustment = AccrualAdjustment.Adjusted, interestPeriodAdjustment = AccrualAdjustment.Adjusted,
fixingPeriod = DateOffset.TWODAYS, fixingPeriodOffset = 2,
resetRule = PaymentRule.InAdvance, resetRule = PaymentRule.InAdvance,
fixingsPerPayment = Frequency.Quarterly, fixingsPerPayment = Frequency.Quarterly,
fixingCalendar = BusinessCalendar.getInstance(), fixingCalendar = BusinessCalendar.getInstance(),

View File

@ -233,17 +233,6 @@ enum class PaymentRule {
InAdvance, InArrears, InAdvance, InArrears,
} }
/**
* Date offset that the fixing is done prior to the accrual start date.
* Currently not used in the calculation.
*/
enum class DateOffset {
// TODO: Definitely shouldn't be an enum, but let's leave it for now at T-2 is a convention.
ZERO,
TWODAYS,
}
/** /**
* Frequency at which an event occurs - the enumerator also casts to an integer specifying the number of times per year * Frequency at which an event occurs - the enumerator also casts to an integer specifying the number of times per year
* that would divide into (eg annually = 1, semiannual = 2, monthly = 12 etc). * that would divide into (eg annually = 1, semiannual = 2, monthly = 12 etc).

View File

@ -45,7 +45,7 @@
"paymentDelay": 0, "paymentDelay": 0,
"paymentCalendar": [ "London" ], "paymentCalendar": [ "London" ],
"interestPeriodAdjustment": "Adjusted", "interestPeriodAdjustment": "Adjusted",
"fixingPeriod": "TWODAYS", "fixingPeriodOffset": 2,
"resetRule": "InAdvance", "resetRule": "InAdvance",
"fixingsPerPayment": "Quarterly", "fixingsPerPayment": "Quarterly",
"fixingCalendar": [ "NewYork" ], "fixingCalendar": [ "NewYork" ],

View File

@ -45,7 +45,7 @@
"paymentDelay": 0, "paymentDelay": 0,
"paymentCalendar": [ "London" ], "paymentCalendar": [ "London" ],
"interestPeriodAdjustment": "Adjusted", "interestPeriodAdjustment": "Adjusted",
"fixingPeriod": "TWODAYS", "fixingPeriodOffset": 2,
"resetRule": "InAdvance", "resetRule": "InAdvance",
"fixingsPerPayment": "Quarterly", "fixingsPerPayment": "Quarterly",
"fixingCalendar": [ "NewYork" ], "fixingCalendar": [ "NewYork" ],