using KLHZ.Trader.Core.Exchange.Models.Trading; namespace KLHZ.Trader.Core.Exchange.Utils { internal static class ExchangeScheduler { private readonly static TimeOnly _openTimeMain = new(6, 10); private readonly static TimeOnly _closeTimeMain = new(20, 45); private readonly static TimeOnly _openTimeHoliday = new(7, 10); private readonly static TimeOnly _closeTimeHoliday = new(17, 45); private readonly static TimeOnly _firstClearingStart = new(10, 55); private readonly static TimeOnly _firstClearingEnd = new(11, 10); private readonly static TimeOnly _mainClearingStart = new(15, 50); private readonly static TimeOnly _mainClearingEnd = new(16, 5); internal static ExchangeState GetCurrentState(DateTime? currentDt = null) { var dt = currentDt ?? DateTime.UtcNow; var day = dt.DayOfWeek; var time = TimeOnly.FromDateTime(dt); if (day == DayOfWeek.Sunday || day == DayOfWeek.Saturday) { if (time > _openTimeHoliday && time < _closeTimeHoliday) { return ExchangeState.Open; } } else { if (time > _openTimeMain && time < _closeTimeMain) { if (time > _firstClearingStart && time < _firstClearingEnd || time > _mainClearingStart && time < _mainClearingEnd) { return ExchangeState.ClearingTime; } return ExchangeState.Open; } } return ExchangeState.Close; } } }