Временной интервал торговли советника

 

Всем доброго времени суток!

Нужно задать интервал времени в который советник будет торговать. Подскажите как это можно сделать?

 
Nokolay80:

Всем доброго времени суток!

Нужно задать интервал времени в который советник будет торговать. Подскажите как это можно сделать?


Вариантов множество.

1. От часа утра до часа вечера

2. От часа вечера до часа утра.

3. Вариант 1 и 2 в минутах

4. Прочие варианты

При необходимости можно функции добавить

 

Вот набрасал, проверьте

bool TimeFilter(int starthour, int endhour)
{
  int  current_hour = TimeHour(TimeCurrent());
  bool trade_hours=false;
  
  if (StartHour>=EndHour)
  {
    if (current_hour >= starthour || current_hour < endhour) trade_hours=true;
  }

  else if (StartHour<EndHour)
  {
    if (current_hour >= starthour && current_hour < endhour) trade_hours=true;
  }  
  return(trade_hours);
}
 

у "Кимива" есть функция

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    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);
} 
 
А можно подробнее описать куда это вставлять и в каком виде? Как не пробовал не получается, не силен в mql4.
 
Перенесено.

Nokolay80:
Нужно установить очень простой Time filter чтобы советник торговал с ... до ... часов. И ткнуть носом куда и что писать =). Заранее благодарен.

vah:
if (Hour()>20 || Hour<2) return(0);//совнетник будет работать с 2 до 20 часов, вставте эту строку после start() {
Nokolay80:
Выдает ошибку '<' Left parenthesis expected . Попробовал по логике дописать скобки if (Hour()>20 || Hour()<2) return(0);. Вообще перестал ордера открывать.

vah:
да вы верно исправили, и я ошибся при таком условии с 2 до 21, но условие тоько что проверил у меня работает
vah:
если хотите выложите код вам вставят условие

goldtrader:

Чтобы работал с 2 до 20 часов надо так:

if (Hour()>=2 && Hour()<20) return(0);


vah:
Да.я ошибся опять=)
 
Николай, не плодите темы, дублирование запрещено.
 
Nokolay80:
А можно подробнее описать куда это вставлять и в каком виде? Как не пробовал не получается, не силен в mql4.
Саму функцию Кима надо разместить в самом конце кода, за пределами функции start().
При вызове она возвращает true, если согласно указанным в ее вызове параметрам торговля разрешена.
В первой строке специальной функции start() советника можно поместить следующую строку для разрешения торговли, например, между 22-30 и 23-35 серверного времени:
if(!isTradeTimeInt(22, 30, 23, 35)) return;
 

Теперь все работает. Всем спасибо за помощь.

 
а как добавить чтобы сова не торговала в friday
 

Этот код не срабатывает при тестировании советника, а в этом и заключается смысл необходимости временного интервала, потому что в реальном времени можно и самому включать и выключать советник. Очень важно чтоб такая функция работала при оптимизации советника.

Если у кого то это получилось сделать, поделитесь пожалуйста, очень надо!

Причина обращения: