Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2319

 
antobarto #:

Добрый день. Помогите, пожалуйста, разобраться.

Задача: Если CCI пересекла уровень 200 сверху вниз - считаем тренд нисходящим, -200 снизу вверх - восходящим. То есть до проверки советником условия покупки/продажи, он должен "посмотреть" и найти ближайшее "совершённое" пересечение.

Делаю так и помещаю в тело onTick:

Результат не тот. Подскажите, пож., где ошибка, куда смотреть? 
 

Ошибка в отсутствии фигурных скобок в условии.

 
antobarto #:

Пробовал, только через 

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

for (int i=0; i<Bars; i++)
         {
            double CCI_1=iCCI(Symbol(),0,200,PRICE_CLOSE,i);
            double CCI_2=iCCI(Symbol(),0,200,PRICE_CLOSE,i+1);
            if(CCI_1>=CCI_BOT&&CCI_2<=CCI_BOT&&Time[i]>up) up=Time[i];
            if(CCI_1<=CCI_TOP&&CCI_2>=CCI_TOP&&Time[i]>dn) dn=Time[i];
            if(up<dn) TrendSignal = 1;
            else
            if(up>dn) TrendSignal = 2;
            else TrendSignal = -1;
            Comment(TimeToStr(up,TIME_DATE|TIME_MINUTES),"/",TimeToStr(dn,TIME_DATE|TIME_MINUTES),"/",TrendSignal);
         }
 
Tretyakov Rostyslav #:
Спасибо, не могу понять: up и dn , как их описать?
 
antobarto #:
Спасибо, не могу понять: up и dn , как их описать?

datetime

int TrendSignal = -1;
datetime up=0,dn=0;
 
antobarto #:
Спасибо, не могу понять: up и dn , как их описать?
У Вас просто нет в условии фигурных скобок. Поставьте их
 
Tretyakov Rostyslav #:

datetime

Спасибо, Ваше решение отлично подходит. Не могу только сварить всю логику - переменным up и dn присваиваем время, после чего сравнивая время этих переменных получаем результат пересечения индикатора, 

Почитал все справки по Time[], но не могу понять всю мудрость мысли. Не могли бы Вы объяснить подробнее, буду очень благодарен. 

 
antobarto #:

Спасибо, Ваше решение отлично подходит. Не могу только сварить всю логику - переменным up и dn присваиваем время, после чего сравнивая время этих переменных получаем результат пересечения индикатора, 

Почитал все справки по Time[], но не могу понять всю мудрость мысли. Не могли бы Вы объяснить подробнее, буду очень благодарен. 

У Вас есть пересечение
CCI_1>=CCI_BOT&&CCI_2<=CCI_BOT
и время пересечения
Time[i]

которое запоминаете в up и dn

если нове время пересечения больше предыдущего, то обновляем up и dn

а потом сравниваем (up и dn) чтоб узнать какое пересечение последнее.

 
Tretyakov Rostyslav #:
У Вас есть пересечение и время пересечения

которое запоминаете в up и dn

если нове время пересечения больше предыдущего, то обновляем up и dn

а потом сравниваем (up и dn) чтоб узнать какое пересечение последнее.

Спасибо, Вы здорово помогли. 
 
Прошу прощения коллеги. Не могу сообразить, как заставить работать FileOpen в эксперте MT4, если нет котировок ни по одному инструменту (суббота). Как я понял заставить насильно выполняться код через OnTimer (допустим с промежутком в 1 секунду) тоже не получится. Создание эмуляции жизни в терминале через OnCartEvent вместо OnStart или OnTimer не получается. В тестере  FileOpen не работает.
 
Yan Barmin #:
Прошу прощения коллеги. Не могу сообразить, как заставить работать FileOpen в эксперте MT4, если нет котировок ни по одному инструменту (суббота). Как я понял заставить насильно выполняться код через OnTimer (допустим с промежутком в 1 секунду) тоже не получится. Создание эмуляции жизни в терминале через OnCartEvent вместо OnStart или OnTimer не получается. В тестере  FileOpen не работает.

 Запустить таймер можно в индикаторе(в субботу и воскресенье)

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