示例#1
0
        /// <summary>
        /// Returns the date of the session in progress at the given moment in time
        /// <paramref name="at"/>.
        /// </summary>
        public static DateStamp GetSessionDate(IInstrument instrument, TimeStamp at)
        {
            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.");
            }

            var atTimeOfDay        = at.ToTimeOfDay(instrument.SettlementTime.TimeZone);
            var nextSettlement     = at.GetNext(instrument.SettlementTime.TimeOfDay, instrument.SettlementTime.TimeZone);
            var nextSettlementDate = nextSettlement.GetDate(instrument.SettlementTime.TimeZone);

            if (atTimeOfDay <= instrument.SettlementTime.TimeOfDay)
            {
                return(instrument.ThisOrNextTradingDay(nextSettlementDate));
            }

            return(instrument.ThisOrNextTradingDay(nextSettlementDate.AddDays(1)));
        }