Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 183

 
Integer:


int bt=((TimeCurrent()-5*60)/3600)*3600;

Значение bt будет меняться в 5 минут каждого часа. Можно в конце не умножать на 3600, будет номер бара от начала эпохи, этого достаточно для определения нового бара.

Не понял. Если можно полный код.
 
gince:


Всем спасибо помогающим.

Вопрос был таков.

<Есть такая функция NewBar(sy, ТF). Она смотрит открылся ли новый бар. Мне надо на часовом графике получить сигнал о появлений нового бара с запаздываем 5 мин. То есть я хочу получать сигнал в 0.05, 1.05,м 2.05, ..........., 10.05, 11.05 и т.д. >

Поясняю вопрос. Функция должна вернуть истину через каждый час, но с задержкой 5 мин. Т. е. когда кончаеться формировка бара 1.05 и появляеться бар 2.05, то с появлением последнего функция возвращает истину. Функция дает истину с появлением бара в 1.10, 2.10 и т.д.

На картинке желтая линия показывает, что на следующем баре была истина .

По вашим наводкам попробовал так, но неработает.


Сразу бросилось в глаза что типы не верные:

static int  LastBar = 0; 
datetime    curbar = iTime (Symbol(), 60, 0) +300; 

А потом их сравнивать и присваивать значения... int к datetime

 

Тока что написал на скорую руку. Смысл уловить можно, да и по ходу всё верно.

bool IsTrueBar ()
{
    static datetime LastTrueBar = 0;
    datetime OOT, CurBar, ShiftFromOOT;
//----    
    OOT = iTime (Symbol(), PERIOD_H1, 0);   // Время открытия часовик
    CurBar = OOT + ShiftFromOOT;            // Время открытия со сдвигом
    
    if (LastTrueBar != CurBar)
    {
        LastTrueBar = CurBar;
        return(true);
    }
    else return (false);
}
 

Да чего копья ломаете... Вот каждую пятую минуту часа возвращает TRUE и держит его одну минуту:

bool NewBar(){
 if(Minute()==5)return(true);
 else return(false);
}
 
Integer:


int bt=((TimeCurrent()-5*60)/3600)*3600;

Значение bt будет меняться в 5 минут каждого часа. Можно в конце не умножать на 3600, будет номер бара от начала эпохи, этого достаточно для определения нового бара.


Пропустил. Если умножать на 3600 в конце, тогда еще и назад прибавить поправку 5*60.

 
Sepulca:

Да чего копья ломаете... Вот каждую пятую минуту часа возвращает TRUE и держит его одну минуту:


Ведь и, в правду, а мы тут нагородили с умным видом...
 
Integer:


Пропустил. Если умножать на 3600 в конце, тогда еще и назад прибавить поправку 5*60.


Как-то всё завёрнуто и не читабельно. Хотя смысл я уловил.
 
hoz:


Сразу бросилось в глаза что типы не верные:

А потом их сравнивать и присваивать значения... int к datetime

int и datetime это одинаковые типы.
 
Sepulca:

Да чего копья ломаете... Вот каждую пятую минуту часа возвращает TRUE и держит его одну минуту:

За эту минуту советник откроет ему до сорока ордеров.
 
Roger:
За эту минуту советник откроет ему до сорока ордеров.


Так контролировать нужно...либо кол-во ордеров, либо только первое обращение к функции..
Причина обращения: