Default day count from index #1553
Conversation
Few minor points on the review. Can we add a test for the defaulting logic? |
FloatingRateIndex index = parseIndex(row, legPrefix); | ||
if (index != null) { | ||
// floating leg | ||
indices.add(index); |
brianweller89
Sep 6, 2017
Contributor
indices.add(index) can be outside the if loop rather than here; will still add null for the fixed rate
indices.add(index) can be outside the if loop rather than here; will still add null for the fixed rate
// fixed leg | ||
indices.add(null); | ||
if (!findValue(row, legPrefix, DAY_COUNT_FIELD).isPresent()) { | ||
missingDayCount = true; |
brianweller89
Sep 6, 2017
Contributor
Do we even need the missingDayCount check? Feels like this is an unnecessary layer of complexity in what is already quite complex code.
What's the harm of passing a non-null default into the parseLegs method? Will just be ignored if the fixed leg has defined value.
Do we even need the missingDayCount check? Feels like this is an unnecessary layer of complexity in what is already quite complex code.
What's the harm of passing a non-null default into the parseLegs method? Will just be ignored if the fixed leg has defined value.
jodastephen
Sep 11, 2017
Author
Member
Case is where there is a fixed leg and two floating legs with different day counts. Must only trigger the "check day unique" logic when day count is actually missing.
Case is where there is a fixed leg and two floating legs with different day counts. Must only trigger the "check day unique" logic when day count is actually missing.
throw new IllegalArgumentException( | ||
"Swap leg must define day count on fixed legs when more than 2 floating legs"); | ||
} | ||
defaultFixedLegDayCount = dayCounts.iterator().next(); |
brianweller89
Sep 6, 2017
Contributor
I like the readibility of Iterables.getOnlyElement() in these situations
I like the readibility of Iterables.getOnlyElement() in these situations
@@ -293,68 +377,49 @@ private static NotionalSchedule parseNotionalSchedule(CsvRow row, String leg) { | |||
private static RateCalculation parseRateCalculation( | |||
CsvRow row, | |||
String leg, | |||
FloatingRateIndex index, | |||
DayCount defaultFixedLegDayCount, | |||
BusinessDayAdjustment bda, | |||
Frequency accrualFrequency, |
brianweller89
Sep 6, 2017
Contributor
accrual frequency not used anymore
accrual frequency not used anymore
if (frn.getType() == FloatingRateType.IBOR) { | ||
// re-parse Ibor using tenor, which ensures tenor picked up from indexStr if present | ||
Frequency freq = Frequency.parse(getValue(row, leg, FREQUENCY_FIELD)); | ||
Tenor iborTenor = freq.isTerm() ? frn.getDefaultTenor() : Tenor.of(freq.getPeriod()); |
brianweller89
Sep 6, 2017
Contributor
Not immediately related to this PR but our getDefaultTenor() logic is not fully correct here.
Default tenor for most major currencies is 6M, with only USD being 3M
Not immediately related to this PR but our getDefaultTenor() logic is not fully correct here.
Default tenor for most major currencies is 6M, with only USD being 3M
jodastephen
Sep 11, 2017
Author
Member
* This is useful for providing a basic default where errors need to be avoided.
* The value returned is not intended to be based on market conventions."
* This is useful for providing a basic default where errors need to be avoided.
* The value returned is not intended to be based on market conventions."
Use additional `FloatingRateIndex` logic to default day count
Use additional
FloatingRateIndex
logic to default day count.Determines the index for each leg first, then calculates the default day count, then parses.