View Full Version : Индикаторы и их модификации
Здравствуйте уважаемые участники форума!
Создал эту тему потому,что вопросы все задают о советниках да экспертах,а оказывается есть еще и такие,кому потяге своими руцями работать.Для такой работы нужны индикаторы,которых в сети валом,и при желании,потратив на это дело около суток можно сколотить неплохое состояние из оных.Кому же этим делом заниматься неохота,может скачать мой личный сборник насчитывающий около 4000 индюков прямо звiдсiля.
Но даже при наличии такого,иногда что-то не устраивает.Вот у меня как раз такой случай,и я хотел бы обратиться за помощью к знающим людям.Суть моего прошения заключается в переделке внешнего вида одного пользовательского индикатора ADX smoothed или Индекс Направленного Движения сглаженный.В отдельном окошке он рисует как и оригинал три линии с той лишь разницей,что дергается намного меньше.А проблема заключается в том,что при плавных переворотах линии ADX визуально очень тяжело определить разницу между показаниями на последней и предпоследней свече.(не понятно какое из них больше,а какое меньше).А сделать я прошу вот как: над(под) каждой свечей рисуется точка 250 при условии,что ADX_Final > ADX_Final+1 && ADX_Final >25. Оригинальный код прилагается.
Напишите любое сообщение,а то я превысил лимит загружаемого объема и не могу залить оставшиеся 2_е части
Не очень понятно что такое "точка 250". Поясните, пожалуйста.
Цитата(SK_ @ Dec 28 2008, 02:37 PM) 16421"]
Не очень понятно что такое "точка 250". Поясните, пожалуйста.
У каждого символа в коде есть свой порядковый номер.Допустим,для up Fractal номер будет 217,и выглядеть будет* :
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
Ну а в моем случае это точка с индексом 250.Но если вы из своих соображений замените точку на стрелку - я не обижусь.
Да,и еще одно!На сколько я понял вы SK_ , являетесь здесь главным.Поэтому расскажите мне,как залить остальные две части архива?Потому как в данной теме , я как ее основатель,ипользовал 9.54 мб из 9.77,а четыре метра нужно как-то впихнуть.
Цитата(Sedoy @ Dec 29 2008, 12:17 AM) 16425"]
У каждого символа в коде есть свой порядковый номер.Допустим,для up Fractal номер будет 217,и выглядеть будет* :
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
Ну а в моем случае это точка с индексом 250.Но если вы из своих соображений замените точку на стрелку - я не обижусь.
Да,и еще одно!На сколько я понял вы SK_ , являетесь здесь главным.Поэтому расскажите мне,как залить остальные две части архива?Потому как в данной теме , я как ее основатель,ипользовал 9.54 мб из 9.77,а четыре метра нужно как-то впихнуть.
1. Насчёт стрелочек понятно.
2. Насчёт "главный" - нет, я не главный. Главный у нас руководитель проекта - Ренат (http://forextrade.ru/?p=3253).
3. Как залить. Думаю, нужно просто залить в новом сообщении. Но, возможно, в форуме установлено ограничение 10 Мб. Тогда никак.
Вообще, я посмотрел содержание этих архивов.. Пожалуй, не стоит выкладывать сверх того. Хорошо, если у пользователей хватит сил просмотреть выложенное.
QUOTE (Sedoy @ Dec 28 2008, 01:21 PM) 16419"]
Здравствуйте уважаемые участники форума!
Создал эту тему потому,что вопросы все задают о советниках да экспертах,а оказывается есть еще и такие,кому потяге своими руцями работать.Для такой работы нужны индикаторы,которых в сети валом,и при желании,потратив на это дело около суток можно сколотить неплохое состояние из оных.Кому же этим делом заниматься неохота,может скачать мой личный сборник насчитывающий около 4000 индюков прямо звiдсiля.
Но даже при наличии такого,иногда что-то не устраивает.Вот у меня как раз такой случай,и я хотел бы обратиться за помощью к знающим людям.Суть моего прошения заключается в переделке внешнего вида одного пользовательского индикатора ADX smoothed или Индекс Направленного Движения сглаженный.В отдельном окошке он рисует как и оригинал три линии с той лишь разницей,что дергается намного меньше.А проблема заключается в том,что при плавных переворотах линии ADX визуально очень тяжело определить разницу между показаниями на последней и предпоследней свече.(не понятно какое из них больше,а какое меньше).А сделать я прошу вот как: над(под) каждой свечей рисуется точка 250 при условии,что ADX_Final > ADX_Final+1 && ADX_Final >25. Оригинальный код прилагается.
Здравствуйте!
какое доброе дело Вы затеяли тут с этой праздничной роздачей слонов :D 4000!! обалдеть!!
К сожалению не смогу помочь вам в доработке ADX, так как глубокими знаниями MQL не владею. Но очень благодарен Вам за эту предоставленную коллекцию "полезностей"
Удачи!
Цитата(Sedoy @ Dec 28 2008, 03:21 PM) 16419"]
А сделать я прошу вот как: над(под) каждой свечей рисуется точка 250 при условии,что ADX_Final > ADX_Final+1 && ADX_Final >25. Оригинальный код прилагается.
Индикаторные линии любого индикатора могу отображаться либо в основном окне, либо в подокне. Нет технической возможности отобразить часть индикаторных линий в одном окне, а чать - в другом. Поэтому отображение интересующих Вас данных в основном окне выполнено с помощью графических объектов.
[attachment=5152:ADX_Smoothed.mq4]
Индикатор корректно управляет графическими объектами при переключени таймфрейма и при выгрузке.
Если есть вопросы по программному коду, спросите.
Подробнее о применяемом методе можно будет прочесть в ближайшее время в статье (через 1-2 дня).
Огромное спасибо за проделанный вами труд,но к сожалению мы не поняли друг друга.Наверное я плохо объяснил,поэтому прошу извинения.Вы же сами цитировали мои слова : " А сделать я прошу вот как: над(под) каждой свечей рисуется точка 250 при условии,что ADX_Final > ADX_Final+1 && ADX_Final >25." И ВСЁ!!! Если в линиях ничерта не понятно то и смысла в них нет,-они только занимают место.У меня каким-то чудом получилось переделать так обычный ADX,а вот с этим нашла коса на камень.Может быть не махнёте на всё это рукой и взглянёте на мою не рабочую попытку,и глядишь,под рукой професионала код оживёт.Вылаживаю скрин и свой недодел.Ошибок гадина не выдаёт но рисовать на отрез отказывается.Уж два месяца над бьюсь и всё никак!
Ёще раз прошу извинить меня за это недоразумение,которое я надеюсь не помешает дальнейшей работе.
Цитата(Sedoy @ Jan 15 2009, 05:56 PM) 16747"]
Огромное спасибо за проделанный вами труд,но к сожалению мы не поняли друг друга.Наверное я плохо объяснил,поэтому прошу извинения.Вы же сами цитировали мои слова : " А сделать я прошу вот как: над(под) каждой свечей рисуется точка 250 при условии,что ADX_Final > ADX_Final+1 && ADX_Final >25." И ВСЁ!!! Если в линиях ничерта не понятно то и смысла в них нет,-они только занимают место.У меня каким-то чудом получилось переделать так обычный ADX,а вот с этим нашла коса на камень.Может быть не махнёте на всё это рукой и взглянёте на мою не рабочую попытку,и глядишь,под рукой професионала код оживёт.Вылаживаю скрин и свой недодел.Ошибок гадина не выдаёт но рисовать на отрез отказывается.Уж два месяца над бьюсь и всё никак!
Ёще раз прошу извинить меня за это недоразумение,которое я надеюсь не помешает дальнейшей работе.
Ошибки - это обычное дело в программировании. Давайте для начала разберёмся с условием:
Как правильно это понимать? ADX_Final > ADX_Final+1 && ADX_Final >25
А индикатор сделать - это пара пустяков. Если у Вас есть вопросы, выкладывайте их здесь.
Но конкретизируйте, пожалуйста, постановку задачи. Одно дело дополнить индикатор, отражаемый в подокне графикой, выводимой в основное окно, другое дело вместо этого сделать индикатор, индикаторные линии которого выводятся в основное окно.
ADX_Final это значение индикатора на последнем сформировавшемся баре,то есть после закрытия оного.Следовательно, ADX_Final+1 это значение на предпоследнем баре.Ещё есть в коде такие параметры,как DI+ Final и DI- Final .Используем их для определения направления цены и положения сигнала относительно бара.А именно: если ( DI+ Final > DI- Final ) то цена идёт вгору и индикатор должен рисовать точечку под свечей (*по принципу Parabolic Sar ). И наоборот - если ( DI- Final > DI+ Final ) то преобладают медведи и сигнал малюем над баром.ADX_Final > 25 означает,что бывшая линия ADX пересекла уровень 25.И получаем следующее : сигнал появляется только при росте ADX_Final но после прохождения уровня 25.
Ну и раз уж вы разрешаете задавать вопросы,тогда получайте:
1).Какой момент времени показывает этот расчет ADXFinal[i] = alpha2*ADXLead[i] +(1-alpha2) * ADXFinal[i+1]; *? В смысле это сейчас,вчера...
2).Что значит for(int i = 0; i < limit; i++)*? Почему i бывает больше или меньше limit ? Почему иногда i++ а в некоторых случаях i-- *и как определить правильные параметры ?
Цитата(Sedoy @ Jan 16 2009, 05:09 AM) 16753"]
ADX_Final это значение индикатора на последнем сформировавшемся баре,то есть после закрытия оного.Следовательно, ADX_Final+1 это значение на предпоследнем баре.Ещё есть в коде такие параметры,как DI+ Final и DI- Final .Используем их для определения направления цены и положения сигнала относительно бара.А именно: если ( DI+ Final > DI- Final ) то цена идёт вгору и индикатор должен рисовать точечку под свечей (*по принципу Parabolic Sar ). И наоборот - если ( DI- Final > DI+ Final ) то преобладают медведи и сигнал малюем над баром.ADX_Final > 25 означает,что бывшая линия ADX пересекла уровень 25.И получаем следующее : сигнал появляется только при росте ADX_Final но после прохождения уровня 25.
Ну и раз уж вы разрешаете задавать вопросы,тогда получайте:
1).Какой момент времени показывает этот расчет ADXFinal[i] = alpha2*ADXLead[i] +(1-alpha2) * ADXFinal[i+1]; *? В смысле это сейчас,вчера...
2).Что значит for(int i = 0; i < limit; i++)*? Почему i бывает больше или меньше limit ? Почему иногда i++ а в некоторых случаях i-- *и как определить правильные параметры ?
Я уже говорил раньше в разных форумах.. Форекс - вовсе не для заработков. Это - хорошее средство для собственного развития. Пожалуйста, не воспринимайте это высказывание как нудное назидание. Это действительно самое ценное из всего явления. Просто на некоторой стадии это становится самоочевидным.
Давайте посмотрим что Вы пишете.
1. Вот, с ADX_Final > 25 понятно.
2. Но обратите внимание, DI+ Final не может быть меньше (или равно) DI- Final по определению, имея ввиду, что Final (видимо, имеется ввиду ADX_Final) всегда больше 0.
3. >>Какой момент времени показывает этот расчет ADXFinal[i] = alpha2*ADXLead[i] +(1-alpha2) * ADXFinal[i+1]; *?
Этот расчёт показывает любой момент времени для i-го бара. Чтобы это правильно понять, необходимо чётко представлять метод индексации баров, принятый в MQL 4. См здесь http://book.mql4.com/ru/variables/arrays , рис 61 и 62.
4. >> .Что значит for(int i = 0; i < limit; i++)*? Почему i бывает больше или меньше limit ? Почему иногда i++ а в некоторых случаях i-- *и как определить правильные параметры ?
Это - заголовок оператоа цикла. Это базовая конструкция любого языка программирования. Переменная i в данном случае - это такая переменная, которая увеличивается на каждой итерации (после каждого прохождения алгоритма тела цикла) на 1. Подробнее о циклах здесь http://book.mql4.com/ru/operators/for .
Замечание общего характера.
1. Энергетическая ценность знания содержания стратегии на два порядка больше энергетической ценности знания средств программирования. Иными словами, если "разработчик стратегии" не владеет программированием, то не может быть и речи о том, что он в состоянии составить сколько-нибудь работающую стратегию. Положительно полагается, что разработчик стратегии - это специалист как минимум владеющий программированием и предсталяющий основные закономерности развития рынка. Тогда, если он к тому же владеет основами мат. анализа, у него есть ма-а-аленький шанс получить некоторый осмысленный результат в поектировании стратегии.
2. Если появятся вопросы по языку программирования MQL 4, то, пожалуйста, откройте новую ветку и задавайте любые вопросы.
PS Возникает естественный вопрос: а что же (при этих подробностях) мы вообще тут делаем? Ответ очевиден - мы пытаемся назвать вещи своими именами. Для нас это значит - быть честными по отношению к клиентам. Для клиентов это значит получить шанс осмыслить происходящее ещё до полного слива депозита:)
2. Но обратите внимание, DI+ Final не может быть меньше (или равно) DI- Final по определению, имея ввиду, что Final (видимо, имеется ввиду ADX_Final) всегда больше 0.
ADX_Final действительно всегда больше нуля,потому что это значение по модулю.Другое дело,что ADX и DMI или DI+ DI- это два разных индикатора,которые слепили в кучу из целесообразности.Не скажу на 100%,но по моему ADX это разница между DI+ и DI- .Когда разница увеличивается,- ADX растёт.В конце концов ваши слова можно опровергнуть только лишь взлянув на индикатор.Там четко и ясно видно,что большим значение может быть как DI+ ,так и DI- ,и от ADX они абсолютно никак не зависят.
По поводу владения програмированием пусть каждый останется при своём мнении,потому как ваши слова мягко говоря обидны.Скажу лишь,что поскольку я не считаю себя профи,а всего лишь идущий,то не стал изобретать велосипед по новой,а довольно успешно пользуюсь общеизвестными приёмами.С той лишь разницей,что каждый видит рынок по своему,значит и результат будет разным.
Ещё раз хотел бы уточнить,что абсолютно никаких новых вычислений я не прошу.Всё что нужно,это заменить DRAW_LINE на DRAW_ARROW.
Цитата(Sedoy @ Jan 22 2009, 07:35 PM) 16873"]
2. Но обратите внимание, DI+ Final не может быть меньше (или равно) DI- Final по определению, имея ввиду, что Final (видимо, имеется ввиду ADX_Final) всегда больше 0.
ADX_Final действительно всегда больше нуля,потому что это значение по модулю.Другое дело,что ADX и DMI или DI+ DI- это два разных индикатора,которые слепили в кучу из целесообразности.Не скажу на 100%,но по моему ADX это разница между DI+ и DI- .Когда разница увеличивается,- ADX растёт.В конце концов ваши слова можно опровергнуть только лишь взлянув на индикатор.Там четко и ясно видно,что большим значение может быть как DI+ ,так и DI- ,и от ADX они абсолютно никак не зависят.
По поводу владения програмированием пусть каждый останется при своём мнении,потому как ваши слова мягко говоря обидны.Скажу лишь,что поскольку я не считаю себя профи,а всего лишь идущий,то не стал изобретать велосипед по новой,а довольно успешно пользуюсь общеизвестными приёмами.С той лишь разницей,что каждый видит рынок по своему,значит и результат будет разным.
Ещё раз хотел бы уточнить,что абсолютно никаких новых вычислений я не прошу.Всё что нужно,это заменить DRAW_LINE на DRAW_ARROW.
Напрасно Вы восприняли мои слова как обидные. Эт всегда со мной так бывает. Когда человеку говоришь, что его рассуждения ошибочны, он вопринимает это как личную обиду.
Ладно. Давайте формально. Вот, Вы пишете:
Ещё есть в коде такие параметры,как DI+ Final и DI- Final .Используем их для определения направления цены и положения сигнала относительно бара.А именно: если ( DI+ Final > DI- Final ) то цена идёт вгору и индикатор должен рисовать точечку под свечей ( по принципу Parabolic Sar ).
Таких параметров в коде нет.
А то, как это читается на форуме, выглядит как А+Б > А-Б. Если и в правой и в левой части А сократить, то останется Б > -Б. Сами понимаете, что-то тут не так с логикой.
Предлагаю Вам уточнить параметры.
Всё дело в том,что DI+ Final*это одно единое целое.Тоесть это не сложение DI+ плюс Final.Слово Final в данном случае означает,что конечное значение оригинального индикатора ADX (который состоит из трёх значений : DI+ ; DI- ; ADX .)DI+ подверглось сглажеванию.Что можно подтвердить кодом DiPlusFinal[i] = alpha2*DIPlusLead[i] +(1- alpha2)*DiPlusFinal[i+1]; Тобишь условие DI+ Final > DI- Final равно условию DI+ > DI- с той лиш разницей,что первый вариант подвергся сглажеванию,а во втором значения остались неизменными(как в самом терминале).А теперь на пальцах,чтобы больше к этим уточнениям не возвращаться.В оригинале есть А=... , В=... ,С=... *.В нашем варианте добавилось
A плюс Final = ADX_Final;
B плюс Final = DiPlusFinal[i]
C плюс Final = DiMinusFinal[i]
Для простоты написания я написал DI+ Final вместо*DiPlusFinal[i],потому как решил,что вы будете разбираться в коде.И так как я не програмист,то презнаю,что вводил вас в заблуждение.
Надеюсь теперь всё понятно,и я жду не дождусь,когда же ...
Вот, пожалуйста:
[attachment=5331:ADX_Smoothed_3.mq4]
Крестик ставится по условию: DiPlusFinal[i] > DiMinusFinal[i] && ADXFinal[i] > 25
Это значит, что крестик ставится когда синяя линия выше красной и кроме того зелёная выше уровня 25.
Надеюсь, это то, что Вы хотели.
Цитата(SK_ @ Jan 23 2009, 06:00 PM) 16901"]
Вот, пожалуйста:
[attachment=5331:ADX_Smoothed_3.mq4]
Крестик ставится по условию: DiPlusFinal[i] > DiMinusFinal[i] && ADXFinal[i] > 25
Это значит, что крестик ставится когда синяя линия выше красной и кроме того зелёная выше уровня 25.
Надеюсь, это то, что Вы хотели.
Видете ли,дело в том,что на рынке не всегда бычий тренд.Поэтому меня в равной степени интересует и DIMinus[i] >*DiPlusFinal[i] .И вы уж простите,но я просил подавать сигнал только при росте зелёной линии.(пост номер 10).Ещё я написал,что сами линии мне абсолютно не нужны(пост номер 8).И всё таки очень вас прошу,сделайте подаваемый сигнал по подобию Parabolic SAR.Цвета цветами,а визуально оно действительно намного легче воспринемается.(вложение с поста номер 8).Надеюсь,я не слишком наглый,иначе какой был смысл во всём этом?
Пытался разобраться со своими вопросами,ответы на которые вы мне показали.Правдами и не правдами дошло,что ADXFinal[i] = alpha2*ADXLead[i] + (1 - alpha2) * ADXFinal[i+1]; расчитывает настоящий момент времени,но сглажевание происходит с учетом значения*ADXFinal c предыдущего бара.Отсюда логичный вопрос.Как тогда расщитать ADXFinal[i] для предыдущего бара?
Я не знаю что для вас легче,-переделать то что есть,дописать чего своего,или сделать новое.Но вот в моём случае доступна пока только переделка.Могу сказать с 95% уверенностью,что проблема лежит в моём втором вопросе,а именно в for(i = limit; i >= 0; i--).И как не обидно признавать,но победить это я никак не могу.Но знаю,что собака зарыта здесь!Если в этом коде я использую значения обычные,а не сглаженные,то всё отлично работает,но как только дописываю этот Final-кирдык.
ОК. Постараюсь сделать сегодня вечером. Давайте повторим задание.
1. Метки отображаются только если Зелёная растёт.
2. Отображаются баёвые и селловые метки (соотв. синяя выше красной и наоборот).
3. Подокно индикатора не отображать.
4. Метки отображаются если Зелёная выше уровня 25.
Уточните пожалуйста, если есть ещё условия.
Цитата(SK_ @ Jan 25 2009, 10:12 AM) 16919"]
ОК. Постараюсь сделать сегодня вечером. Давайте повторим задание.
1. Метки отображаются только если Зелёная растёт.
2. Отображаются баёвые и селловые метки (соотв. синяя выше красной и наоборот).
3. Подокно индикатора не отображать.
4. Метки отображаются если Зелёная выше уровня 25.
Уточните пожалуйста, если есть ещё условия.
Всё абсолютно верно!!!
Цитата(Sedoy @ Jan 25 2009, 05:21 PM) 16922"]
Всё абсолютно верно!!!
Вот. Вроде бы получилось.
[attachment=5334:ADX_Smoothed_4.mq4]
[attachment=5335:5.png]
Цитата(SK_ @ Jan 26 2009, 02:59 AM) 16925"]
Вот. Вроде бы получилось.
[attachment=5334:ADX_Smoothed_4.mq4]
[attachment=5335:5.png]
Просто супер!!!Именно то,что нужно.Большое человеческое спасибо за терпение и помощь.
Здравствуйте уважаемые форумчане.
Хорошая тема, позвольте и мне предложить вашему вниманию один интересный, на мой взгляд, индикатор. HAalert - данный индикатор относится к разряду сигнальных, но верить ему на 100 процентов нельзя, необходимы дополнительные инструменты для полноценного анализа. Данный индикатор стрелками показывает точку входа для открытия сделки. Так-же есть и звуковой сигнал. (рис.1)
Стандартным недостатком этого индикатора является то, что пока свеча не закрылась, сигнал может появляться и исчезать несколько раз. Хотелось бы данный недостаток отстранить, чтобы сигнал появлялся (стрелка) только после закрытия свечи и звуковой сигнал тоже (рис.3), но пока свеча не закрылась, а цена или точка перелома, на данной свече была достигнута, появится символ №5. (рис.2).
Очень большая просьба довести данный индикатор до приличного употребляемого состояния. :о)
С уважением,
Сергей.
Fx indicators
21-02-2009, 11:58
Могу подкинуть несколько хороших индикаторов.
Powered by vBulletin® Version 4.1.8 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.