49 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|