- Вопросы от начинающих MQL5 MT5 MetaTrader 5
- Помогите с примером кода, нужно написать 2 условия...
- Сигнал в одном терминале, сделка - в другом
Привет! Нужно найти 3-й екстремум зигзага. Написал вот такое (только не смейтесь)):но это конечно же не практично и не красиво с точки зрения программирования. Вот я и хочу спросить: можно ли инициализировать 3-х значный массив и в цикле (for) записать в него 3 первых екстремума зигзага? Если можно то с чего начать, как это сделать. Будьте добры подскажите!!!
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 07.10.2006 | //| Описание : Возвращает номер бара экстремума ЗигЗага по его номеру. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента (NULL или "" - текущий символ) | //| tf - таймфрейм ( 0 - текущий ТФ) | //| ne - номер экстремума ( 0 - последний) | //| dp - ExtDepth | //| dv - ExtDeviation | //| bs - ExtBackstep | //+----------------------------------------------------------------------------+ int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) { if (sy=="" || sy=="0") sy=Symbol(); double zz; int i, k=iBars(sy, tf), ke=0; for (i=0; i<k; i++) { zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i); if (zz!=0) { ke++; if (ke>ne) return(i); } } Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден"); return(-1); }
перебирать пачку баров на каждом тике — будет медленно работать...
лучше запоминать две последние вершины, и перепроверять только их изменение, ну и появление новой вершины
перебирать пачку баров на каждом тике — будет медленно работать...
лучше запоминать две последние вершины, и перепроверять только их изменение, ну и появление новой вершины
А зачем вершины и прочие индикаторы проверять на каждом тике?
Такие вещи проверяются один раз на "новом баре"
А зачем вершины и прочие индикаторы проверять на каждом тике?
Такие вещи проверяются один раз на "новом баре"
зависит от стратегии - зигзаг может перерисовывать последние две вершины, и делает это в любой момент, а не только в начале нового бара.
Насчет нового бара я согласен потому что зигзаг перерисовывает только две последние вершины а мне нужна 3-я. Но я бы хотел узнать именно про запись в массив последних 3-х екстремумов... Это возможно или нет? Если да то как это сделать? У меня что-то туго с массивами...
А с не массивами не туго?
Какая разница записать в массив mass[3] или в 3 разные переменные mass0, mass1, mass2???
"А ответ ужасно прост и ответ единственный" В. С. Высоцкий.
mass[0] равнозначно mass0
mass[1] равнозначно mass1
mass[2] равнозначно mass2
Это все премудрости массивов. Просто в цикле перебирай значения индикатора, если не пустое значение и\или не 0 (зависит от написания ZZ), проверяй на соответствие цене high или low и при необходимости записывай в массив с очередным индексом.
Попробуйте так. Заодно посмотрите какая разница
// С массивом double Цены[3]; // 3-х элементный массив результаты int Счетчик = 0; // Найдено вершин for(int i=0;i<Bars;i++) { if(ZZ_Orlova[i]!=0) { Цены[Счетчик]=ZZ_Orlova[i]; Счетчик++; if(Счетчик==3)break; } } Alert(Цены[2]); ------------------------------------------------------------------------------------------------- // Без массива с запоминанием лишь третьей вершины зигзага double Цена; int Счетчик = 0; // Найдено вершин for(int i=0;i<Bars;i++) { if(ZZ_Orlova[i]!=0) { Цена=ZZ_Orlova[i]; Счетчик++; if(Счетчик==3)break; } } Alert(Цена);------------------------------------------------------------------------------------------------------ // Без массива запоминаем все три вершины double Цена1,Цена2,Цена3; int Счетчик = 0; // Найдено вершин for(int i=0;i<Bars;i++) { if(ZZ_Orlova[i]!=0) { Счетчик++; if(Счетчик==1) Цена1=ZZ_Orlova[i]; if(Счетчик==2) Цена2=ZZ_Orlova[i]; if(Счетчик==3) if(Счетчик==3) Цена3=ZZ_Orlova[i]; // лишний раз проверяется 3 можно так { Цена3=ZZ_Orlova[i]; break; } if(Счетчик==3)break; } } Alert(Цена3);
Попробуйте так. Заодно посмотрите какая разница
Большое спасибо, первый вариант это как раз то что я и хотел узнать.
А с не массивами не туго?
Какая разница записать в массив mass[3] или в 3 разные переменные mass0, mass1, mass2???
"А ответ ужасно прост и ответ единственный" В. С. Высоцкий.
mass[0] равнозначно mass0
mass[1] равнозначно mass1
mass[2] равнозначно mass2
Это все премудрости массивов. Просто в цикле перебирай значения индикатора, если не пустое значение и\или не 0 (зависит от написания ZZ), проверяй на соответствие цене high или low и при необходимости записывай в массив с очередным индексом.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования