Библиотеки: Control_Trade_Sessions - страница 2

 
Forester #:
Просто сравнение по времени идет.
Вместо  Можете любое задать, кстати.

Время сессий берется от брокера или можно установить вручную.

Я про внутренний код говорил, а не про вызов и входящий параметр.

datetime Sec = TimeSec(time); //current second in day
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))

Здесь Sec приведен в диапазон суток, а граница from-to нет. Например, если запрошено время 3 утра и сессия торгуется с 21 вечера по 8 утра, то должно возвращаться true, но условие не сработает и вернется false.

 
Stanislav Korotky #:

Я про внутренний код говорил, а не про вызов и входящий параметр.

Здесь Sec приведен в диапазон суток, а граница from-to нет. Например, если запрошено время 3 утра и сессия торгуется с 21 вечера по 8 утра, то должно возвращаться true, но условие не сработает и вернется false.

Такое можно задать двумя сессиями:
21-24 и 0-8

Вопрос теоретический или у ДЦ реально есть подобные from-to?

 
Forester #:

Такое можно задать двумя сессиями:
21-24 и 0-8

Вопрос теоретический или у ДЦ реально есть подобные from-to?

Что значит задать двумя сессиями? - они ведь возвращаются из настроек МТ5, а не нами задаются. А в МТ5 одна сессия = одна запись. У некоторых ДЦ (из-за географической удаленности от рынка) такое может быть. В этом случае SymbolInfoSessionTrade возвращает время to с учетом доп.суток (по крайней мере так раньше было - прямо сейчас не проверял), т.е. условие from < to всегда сохранялось.
 
Stanislav Korotky #:
Что значит задать двумя сессиями?

Есть возможность задать сессии самостоятельно для каждого дня в sunput-ах. По ним и будет работать.
Подключается
#define LoadSessionFromInputs // Чтение сессий из input-ов

Stanislav Korotky #:
В этом случае SymbolInfoSessionTrade возвращает время to с учетом доп.суток (по крайней мере так раньше было - прямо сейчас не проверял), т.е. условие from < to всегда сохранялось.

Т.е 20:00 - 32:00 ?

Если будет рабочий пример от ДЦ, на котором можно будет протестировать - можно будет доработать под этот пример и проверить.
Сейчас есть простое решение - самостоятельно разбить сессию на 2 через полночь. И можно указать в каком дне - например в субботу до 8:00 - остаток от пятницы или в воскресенье с 20:00 - начало понедельника.

 
Forester #:

Т.е 20:00 - 32:00 ?

Да. Готового ДЦ с таким сервером на примете нет. Надо искать где-то в NZ.
 
Stanislav Korotky #:
Да. Готового ДЦ с таким сервером на примете нет. Надо искать где-то в NZ.

Редактором кастомного символа сделал так:


 
Forester #:

Редактором кастомного символа сделал так:

Запрограммировал сессии с переходом а следующий день для вариантов как на скриншоте, т.е. 20:00-08:00.
Изменил функцию:
      for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//перебор сессий в этом дне недели
         if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //сессия началась - найти конец
            if(Sec < this.TradeTimeTo[i][DayOfWeek]){//конец еще не настал, запомнить
               this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //время конца текущей сессии, до него можно не проверять следущую = (начало этого дня + время сессии) 
               //Print("new Stop ",this.NextTradeStop);
               return true; 
            }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// конец < начала например 20:00-04:00 - переход на следущие сутки + 1 день к времени
               this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //время конца текущей сессии, до него можно не проверять следущую = (начало этого дня + время сессии) 
               //Print("new Stop ",this.NextTradeStop);
               return true;
            }
         }
      }

Добавленный код проверяет, что окончание < начала сессии и затем просто добавляет 1 день к времени окончания.

Проверил такими сессиями:

Day: 1 Trade sessions: 1: 23:55-00:05
Day: 2 Trade sessions: 1: 00:15-00:17


Первая сессия с заходом на следующий день:

2020.06.29 23:55:03   2020.06.29 23:55:03
2020.06.29 23:55:09   2020.06.29 23:55:09
2020.06.29 23:56:39   2020.06.29 23:56:39
2020.06.29 23:57:01   2020.06.29 23:57:01
2020.06.29 23:59:59   2020.06.29 23:59:59
2020.06.30 00:00:00   2020.06.30 00:00:00
2020.06.30 00:00:08   2020.06.30 00:00:08
2020.06.30 00:01:52   2020.06.30 00:01:52
2020.06.30 00:02:02   2020.06.30 00:02:02
2020.06.30 00:02:30   2020.06.30 00:02:30
2020.06.30 00:03:25   2020.06.30 00:03:25
2020.06.30 00:03:31   2020.06.30 00:03:31

Вторая сессия, обычная в одном дне:
2020.06.30 00:15:29   2020.06.30 00:15:29
2020.06.30 00:16:01   2020.06.30 00:16:01
2020.06.30 00:16:09   2020.06.30 00:16:09

Первая сессия через неделю:
2020.07.06 23:55:01   2020.07.06 23:55:01
2020.07.06 23:55:09   2020.07.06 23:55:09