Скачать MetaTrader 5

Функция временного канала.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Killa
62
Killa  

Здравствуйте, уважаемые форумчане.

Помогите доработать функцию временного канала, на данный имеется код.

bool CloseInPeriod (int HourNow, int MinuteNow, int OpenHour, int OpenMinute, int CloseHour, int CloseMinute) {

bool result = False;
bool result1 = False;
bool result2 = False;

int NewOpenHour;
int NewOpenMinute;
int NewCloseHour;
int NewCloseMinute;

if (OpenHour < 0) NewOpenHour = 24 + OpenHour;
else NewOpenHour = OpenHour;
if (OpenMinute < 0) NewOpenMinute = 60 + OpenMinute;
else NewOpenMinute = OpenMinute;
//---
if (CloseHour < 0) NewCloseHour = 24 + CloseHour;
else NewCloseHour = CloseHour;
if (CloseMinute < 0) NewCloseMinute = 60 + CloseMinute;
else NewCloseMinute = CloseMinute;
//---

if ((HourNow >= NewOpenHour && MinuteNow >= NewOpenMinute) || (HourNow > NewOpenHour && MinuteNow < NewOpenMinute)) result1 = True;
else result1 = False;

if ((HourNow < NewCloseHour) || (HourNow == NewCloseHour && MinuteNow <= NewCloseMinute) || (HourNow > NewCloseHour && OpenHour > CloseHour)) result2 = True;
else result2 = False;


if (result1 == True && result2 == True) result = True;
else result = False;

//---
return (result);

}

Проблема только при временном канале до 00.00, например при 23.30 по 2.30. То есть при (Тек. час, тек. минута, -1, 30, 2, 30)

Заранее спасибо за ответ.

Alexander
2441
Alexander  

Все уже давно доработано-переработано

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    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);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
  datetime dtBegin, dtEnd;        // Время начала и окончания работы
  int      hc, he;                // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);
  hc     =TimeHour(TimeCurrent());
  he     =TimeHour(dtEnd);
  if (dtBegin>=dtEnd) {
    if (hc>=he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
  }

  if (TimeCurrent()>=dtBegin && TimeCurrent()<=dtEnd) return(True);
  else return(False);
}
Killa
62
Killa  
Спасибо за помощь, всё получилось.
Killa
62
Killa  

Только например при временном от 23.30 до 2.30, фелс возвращается при 02.00. То есть минуты часа окончания в таком варианте не работают.

P.S. Я говорю про функцию bool isTradeTimeInt

Killa
62
Killa  
Альтернативные функции еще какие-то есть? А то при 23.30 до 2.30 минуты окончания не учитываются...
Alexander
2441
Alexander  

Исправь строчку

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

на

if (hc>he) de+=24*60*60; else db-=24*60*60;
Killa
62
Killa  
Спасибо Roger, теперь всё работает.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий