mirror of
https://github.com/corda/corda.git
synced 2025-06-22 17:09:00 +00:00
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:
@ -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")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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(),
|
||||||
|
@ -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).
|
||||||
|
@ -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" ],
|
||||||
|
@ -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" ],
|
||||||
|
Reference in New Issue
Block a user