[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 29
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, как вытягивать значения из индикатора зиг-заг? Как вообще это реализуется? Т.е. если я хочу подхватить определённый экстремум, а не только последний.
Вот, например, я щяс это зиг-заг хочу прикрутить к своему эксперту:
То что нужно воспользоваться функцией iCustom как это обычно и делается для обращения к пользовательскому индюку я понимаю, но как цеплять вершины это вопрос...
В буфере ищется НЕПУСТОЕ (EMPTY_VALUE) значение по принципу:
а доступ к буферу индикатора через iCustom().В буфере ищется НЕПУСТОЕ (EMPTY_VALUE) значение по принципу:
а доступ к буферу индикатора через iCustom().
Логично. Но таким образом будет поиск до тех пор, пока не наткнёмся на непустое значение. А если, мне, например, да и, на самом деле, нужен не последее непустое значение т.е. не последний экстремум, а другой.. Например, вот на скрине:
Логично. Но таким образом будет поиск до тех пор, пока не наткнёмся на непустое значение. А если, мне, например, да и, на самом деле, нужен не последее непустое значение т.е. не последний экстремум, а другой.. Например, вот на скрине:
В цикл ввести счётчик экстремумов и по номеру экстремума (непустого значения подряд) разрывать цикл.
Понял. Благодарю. Тут нужно теперь на практике это всё применять. Суть понял, но в уме стока фильтров что мозг закипает...
Понял. Благодарю. Тут нужно теперь на практике это всё применять. Суть понял, но в уме стока фильтров что мозг закипает...
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
вот так. функции отдаешь n (номер пика) она тебе вернет его значение. если тебе нужен номер бара пика то поменять тип функции на int и вместо return(ind); напиши return(i);
Также учти что если ты в коде своем используешь i особенно в переборах (как в учебнике) то в этой функции поменяй i на любую другую переменную например k.
и обязательно настрой iCustom внутри функции под свой индикатор.
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
вот так. функции отдаешь n (номер пика) она тебе вернет его значение. если тебе нужен номер бара пика то поменять тип функции на int и вместо return(ind); напиши return(i);
Также учти что если ты в коде своем используешь i особенно в переборах (как в учебнике) то в этой функции поменяй i на любую другую переменную например k.
и обязательно настрой iCustom внутри функции под свой индикатор.
Николай, интересно, конечно, у вас написано условие. Смотрю, и думаю...
Получается если буфер пользовательского индикатора вернул значение нуль, то n--, а если если буфер пользовательского индикатора вернул значение нуль, то ... возврашаем значение буфера индикатора.
Но условия же одинаковы. И там и так если не нуль..
Николай, интересно, конечно, у вас написано условие. Смотрю, и думаю...
Получается если буфер пользовательского индикатора вернул значение нуль, то n--, а если если буфер пользовательского индикатора вернул значение нуль, то ... возврашаем значение буфера индикатора.
Но условия же одинаковы. И там и так если не нуль..
скобки фигурные куда то выпали пока пытался суда нормально код вставить:
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1) {
if(ind!=0) n--;
}else{
if(ind!=0) return(ind);
}
}
}
Если n>1 {
если буфер не пустой то от n отнимем 1
}наоборот{
если буфер не пустой - вернем его значение
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
В общем то, и так и так прекрасно всё. Просто я привык код писать немного иначе, мне так читается проще, а у вас по другому. У вас скобка первая каждая не переносится. Я у себя разложил в Эдиторе и всё стало на свои места в таком виде:
В общем то, и так и так прекрасно всё. Просто я привык код писать немного иначе, мне так читается проще, а у вас по другому. У вас скобка первая каждая не переносится. Я у себя разложил в Эдиторе и всё стало на свои места в таком виде:
когда код перешагивает за over 1000 строк, начинаешь писать компактно )
также в MT4 страдает быстродействие, особенно когда проводишь тесты. Лаконичный вариант исполняется быстрее.