public SettlementSession(IInstrument instrument, DateStamp sessionDate) { if (instrument is null) { throw new ArgumentNullException(nameof(instrument)); } if (instrument.SettlementTime.TimeOfDay.TotalHours <= 0) { throw new ArgumentException("Settlement time of day with zero or negative time is not supported."); } if (instrument.SettlementTime.TimeOfDay.TotalHours > 24) { throw new ArgumentException("Settlement time of day in early morning of following day is not yet supported."); } if (!instrument.IsTradingDay(sessionDate)) { throw new ArgumentException($"Unexpected sessionDate '{sessionDate}'. It should not be a valid trading day."); } Instrument = instrument; SessionDate = sessionDate; SessionEnd = new TimeStamp(SessionDate, instrument.SettlementTime.TimeOfDay, TimeZone); var sessionStartDate = Instrument.ThisOrPreviousTradingDay(SessionDate.AddDays(-1)); SessionStart = new TimeStamp(sessionStartDate, instrument.SettlementTime.TimeOfDay, TimeZone); }