Потому что между ними есть еще несколько.
Чем одни отличаются от других?
Смотри, я отметил места, смены цвета, одного столба на другой,
тоесть, вот этот переход (идем справа на лево, это важно!) зеленый,
зелёный, зелёный.. -> красный - это раз ну и тд. Самое главное чтобы было не меньше 3-х столбов одного цвета справа и не менее 3-х столбов переходного цвета слева... иначе это ложный раз.. И так просматриваем до тех пор пока, как показано в это примере
(SELL) не произойдет смена отрицательного числа на положительное
(я отметил этот переход) -> это стоп!
Надеюсь, понятно изъяснился...
// Глобал.пер datetime TimeOpen; bool OnePeak, TwoPeak; double OnePeakVal, TwoPeakVal; // Инициализатор выполнения на цене открытия bool StartProgram() { if(TimeOpen != Time[0]) { TimeOpen = Time[0]; return(true); }else return(false); } void start() { if(StartProgram()) { if(AOmodel()) Print("Такая вот модель ;-) ", TimeToStr(Time[1], TIME_DATE|TIME_MINUTES)); } } // --- --- --- Функции bool AOmodel() { if(AO(1) > AO(2) && AO(2) > AO(3) && AO(3) > AO(4) && AO(4) < AO(5) && AO(5) < AO(6) && AO(6) < AO(7) && AO(7) < 0 && AO(1) < 0) { if(OnePeak) { TwoPeak = true; TwoPeakVal = AO(4); }else{ OnePeak = true; OnePeakVal = AO(4); } } if(AO(1) >= 0) { OnePeak = false; TwoPeak = false; } if(OnePeak && TwoPeak && TwoPeakVal > OnePeakVal) { OnePeak = false; TwoPeak = false; return(true); }else{ return(false); } } // Значение индикатора AO! double AO(int Shift) { return(NormalizeDouble(iAO(NULL, 0, Shift), Digits + 1)); }
Ну, вот что то вроде - это для низов так сказать :-)
Хотя для нормального эксперта, еще нужно было бы создать первичную проверку данных. (то есть проверить была ли такая модель до данного бара) Это также надо сделать и для того что бы переменные не терялись при разрыве связи, т.е происходило автоматическое переопределение
Первичную проверку нужно организовать в функции init(), сделать
в цикле для последних 50 баров
Я вот всё таки думаю, что тут нужен цикл. Смотри, это в данном примере мы видим две пики, но их может быть сколько угодно….! Наша задача сделать так что бы скрипт просматривал, эти бары, по АО начиная с настоящего и идя назад один за одним смотрел за их значениями… Там где идет перелом в значениях это и есть пик, сохранить это как «раз» или «1» если быть более точным, и идти дальше назад, еще перелом это второй пик или «два» тоесть «2» и это сохранить в переменной (я так думаю, массив нужен), ну и так дальше до тех пор пока не встретим значение с другим знаком (в зависимости от BUY или SELL) – вот тогда стоп! И всё это в цикле, причем без прерывания, тоесть без break; в цикле. ., так чтобы цикл постоянно смотрел за значениями АО и выдавал нам количество вершин на данный момент от настоящего момента до смены знака в значениях…
Фууу…….
to Inter
Ну Вы сами достаточно точно не определили стоящую перед Вами
задачу, в начале
Судя по иллюстрации - это двойная дивергенция на АО, при определении вершин как 3 красных 3 зеленых…
Сноски на то что вершин больше двух нигде и не было… Причем до сих пор не ясно как они между собой соотносятся…образуют ли они двойную/тройную/четверную и т.д дивергенцию, или что-то еще – это вопрос )))))))
Надо быть точнее в постановке задачи в начале)
Цикл в любом случаи использовать не рационально с точке зрения экономии машинных ресурсов. Если так делать, то на каждом баре будут переопределяться по нескольку раз одни и те же пики.. быстродействие эксперта упадет раз в 8 )
Нужна Помощь! ХЕЛП!
Вот код который определяет кол-во пиков и заносит зничение на них в мас.
datetime TimeOpen; int a; double PeakValue[10]; bool StartProgram() { if(TimeOpen != Time[0]) { TimeOpen = Time[0]; return(true); }else return(false); } void start() { if(StartProgram()) { AOmodel(); Print("Количество пиков на данный момент: ", DoubleToStr(a, 0)); } } void AOmodel() { if(AO(1) > AO(2) && AO(2) > AO(3) && AO(3) > AO(4) && AO(4) < AO(5) && AO(5) < AO(6) && AO(6) < AO(7) && AO(7) < 0 && AO(1) < 0) {a++; PeakValue[a] = AO(4);} if(AO(1) >= 0) a = 0; } double AO(int Shift) {return(NormalizeDouble(iAO(NULL, 0, Shift), Digits + 1));}
![](https://c.mql5.com/mql4/forum/2007/03/mhgmg.gif)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
И в какой-нибудь переменной было зафиксировано это - "два"...
Нужен кусок кода в эксперт, не в индикатор....
Заранее всем благодарен!