Exchange.WorkingTime 2012
Atom Ответить
12.02.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

Фотография
Дата: 12.02.2012
Ответить


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

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

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

Alexander

Фотография
Дата: 13.02.2012
Ответить


dvoris Перейти
TraderHelper.IsTradeTrade(exchange, datetime, false)


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

dvoris

Фотография
Дата: 13.02.2012
Ответить


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

Alexander

Фотография
Дата: 13.02.2012
Ответить


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


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

Могу помочь.
Есть метод
Код
public static bool IsTradeDate(this WorkingTime workingTime, DateTime date, bool checkHolidays = false)

а есть метод
Код
public static bool IsTradeTime(this Exchange exchange, DateTime dateTime)


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

dvoris

Фотография
Дата: 13.02.2012
Ответить


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

Alexander

Фотография
Дата: 13.02.2012
Ответить


dvoris Перейти
я и написал TraderHelper.IsTradeDate Bored


dvoris
TraderHelper.IsTradeDate(exchange, datetime, false)


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

Если на самом деле используется этот метод, просто передаётся Exchange.Rts.WorkingTime - выведите перед методом
Код
Exchange.Rts.WorkingTime.SpecialHolidays.Contains(date);
Спасибо:

dvoris

Фотография
Дата: 13.02.2012
Ответить


В общем, ещё раз.. просьба проверить корректность работы 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

Фотография
Дата: 13.02.2012
Ответить


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

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

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

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


И, ещё раз, если используется
Код
public static bool IsTradeDate(this WorkingTime workingTime, DateTime date, bool checkHolidays = false)

выведите
Код
workingTime.SpecialHolidays.Contains(date);
Спасибо:

Alexander

Фотография
Дата: 13.02.2012
Ответить


Ваш IsTradeDateTime == IsTradeDate && IsTradeTime
Спасибо:

dvoris

Фотография
Дата: 13.02.2012
Ответить


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

Фотография
Дата: 13.02.2012
Ответить


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

Давайте попробуем хотя бы с 3го раза получить ответ на заданный вопрос
Цитата:
выведите
workingTime.SpecialHolidays.Contains(date)
Спасибо:

dvoris

Фотография
Дата: 13.02.2012
Ответить


Я исправился с именем метода во втором посте.
Насчёт 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

Фотография
Дата: 13.02.2012
Ответить


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


Цитата:
Давайте попробуем быть все внимательнее.

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

dvoris

Фотография
Дата: 13.02.2012
Ответить


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

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

P.S. Плохо не видеть исходников.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 13.02.2012
Ответить


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

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

esper

Фотография
Программист
Дата: 13.02.2012
Ответить


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

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

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

Фотография
Дата: 12.05.2012
Ответить


dvoris Перейти
Код
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;

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy