Example #1
0
        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);
        }