Форум » Индикаторы » Некоторые вопросы, которые не вошли в отдельные ветки » Ответить

Некоторые вопросы, которые не вошли в отдельные ветки

hoz: Появились некоторые вопросы касательно индикаторов. В отдельные топики их судя по всему помещать не вариант. Потому создаю эту ветку. Здесь можно будет обсуждать вопросы, которые не принадлежать конкретным направлениям. Прошерстив статью Новый ZigZag я качанул индикаторы прикрепленные к данной статье. Касательно, прорисовки индикатора всё понятно. Но появились некоторые вопросы, сопутствующие этой теме. О них я и буду говорить. Возьмём, например, индикатор NeoZigZag_Close.mq4. Вот скрин первого попавшегося инструмента на который я накинул индюк с описанной задачей NeoZigZag_Close.mq4: Я так понимаю, для реализации этой задачи нужно добавить отдельный буфер в индикатор и отдельную функцию для отрисовки этих линий. Вызывать эту функцию после основной функции получающей экстремумы. И в том же СТАРТЕ вызывать её, верно? Просто я думаю, как правильно всё это реализовать. Т.к. мне нужно чтоб эти уровни брались только с баров, которые находятся на графике в пределах видимости. Ну или на определённое количество баров назад. А остальные не актуальны. Вопросы возникают т.к. я с индикаторами вообще не работал до сего времени. Но решил освоить данную тему. Т.к. есть интерес.

Ответов - 105, стр: 1 2 3 4 5 6 7 All

Scriptong: hoz пишет: Я так понимаю, для реализации этой задачи нужно добавить отдельный буфер в индикатор и отдельную функцию для отрисовки этих линий. Индикаторы типа ZigZag отображаются при помощи одного индикаторного буфера. Но это справедливо только для тех случаев, когда на одной свече точно не будет двух противоположных экстремумов индикатора. Универсально же потребуется два буфера: отдельно для High и отдельно для Low. Причем в этом случае стиль рисования нужно выбирать DRAW_ZIGZAG, а буферы сделать соседними по индексу (пример в PercentageZigZag). Формирование экстремумов ZigZag лучше производить в отдельном цикле, а поиск и обработку экстремумов производить после этого: int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { int total; int limit = GetRecalcIndex(total, rates_total, prev_calculated); // С какого бара начинать обновление? CalcIndicatorData(limit, total); // Отображение данных индикатора return rates_total; } void CalcIndicatorData(int limit, int total) { // Определение экстремумов ZZ for (int i = limit; i >= 0; i--) { g_highZZ[ i ] = ...; g_lowZZ[ i ] = ...; } // Поиск последних экстремумов for (int i = limit; i >= 0; i--) { if (g_highZZ[ i ] != EMPTY_VALUE) { // Найден максимум ZZ } if (g_lowZZ[ i ] != EMPTY_VALUE) { // Найден минимум ZZ } } } Если выделять нужные экстремумы хочется именно горизонтальными линиями, то лучше использовать для этого графический объект OBJ_TREND. С буферами индикатора в этом случае ничего не выйдет - нет таких стилей рисования. Ценовые координаты линии будут равны (что даст горизонталь), а координаты времени поставить отличающимися на один бар. Если оставить свойство "Луч", то линия будет продолжаться вправо по графику до бесконечности.

hoz: Scriptong пишет: Если выделять нужные экстремумы хочется именно горизонтальными линиями, то лучше использовать для этого графический объект OBJ_TREND. Ну а как же иначе? Не кружками же их выделять то Конечно, прямыми. Scriptong пишет: С буферами индикатора в этом случае ничего не выйдет - нет таких стилей рисования. Хм. Про буферы я и не думал. Ведь тут значения не загонишь в буфер. Я не в курсе как бы их пришлось считать, чтоб прямые вышли. По-любому, нада рисовать объект от одной координаты к другой. Игорь, мне вот интересно. Почему у стиля рисования DRAW_LINE 1 бфер, а у DRAW_ZIGZAG 2 буфера? Ведь и там и там по сути непустые значения соединяются линиями. Разве не так?

Scriptong: hoz пишет: Почему у стиля рисования DRAW_LINE 1 бфер, а у DRAW_ZIGZAG 2 буфера? Ведь и там и там по сути непустые значения соединяются линиями. Разве не так? Еще раз. Два буфера позволяют организовать наличие двух экстремумов на одной свече. С одним буфером такое не получится. Кроме того, здесь приведено некорректное сравнение. При стиле DRAW_LINE не происходит соединение линиями между непустыми значениями. Там, где пусто, будет просто провал. Непустые значения соединяются стилем DRAW_SECTION. Но он подходит только для случаев наличия не более одного экстремума на свече.


hoz: Scriptong пишет: Еще раз. Два буфера позволяют организовать наличие двух экстремумов на одной свече. С одним буфером такое не получится. Ну это понятно, разумеется. Но я пока что с одним буфером пробую. Я взял Ваш индикатор NeoZigZag_Close и написал дописал в него функцию отрисовки линий. Но при компиляции ошибка: 'ObjectCreate' - ambiguous call to overloaded function NeoZigZag_Close.mq4 200 9 Какова может быть причина? Индюк с дописанной функцией прилагаю. Индикатор

Scriptong: hoz пишет: 'ObjectCreate' - ambiguous call to overloaded function NeoZigZag_Close.mq4 200 9 У функции ObjectCreate есть два варианта реализации. Первый: bool ObjectCreate( long chart_id, // идентификатор графика string object_name, // имя объекта ENUM_OBJECT object_type, // тип объекта int sub_window, // индекс окна datetime time1, // время первой точки привязки double price1, // цена первой точки привязки ... datetime timeN=0, // время N-точки привязки double priceN=0 // цена N-точки привязки ); Второй: bool ObjectCreate( string object_name, // имя объекта ENUM_OBJECT object_type, // тип объекта int sub_window, // индекс окна datetime time1, // время первой точки привязки double price1, // цена первой точки привязки datetime time2=0, // время второй точки привязки double price2=0, // цена второй точки привязки datetime time3=0, // время третьей точки привязки double price3=0 // цена третьей точки привязки ); Ваш вариант вызова не подходит ни под одно из описаний. Правда, больше он смахивает на второй вариант, но в таком случае нужно в четвертом параметре указать время (у Вас указана цена), в пятом - цену (у Вас указано время), в шестом - время (у Вас - цена), в седьмом - цену (у Вас - время).

hoz: Ну это да. Я затупил. Недочёт исправил. Объект рисуется только один в начале графика и всё. Какова причина? Блок рисования вот (новый вариант): //+-------------------------------------------------------------------------------------+ //| Прорисовка уровней от Зиг-Зага | //+-------------------------------------------------------------------------------------+ void DrawLines (int limit) { for (int i = limit; i > 0; i--) { if (ZZBuf != EMPTY_VALUE) ObjectCreate ("MyLine", OBJ_TREND, 0, Time, Low, Time[1], Low); } } Рисуется луч в начале истории: Дальше никаких объектов не рисуется. Хотя я по циклу перебираю "непустые значения" буфера ZZBuf[] Вот индикатор

Scriptong: hoz пишет: Дальше никаких объектов не рисуется. Хотя я по циклу перебираю "непустые значения" буфера ZZBuf[] Вы постоянно создаете один и тот же объект (имя то у него не меняется). В итоге после нахождения первого экстремума ZZ остальные экстремумы ничем не отмечаются - ObjectCreate вернет ошибку "объект с таким именем уже существует". Чтобы объекты создавались для каждого экстремума, необходимо давать уникальные имена каждой линии. К примеру, в имена объектов можно записывать время формирования экстремума. Этот способ подойдет в тех случаях, когда на одном баре не может быть более одного графического объекта, созданного индикатором. В противном случае потребуется дополнительная идентификация объектов. Например, по номерам на одном баре. Для примера посмотрите, как реализовано различие объектов в индикаторе ClusterBox (Вертикальное сечение рынка). Функция ShowBarHistogramms, в которой вызывается функция ShowText.

zvzik: Добрый вечер! Давно не заходил. Возникли некоторые вопросы к Скриптонгу по поводу его старых работ. Есть у вас советник фрактальная сетка с фрактальным индикатором. Я иногда его применяю для входов. Так вопрос---почему вы выбрали в советнике стоповые а не лимитные отложеные ордера? У меня по индикатору гораздо успешнее срабатывают лимитники. дА И В ЛИМИТНИКОВ СТОПЫ КОРОЧЕ. Если можно переделате под лимитники самого эксперта. На индикаторе показал как вхожу. http://file.qip.ru/file/7hBZZcF1/RFractals_EditS.html cова http://file.qip.ru/file/cK_tgg3X/FractalGrid_Expert.html

Scriptong: zvzik пишет: почему вы выбрали в советнике стоповые а не лимитные отложеные ордера? Наверняка не смогу обосновать, т. к. дело было три года назад, но, скорее всего, потому, что мала вероятность повторения именно этой цены с тем, чтобы рынок отскочил от нее. Ведь заметьте, что после формирования фрактала для его подтверждения должно образоваться определенное количество баров (для Вашего примера при периоде фрактала 13 должно образоваться 6 баров, чтобы можно было зарегистрировать фрактал - см. рис.). Красной линией отмечен бар, на открытии которого становится виден верхний фрактал, а синей линией - нижний фрактал. Цена верхнего фрактала в пределах рисунка не достигнута, а цена нижнего достигнута, но рынок пошел ниже этого уровня. Выходит, что Sell Stop здесь логичнее, чем Buy Limit.

zvzik: Scriptong пишет: Здрасте. Сидел ковырял и экспериментировал с этой совой.....пока не порадовала. НО!!!! я раньше работал с похожим фрактальным индикатором на 5-15мин. Называется он Казахский удав. В нем я сделал свои настройки....выкладываю...и ставил на 15мин. При появлении всез трех линий ZZ входил на отбой с коротким стопом. Закривал позицию по стопу 30-35 пипсов или при профите и появлении линии(значка)среднего зигзага. Система давала отличные результаты, но требует все время сидеть у монитора. Думаю условия для совы примитивные. Если можно напишите. И просьба-вопрос....как обозначить в коде (None) чтоб не отображался элемент. Я не знаю и поэтому на черном фоне окрашиваю его в черный цвет. http://file.qip.ru/arch/frt6bnpT/F%20%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5.htmhttp://file.qip.ru/photo/mqF4_8Qa/NZDUSDM1.html

Scriptong: zvzik пишет: Здрасте. Сидел ковырял и экспериментировал с этой совой.....пока не порадовала. НО!!!! я раньше работал с похожим фрактальным индикатором на 5-15мин. Называется он Казахский удав. В нем я сделал свои настройки....выкладываю...и ставил на 15мин. При появлении всез трех линий ZZ входил на отбой с коротким стопом. Закривал позицию по стопу 30-35 пипсов или при профите и появлении линии(значка)среднего зигзага. Система давала отличные результаты, но требует все время сидеть у монитора. Думаю условия для совы примитивные. Если можно напишите. Добрый день. Я так понимаю, поднятый вопрос мало перекликается с текущей темой. Потому лучше бы вынести его в отдельную тему. Тем более, что пока по вопросу очень мало информации. Кроме того, советник может быть написан, если он реально интересен и не является откровенным трэшем (пока складывается именно такое впечатление, судя по Вашему же отзыву о нем). zvzik пишет: И просьба-вопрос....как обозначить в коде (None) чтоб не отображался элемент. Если речь о цвете, то clrNONE.

Эдуард: Здравствуйте, Игорь. Скажите пожалуйста, как правильно рассчитывать СЛ по ATR ?

Scriptong: На рынке нет понятий "правильно" и "неправильно". Есть подходы, которые приносят прибыль на одном историческом промежутке, а есть другие подходы, которые дают положительный результат на другом временном интервале. Универсального подхода не существует. Один из подходов к расчету стопов по ATR смотрите в статье "Летучая мышь".

Эдуард: Индикатор DivergenceViewer_AD может так определять диверы? Можно сделать, чтобы индикатор, не рисовал двойные, тройные дивергенции? Если появляется второй сигнал на том же промежутке, то один удаляется - остаётся самый сильный. Если сильный уже есть - слабые не появляются. Можно сделать настраиваемый угол схождения/расхождения, между индикатором и ценой? Чтобы отсечь слишком маленькую разницу.

Scriptong: Эдуард пишет: Индикатор DivergenceViewer_AD может так определять диверы? Так, как показано на рисунке, нет. Дело в том, что на ценовом графике одна, а может даже и две, свечи ценами закрытия выходят за пределы опорной линии. Эдуард пишет: Можно сделать, чтобы индикатор, не рисовал двойные, тройные дивергенции? Если появляется второй сигнал на том же промежутке, то один удаляется - остаётся самый сильный. Если сильный уже есть - слабые не появляются. Можно. Только нужен алгоритм определения силы той или иной дивергенции. Эдуард пишет: Можно сделать настраиваемый угол схождения/расхождения, между индикатором и ценой? С углами на графиках МТ4 и МТ5 проблема - они зависят от масштаба. То есть в одной и той же ситуации один и тот же угол визуально будет иметь разную величину. Хотя при математических расчетах угла (по тангенсу, он же коэффициент К при расчете уравнения прямой) эта величина будет однозначно определенной, не зависящей от масштаба графика. К примеру, расчетный угол составит 30 градусов, а визуально он может быть виден и как 15 градусов, и как 70.



полная версия страницы