[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 98

 

У Кима есть функция:

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
} 

 У меня 2 вопроса:

1. Зачем переводит сразу время в строку, а потом строку во время?

2.  Зачем это условие в функции?

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

 Ведь проверка времени ниже.. Вот тут:

if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

 Да и в параметрах функции переменные времени не является типом datetime, а почему-то int...

 
Ха, я допер до истины. Дело в том, что файл над редактированием которого я работал был открыт с флешки еще вчера. Текст открыт, все хорошо, а флешку я сегодня не подключал. Вот МЕ4 и в непонятках - что это я хочу скомпилить, текст есть но для редактирования он  просто НЕ ДОСТУПЕН. Блин, вот бывает же.
 
hoz:

У Кима есть функция:

 У меня 2 вопроса:

1. Зачем переводит сразу время в строку, а потом строку во время?

2.  Зачем это условие в функции?

 Ведь проверка времени ниже.. Вот тут:

 Да и в параметрах функции переменные времени не является типом datetime, а почему-то int...

 

 

 


1. Чтобы заменить во времени текущие значения часов и минут на указанные в параметрах функции

я бы сделал так:

db=TimeCurrent()-TimeCurrent()%86400+hb*3600+mb*60;

2. Для дополнительной коррекции дат начала или конца на сутки

datetime и int - по большому счёту - одно и то же, к тому же параметры не являются полными датами, а только количеством часов и минут

 
MikeM:


2. Для дополнительной коррекции дат начала или конца на сутки

  А зачем? Тут нужно ограничить время торговли советника. А время от часа окончания времени торговли до времени начала времени торговли нас не интересует, т.к. в это время советник не торгует! НОНСЕНС какой-то..

 

MikeM:

 

datetime и int - по большому счёту - одно и то же, к тому же параметры не являются полными датами, а только количеством часов и минут

 Но время то должно быть временем, как это нет разницы?
 
hoz:


 Но время то должно быть временем, как это нет разницы?


Время это число, при том целое. 
 
Vinin:

Время это число, при том целое. 


 С временем то я понял, это ведь не дата, потому как число и объявляем. А что по поводу:

 

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

 Сколько встречал вариантов, такого не видел ещё... Странно как-то. Тем более тут и цикла нет, и минусует и плюсуется время начала и конца торговли. Не понимаю я этот момент.

 По сути время начала и конца торговли db и de мы получили выше. Значит это кусок можно стереть, и тогда тут мы проверим время:

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

 Какой смысл писать лишний код? Прошу объяснить этот момент. Он, на самом деле, не логичный.

 
hoz:


 С временем то я понял, это ведь не дата, потому как число и объявляем. А что по поводу:

 

 Сколько встречал вариантов, такого не видел ещё... Странно как-то. Тем более тут и цикла нет, и минусует и плюсуется время начала и конца торговли. Не понимаю я этот момент.

 По сути время начала и конца торговли db и de мы получили выше. Значит это кусок можно стереть, и тогда тут мы проверим время:

 Какой смысл писать лишний код? Прошу объяснить этот момент. Он, на самом деле, не логичный.


Каждый волен делать по своему. Игорь сделал так. Я делаю по другому.

А плюсуется или минусуется. Так это зависит от времени торговли. Например как организовать торговлю с 21 часа до 5 часов.

Если бы не использовались минуты, то можно было бы значительно все упростить 

 
Vinin:


Каждый волен делать по своему. Игорь сделал так. Я делаю по другому.

А плюсуется или минусуется. Так это зависит от времени торговли. Например как организовать торговлю с 21 часа до 5 часов.

А то что код избыточен. С кем не бывает.

Если бы не использовались минуты, то можно было бы значительно все упростить 


Сделать так что б время торговли было с 21.00  по 23.59, а потом с 00.01 по 5.00

А что есть другие варианты? 

 
hoz:


Сделать так что б время торговли было с 21.00  по 23.59, а потом с 00.01 по 5.00

А что есть другие варианты? 

Если напишите if(Hour() >= 21 || Hour() < 5) будет с 21.00 до 4.59.
 
borilunad:
Если напишите if(Hour() >= 21 || Hour() < 5) будет с 21.00 до 4.59.

Странно. Оно через полночь проскакивает и не учитывает это вовсе?