Подскажите, пожалуйста, - страница 2

 
ToLik_SRGV:

Функция Hour(), не имеет передаваемых параметров, а вы передаете в нее Time[0].
Отсюда и ошибки.


Я это поняла сразу, в документации так и есть, но хотела попробовать решить свою проблему, как посоветовал OneDepo надеялась, вдруг я чего недопонимаю, и эта конструкция пройдет, но нет, и как мне в тестере определять начало нового часа на минутном ТФ ни как не придумаю

 
Angela:

 и как мне в тестере определять начало нового часа на минутном ТФ ни как не придумаю

Ну например так :))

//+------------------------------------------------------------------+
bool newHour(){
   static int save;
   if(save != TimeHour(TimeCurrent())){
      save = TimeHour(TimeCurrent());
      return(true);
   }
   return(false);
}
//+------------------------------------------------------------------+
 
Angela:

Если Вы работаете в тестере, то нужно искать в tester\files

И там тоже нет. :-(
 
ToLik_SRGV:

Ну например так :))


А Вы эту конструкцию пробовали? У меня на нее компилятор ругается.
 
Angela:

А Вы эту конструкцию пробовали? У меня на нее компилятор ругается.

В советнике применял, никаких проблем с конструкцией нет.

//+------------------------------------------------------------------+
int start(){
   if(newHour())Alert("new Hour");
}
//+------------------------------------------------------------------+
bool newHour(){
   static int save;
   if(save != TimeHour(TimeCurrent())){
      save = TimeHour(TimeCurrent());
      return(true);
   }
   return(false);
}
//+------------------------------------------------------------------+
 
ToLik_SRGV:

В советнике применял, никаких проблем с конструкцией нет.



Спасибо, с компилятором разобралась.
 
Angela:

Спасибо, с компилятором разобралась.

Некоторое уточнение, вы собираетесь использовать эту конструкцию в советнике или индикаторе?

 
ToLik_SRGV:

В советнике применял, никаких проблем с конструкцией нет.



Но логика что-то не работает как надо. Делала по аналогии с

if(prevtime != Time[0])
    {  
       prevtime = Time[0]; 
.........................
    }

которая по приходу нового бара выполняет некоторые действия.

if(save != TimeHour(TimeCurrent()))
    {
       save = TimeHour(TimeCurrent());
       nc=0;nsp=1;nso=1;
       SP=(Open[1]+Close[1])/2;

    }
по аналогии не срабатывает, присваивание переменным nc=0;nsp=1;nso=1; соответствующих значений не происходит.
 
ToLik_SRGV:

Некоторое уточнение, вы собираетесь использовать эту конструкцию в советнике или индикаторе?


В индикаторе.
 
Angela:

В индикаторе.

В индикаторе подобные схемы будут работать только на демо или реале, потому что для индикаторов не моделируется серверное время, все функции получения даты и время возвращают данные последней записи в текущей истории, вот такой косяк в тестере.

Проверить это просто в метод start() индикатора просто добавьте код возвращающий через алерт текущее «смоделированное» время

Alert("Time Current ", TimeToStr((TimeCurrent())));

и будете во время теста получать все время одни и теже данные. Хотя в справке четко написано


datetime TimeCurrent()
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Замечание: при тестировании последнее известное время сервера моделируется.

Но нет уточнения для чего именно моделируется, а для чего нет, для индикаторов видимо нет.