← 返回

Exchange.WorkingTime 2012

var specialWorkingDays = new[] 
{ 
  new DateTime(2012, 3, 11),
  new DateTime(2012, 4, 28),
  new DateTime(2012, 6, 9),
  new DateTime(2012, 12, 29),
};

var specialHolidays = new[]
{
  new DateTime(2012, 1, 2),
  new DateTime(2012, 3, 8),
  new DateTime(2012, 3, 9),
  new DateTime(2012, 4, 30),
  new DateTime(2012, 5, 1),
  new DateTime(2012, 5, 9),
  new DateTime(2012, 6, 11),
  new DateTime(2012, 6, 12),
  new DateTime(2012, 11, 5),
  new DateTime(2012, 12, 31),
};

Exchange.Rts.WorkingTime.SpecialWorkingDays = specialWorkingDays;
Exchange.Rts.WorkingTime.SpecialHolidays = specialHolidays;

本主题对您有帮助吗?

分享主题

评论 (17)

登录创建账户, 登录或注册以发表评论

dvoris
dvoris 作者

Вероятно, баг (?):

После заведения нужных дат в exchange TraderHelper.IsTradeDate(workingTime, datetime, false) выдаёт true на даты 2012-12-31, 2012-4-30 и т.д. (понедельники, которые должны быть выходными)

P.S. удостоверился, что exchange.WorkingTime.SpecialWorkingDays и exchange.WorkingTime.SpecialHolidays заполнены как надо.

Alexander
Alexander

dvoris: TraderHelper.IsTradeTrade(exchange, datetime, false)

Такого метода в S# (4.0.18) нет. Какой версией пользуетесь?

dvoris
dvoris 作者

Извиняюсь, речь, конечно же, про TraderHelper.IsTradeDate. Пока написал свою проверку, не проблема.
Есть проблема со справочниками 😠

Alexander
Alexander

dvoris: Извиняюсь, речь, конечно же, про TraderHelper.IsTradeDate. Пока написал свою проверку, не проблема. Есть проблема со справочниками 😠

Опять мимо. Нет такого метода. Может с третьей попытки получится определить метод, который вы используете? :)

Могу помочь. Есть метод

public static bool IsTradeDate(this WorkingTime workingTime, DateTime date, bool checkHolidays = false)

а есть метод

public static bool IsTradeTime(this Exchange exchange, DateTime dateTime)

С высокой долей вероятности вы используете один из них.

dvoris
dvoris 作者

я и написал TraderHelper.IsTradeDate 😑 Аргументы в этом случае, понятно, workingtime, datetime, просто сначала писал про проблему с IsTradeTime, которую уже решил.

Alexander
Alexander

dvoris: я и написал TraderHelper.IsTradeDate 😑

dvoris: TraderHelper.IsTradeDate(exchange, datetime, false)

В IsTradeDate exchange передавать нельзя. У вас компилироваться не будет, нет метода с этой сигнатурой.

Если на самом деле используется этот метод, просто передаётся Exchange.Rts.WorkingTime - выведите перед методом

Exchange.Rts.WorkingTime.SpecialHolidays.Contains(date);
dvoris
dvoris 作者

В общем, ещё раз.. просьба проверить корректность работы TraderHelper.IsTradeDate

Заодно предлагаю ввести метод проверяющий сразу дату и время, чтоб два раза не бегать :)

        public bool IsTradeDateTime(WorkingTime workingTime, DateTime datetime)
        {
            bool tradedate = true;

            DateTime date = new DateTime(datetime.Year,datetime.Month,datetime.Day);
            
            if (workingTime.SpecialWorkingDays.IndexOf(date) != -1)
            {
                tradedate = true;
            }
            else
            {
                if (workingTime.SpecialHolidays.IndexOf(date) != -1)
                {
                    tradedate = false;
                }
                else
                {
                    if ((date.DayOfWeek == DayOfWeek.Saturday) || (date.DayOfWeek == DayOfWeek.Sunday)) tradedate = false;
                }
            }

            if (!tradedate) return false;

            return TraderHelper.IsTradeTime(workingTime, datetime);
        }
Alexander
Alexander

Давайте с начала.

Какой метод вы используете и он у вас работает не так как вы ожидаете? А то 2 раза вы говорили о тех методах, которых в S# просто нет.

IsTradeDate? Или IsTradeTime как в последнем вашем куске кода?

Напишите полностью метод, указывая что вы туда передаёте (значения, не переменные).

И, ещё раз, если используется

public static bool IsTradeDate(this WorkingTime workingTime, DateTime date, bool checkHolidays = false)

выведите

workingTime.SpecialHolidays.Contains(date);
Alexander
Alexander

Ваш IsTradeDateTime == IsTradeDate && IsTradeTime

dvoris
dvoris 作者

Alexander Mukhanchikov: Ваш IsTradeDateTime == IsTradeDate && IsTradeTime Я бы так и сделал, если бы не

"TraderHelper.IsTradeDate(exchange.workingTime, datetime, false) выдаёт true на даты 2012-12-31, 2012-4-30 и т.д. (понедельники, которые должны быть выходными)" т.е. игнорит SpecialHolidays (?)

Если вызывать TraderHelper.IsTradeDate(exchange.workingTime, datetime, true) то выдаёт false на выходные, которые должны быть рабочими - игнорит SpecialWorkingDays (?)

Alexander
Alexander

Так, разобрались с 5го раза какой метод используете. Уже прогресс.

Давайте попробуем хотя бы с 3го раза получить ответ на заданный вопрос

выведите workingTime.SpecialHolidays.Contains(date)

dvoris
dvoris 作者

Я исправился с именем метода во втором посте. Насчёт workingTime.SpecialHolidays.Contains(date):

P.S. удостоверился, что exchange.WorkingTime.SpecialWorkingDays и exchange.WorkingTime.SpecialHolidays заполнены как надо. Давайте попробуем быть все внимательнее.

Разобрался. Предложенный вами вариант будет работать, если обрезать время - IsTradeDate(.., t) && IsTradeDate(.., new DateTime(t.Year,t.Month,t.Day)) Видимо, IsTradeDate просто проверяет SpecialHolidays.Contains(t) и SpecialWorkingDays.Contains(t). Хотелось бы просто IsTradeDateTime(Trader.MarketTime), что и реализовал.

P.S. Плохо не видеть исходников :(

Alexander
Alexander

Есть метод IsTradeTime, который и проверяет всё что вам нужно:

  1. IsTradeDate
  2. Time на торгуемое время

Давайте попробуем быть все внимательнее. Действительно считаете, что после того, как задаю вопросы, мне стоит постоянно отслеживать все ваши предыдущие сообщения, на случай а не исправили ли вы там чего?

dvoris
dvoris 作者

🤨 #4 >>Извиняюсь, речь, конечно же, про TraderHelper.IsTradeDate

Как можно было узнать, что IsTradeTime проверяет и дату? В доке об этом не сказано :)

Проверить, является ли текущее время торгуемым (началась ли сессия, не закончилась ли, нет ти клиринга).

P.S. Плохо не видеть исходников.

esper
esper

dvoris: P.S. Плохо не видеть исходников. Когда нет исходников - можно воспользоваться рефлектором. Не думаю, что обфускация данных методов будет большой помехой.

Alexander
Alexander

Если день не торгуемый (выходной) - то очевидно что переданное время не торгуемое.

Если не очевидно по описанию метода - проверяется за пару минут тестом.

Кот Матроскин
Кот Матроскин

dvoris: ... А эти дни разве самому заводить нужно, или они уже есть в библиотеке?