Как ограничить работу советника во времени?

 

Я добавила в советник StartTime и EndTime и переменную trigger.

Но это не работает в том виде в котором я это сделала.

Подскажите или покажите как это сделать!

То что сделала я в прикрепленном файле.

Файлы:
 
if (Hour()>=10&&Hour()<21)
 
MOLET >>:

Не работает!!!

Файлы:
 
liza >>:

Не работает!!!

пример организации работы советника внутри временного окна - советник PROphet / в CodeBase/,

работает,как часики!

 
попробуй вот так:
extern bool Timer = true;
extern int OpenHour = 22;
extern int CloseHour = 7;

int Timers()
{
if (Timer == false)
     return (1);
if (OpenHour < CloseHour)
     {
     if (Hour() >= OpenHour && Hour() < CloseHour)
          return (1);
     else
          return (0);     
     }
if (OpenHour > CloseHour)
     {
     if ((Hour() >= OpenHour && OpenHour <= 23) || (Hour() < CloseHour && CloseHour >= 0))
          return (1);
     else
          return (0);     
     }     
}

if (Timers() == 1)
     {
     .....
     }
 
MOLET >>:
if (Hour()>=10&&Hour()<21)

liza 20.12.2008 17:47

MOLET >>:

Не работает!!!


Оно не может неработать:

int start() {
if (Hour()<10 && Hour()>=21) return (0);
// ...
// your code
// ...
return (0);
}

 
mamma >>:

liza 20.12.2008 17:47

Не работает!!!


Оно не может неработать:

int start() {
if (Hour()<10 && Hour()>=21) return (0);
// ...
// your code
// ...
return (0);
}

Код который обрабатывает подобное должен быть НЕ ОПАСЕН

например

сделок нет !!! то отсекаем по времени и тут все в порядке с логикой

а вот если на счете есть сделки

нужно пропускать в блок который ЗАКРОЕТ сделку если возникнет сигнал!

т е просто тупо - не стоит блокировать работу по времени

---

если же правилами ТС допускается бросать на произвол судьбы сделки

то конечно можно и такой код применить

--

в моем советнике есть сигнал на закрытие ! даже вне его рабочей сессии !!!

у меня код анализирует сделки советника! ( ручные сделки или сделки другой ТС нге учитываются )

 

Поделюсь своим блоком ограничения по времени из рабочего советника

extern string m="Permission to restrict trade in time";
extern bool      TradeTime=false;
extern string n="Hour start of trading";
extern int       StartTrade=20;
extern string o="Hour late trade";
extern int       EndTrade=8;
//-----------------------------------------------------------------------------+
// Функция контроля времени торговли                                           |
//-----------------------------------------------------------------------------+
bool TradeTime(){
int StartTradeHour=StartTrade;
int EndTradeHour=EndTrade;
if(!TradeOfTime){
gTime=StringConcatenate("the end of trading on Friday in ",DoubleToStr(EndTradeHour,0),":00 am");
if(DayOfWeek()==5){if(TimeHour(TimeCurrent())>EndTradeHour){return(false);}}
if(DayOfWeek()==1){if(TimeHour(TimeCurrent())<2){return(false);}}
if(DayOfWeek()==6||DayOfWeek()==0){return(false);}
return(true);}
if(DayOfWeek()==5){StartTradeHour=0;if(TimeHour(TimeCurrent())>EndTradeHour){return(false);}}else{StartTradeHour=StartTrade;}
if(DayOfWeek()==1){if(TimeHour(TimeCurrent())<2){gTime="Start tarde in  01:00 am";return(false);}}
if(DayOfWeek()==6||DayOfWeek()==0){return(false);}
if(StartTradeHour<EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour&&TimeHour(TimeCurrent())<EndTradeHour
    ||CountOpOrd("0")>0){
    gTime=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    return(true);}}
if(StartTradeHour>EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour||TimeHour(TimeCurrent())<EndTradeHour
    ||CountOpOrd("0")>0){
    gTime=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    return(true);}}    
gTime=StringConcatenate("resting to : ",StartTradeHour,": 00");    
return(false);
}
//+------------------------------------------------------------------+
//| Подсчитывает количество открытых ордеров согласно условиям       |
//+------------------------------------------------------------------+
int CountOpOrd(string Sy="",int Typ=-1,int Magik=-1){int count=0;
if(Sy=="0"){Sy=Symbol();}
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Sy||Sy==""){
        if(OrderType()==Typ||Typ==(-1)){
          if(OrderMagicNumber()==Magik||Magik==(-1)){
            if(OrderCloseTime()==0){
              count++;
            }  
          }
        }
      }
    }
  }
return(count);  
}

 
Естественно, тогда просто надо пустить проверку закрытия открытых сделок ДО проверки времени... Я просто показал на пальцах.
Спасибо за уточнение!
 
int start() {
if (Hour()<10 && Hour()>=21) return (0);
// ...
// your code
// ...
return (0);
}


Предложенный вариант действительно не работает.

Вот верный.

if (Hour()<10 || Hour()>=21) return (0);
Причина обращения: