klhztrader/KLHZ.Trader.Core/Exchange/Utils/ExchangeScheduler.cs

49 lines
1.7 KiB
C#

using KLHZ.Trader.Core.Exchange.Models;
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;
}
}
}