Форум » Консультации по программированию » Template_Lines_Color_Expert и FastTMA Line » Ответить

Template_Lines_Color_Expert и FastTMA Line

Genry: День добрый, Scriptong! Периодически возвращаюсь к изучению MQL и часто налетаю на одну и туже кочку - запаздывание при открытии позиции. Вроде на графике и на рисунках тестера индикатор своевременно отслеживает ситуацию, а при открытии позиции ордер выставляется значительно позже. Вот очередная заковыка: индикатор FastTMALine очень привлекательно рисует центральную 3-х цветную линию, где красный участок - медвежий, зеленый - бычий, а белый соответствует флету. Я взял за основу Template_Lines_Color_Expert и сделал советника. Целью было даже не торговать по FastTMALines, а отработать ее сигналы по смене тренда. Логика такая: выставляем ордер при появлении краного или зеленого цвета, закрываем при смене цвета или появлении белого цвета. FastTMALine красиво рисует на графике, так что в тестере надеялся получить как минимум безубыток вместо которого постоянно рисуется http://f4.s.qip.ru/NYzSvWel.png Валюта UsdJpy m15 пятизнак, параметры торговли выставлены как параметры ЕА. TP, SL нет - вход и выход по сигналам индикатора. Сделал запись всех сигналов в лог, вроде логика работает верно, а ордера выставляет поздно. Может это какой-то общеизвестный факт, типа задержки с периодом, но здесь я читаю сигналы индюка, который уже цвет сменил.... Игорь, взгляните, пожалуйста, в чем может быть проблема? Индикатор и советник в прицепе FastTMALine_EA. Спасибо!

Ответов - 55, стр: 1 2 3 4 All

Genry: Scriptong пишет: Недавно мы с Вами уже говорили о подобной проблеме. Только не могу вспомнить, в какой теме. Я тоже помню и думал что именно про этот индикатор, но здесь диалога не нашел Если нужно, могу такой вариант сделать, но он решит лишь проблему правильного отображения. Думаю это будет интересно в плане обучения к теме "Как создать индикатор, не обладая навыками программирования", мне уж точно интересно И хотелось бы понять как в таких случаях быть в советниках. Т.е. смена цвета - понятный сигнал, Вы его рассматривали как пример. Но если расчет идет правильно, а в буфер информация пишется с ошибками, как тогда быть? Втаскивать в советник чтобы избежать передачи информации через индикаторный буфер? Более простое решение визуализации - перейти со сплошной линии на отдельные графические элементы. Вот так. Спасибо, Игорь! Сейчас буду смотреть

Scriptong: Genry пишет: Я тоже помню и думал что именно про этот индикатор, но здесь диалога не нашел Диалог пока не нашел, но нашел последний индикатор, в котором я эту проблему решал. Это цикл статей "Историческая волатильность". В первой части статьи индикатор был сделан с учетом решения этой проблемы, но проблема ушла не полностью. Во второй части статьи проблема решена окончательно. Смотреть функцию SetIndicatorLineColor обоих индикаторов. Genry пишет: Но если расчет идет правильно, а в буфер информация пишется с ошибками, как тогда быть? Поправка - правилен не только расчет, но и запись в буфер. То есть советник интерпретирует сигналы правильно. Главное, написать в коде правильные условия для проверки. Проблема именно в отображении данных. Заключается эта проблема в следующем. Нужно отобразить линию между барами 1 и 2, между 2 и 3 не отображать линию, а между 3 и 4 - снова отображать: Получаем следующую коллизию: значения линии на барах 2 и 3 должны присутствовать, чтобы линия была проведена между барами 1 и 2, 3 и 4, но в то же время эти значения должны отсутствовать для того, чтобы линия между барами 2 и 3 не отображалась. Получается, что погасить линию между барами 2 и 3 в такой ситуации невозможно при работе с одним буфером. Решение - разнести отображение линий на два буфера. Один буфер отображает линию 1-2, а второй - 3-4.

Genry: Scriptong пишет: Это цикл статей "Историческая волатильность". В первой части статьи индикатор был сделан с учетом решения этой проблемы, но проблема ушла не полностью. Во второй части статьи проблема решена окончательно. Смотреть функцию SetIndicatorLineColor обоих индикаторов. Отлично! Спасибо, Игорь, теперь буду изучать решение. Scriptong пишет: Поправка - правилен не только расчет, но и запись в буфер. То есть советник интерпретирует сигналы правильно. Главное, написать в коде правильные условия для проверки. Проблема именно в отображении данных. Да, решение нетривиальное


Genry: Игорь, день добрый! А можно разобрать еще один пример. Если есть потребность слить два индикатора, т.е. я не хотел бы вызывать azzx_ema_rsi_1_0clr_edit через iCustom из другого индикатора, а вызывать его как внутреннюю функцию RSIU= AZZX_EMA_RSI(Period, 0, i); // iCustom(0, 0,"azzx_ema_rsi_1_0clr_edit", Period, 0, i); RSID= AZZX_EMA_RSI(Period, 1, i); // iCustom(0, 0,"azzx_ema_rsi_1_0clr_edit", Period, 1, i); Что необходимо для этого изменить ? Есть какой-то общий алгоритм, или подход, преобразования индикатора в функцию? Не очень понятен такой момент: индикатор инициализирует и заполняет свой буфер данными на истории, потом - по мере поступления тиков. А когда он вызывается внутри, его надо инициализировать отдельно - например в блоке init() или заполнение данными идет при обращении к нему, когда есть потребность в его данных? Если можно - на примере вызова подопытного azzx_ema_rsi_1_0clr_edit

Scriptong: Genry пишет: Есть какой-то общий алгоритм, или подход, преобразования индикатора в функцию? Нет, общего алгоритма не существует. Другое дело, что сделать можно. Такой подход позволит сэкономить оперативную память, но взамен он не будет давать возможность доступа ко всем значениям индикатора одновременно. Так, если от индикатора требуется последовательный доступ к значениям на барах 5, 4, 3, 2, 1, 0 и далее 0, 0, 0, то скорость расчета будет одинаковой как в случае с вызовом индикатора через iCustom, так и через функцию. Но если нам потребуетс произвольный доступ (5, 100, 12, 15, 10, 200 бары), то вариант с функцией будет заметно медленнее, т. к. при каждом новом вызове будет производиться расчет всех значений с начала истории до указанного бара. Описанный недостаток характерен именно для индикаторов, которые рассчитывают данные на основании предыдущих своих данных. Те индикаторы, которым предыдущее свое значение не нужно (например, простое среднее), переделываются в функцию проще.

Genry: Scriptong пишет: Описанный недостаток характерен именно для индикаторов, которые рассчитывают данные на основании предыдущих своих данных. Те индикаторы, которым предыдущее свое значение не нужно (например, простое среднее), переделываются в функцию проще. Вот оно как. Неожиданно. Я то думал, что когда код в одной упаковке это существенно увеличивает скорость. Scriptong пишет: если от индикатора требуется последовательный доступ к значениям на барах 5, 4, 3, 2, 1, 0 и далее 0, 0, 0, то скорость расчета будет одинаковой как в случае с вызовом индикатора через iCustom Понятно, правда энтузиазма предыдущий пункт все же поубавил Хотелось понять сам процесс. Игорь, если в обозримом будущем будет время расскажите, пожалуйста, в образовательных целях, как урезать AZZX до функции. Надеюсь, он подходит для примера?

Scriptong: Genry пишет: Хотелось понять сам процесс. Игорь, если в обозримом будущем будет время расскажите, пожалуйста, в образовательных целях, как урезать AZZX до функции. Надеюсь, он подходит для примера? Да, подходит. Это достаточно простой пример. Основная нагрузка пойдет на обвязку функции.

Scriptong: Вот готовый исходник (сервер gfile.ru сейчас недоступен, потому пришлось искать другой). В пределах начальной истории этот индикатор ведет расчет правильнее, чем оригинал (у того на этой истории значения больше 100%). Чем ближе к текущей дате, тем расхождения показаний между индикаторами ниже, пока вовсе не сводятся к нулю. Пока не описываю работу кода, т. к. надеюсь, что код написан достаточно понятно. По непонятным моментам жду вопросы.

Genry: Scriptong пишет: Вот готовый исходник (сервер gfile.ru сейчас недоступен, потому пришлось искать другой). Вау ! Спасибо, Игорь! Сейчас буду изучать код, а потом расскажу с чем связаны эти изыскания, может что-то окажется интересным

Genry: Об изысканиях На тему статистики был ряд полезных статей. Подход достаточно универсальный и все-равно что анализировать: цену, объемы, тики. Когда я обдумывал применение асимметрии, наработок по объемам еще не было. Исследуя асимметрию, мы убедились, что если она возникла, то ее появление - опережающий сигнал ценового движения. Недостаток - направление движения не указывается, по сути асимметрия - потенциальная энергия рынка, а куда двинет кинетическая ... Cейчас мы прорабатываем использование объемов и надеюсь это будет наиболее точный указатель. Полтора года назад в статье Вы, Игорь, применили МА (что тогда дало вполне приличный результат). Я решил попробовать для этой цели RSI, но не считать асимметрию по цене и направление смотреть по RSI, а считать асимметрию на показаниях RSI. По сути, график, на котором стоится RSI, будет повторять собой ценовые графики, но будет несколько сглажен. Указанные на нем минимумы RSI будут соответствовать ценовым минимумам, а максимумы RSI – ценовым максимумам. Расчет асимметрии по RSI дает возможность выставлять ордер ближе к началу движения. Остался самый важный вопрос - направление будущего движения Чтобы получить ответ я начал считать асимметрию отдельно для Up и Down буфера RSI. Пересечения двух кривых и их экстремумы стали сигналами открытия позиций. Но сигналы были слишком частые и чтобы уменьшить это количество пришлось кривые сгладить. Картинка получилась вот такая, направление тренда показывает кривая идущая вниз, т.е. снизу зеленая - бай. На скрине ниже отображены индикаторы, которые обсуждались в этой ветке: ADRSI (если пересекает уровень +10 - бай, -10 - селл), асимметрия RSI и асимметрия на базе двухцветного RSI Lebo. На индикаторе асимметрии RSI Lebo 4 линии: тонкие красная и зеленая - это асимметрия буфера Up и Down RSI, толстые - сглаженная асимметрия буфера Up и Down RSI. По сути работают как быстрая и медленная линии и их пересечения, только сигнал растет на движении вниз,т.е. уменьшении показателя асимметрии. Более ранний сигнал дают не пересечения сглаженных линий, а их экстремумы. Еще более ранний - когда быстрая линия пересекает медленную, а затем фиксируется экстремум. Результат работы очень простого советника только на сигналах асимметрии RSI Lebo. ТФ = D1, период - 3 года, стартовый капитал 500$, лот 0.01 с 2007 года тест тоже проходит без слива. Все на обычных пересечениях, вот определение сигнала бай (открытие и закрытие): // - 2 - ============================ Генерация сигнала Buy ============================= if ((RSIs_Up1 < RSIs_Up2)&&(RSIs_Up1 < RSIm_Up1)) { //быстрая линия buy направлена вниз и ниже медленной линии if ((RSIs_Up2 > RSIm_Up2)) { // и пересекла медленную линию TrendDirection = 1; // направление - бай Signal = 1; // сигнал - покупка } return; } if ((RSIs_Up1 > RSIs_Up2)&&(RSIs_Up1 > RSIm_Up1) && (RSIs_Up2 < RSIm_Up2)) { // быстрая пересекла медленную // снизу вверх if ((TrendDirection == 1)) { // Если до этого направление было восходящим Signal = 2; // закрываем ордер buy TrendDirection = 0; // отменяем сигнал покупки } return; }

Genry: Игорь, и еще некоторое добавление: Уж если асимметрия - опережающий сигнал, а у нас есть тики разделенные на UpTick и DownTick, то может посмотреть как ведет себя асимметрия, эксцесс и критерий Жака-Бера на этих показателях? Пока не знаю, сами тики или показатели индикаторов на тиках лучше подходят для этой цели. Вот кумулятивная дельта или беар-булл-баланс интересны, но они сбрасываются, что для расчета асимметрии - не очень Теоретически на флете должна расти асимметрия, а подход который я показал выше должен дать направление. Плюсом такого подхода является довольно простой анализ данных для принятия решения. А уж насколько это так - надо пробовать

Scriptong: Genry пишет: Уж если асимметрия - опережающий сигнал, а у нас есть тики разделенные на UpTick и DownTick Поправка: у нас есть отдельно база тиков и отдельно алгоритм для выделения в их среде Up и Down тиков (см. Принцип подсчета сил быков и медведей). Причем алгоритм не является сам по себе аксиомой. Возможно, он выбран неправильно. Genry пишет: Пока не знаю, сами тики или показатели индикаторов на тиках лучше подходят для этой цели. Вот кумулятивная дельта или беар-булл-баланс интересны, но они сбрасываются, что для расчета асимметрии - не очень Да, проблема точки отсчета - это вечная проблема. И тут нужно лишь придумывать что-то гениальное, не меньше.

Genry: Genry цитата:Уж если асимметрия - опережающий сигнал, а у нас есть тики разделенные на UpTick и DownTick Scriptong пишет:Поправка: у нас есть отдельно база тиков и отдельно алгоритм для выделения в их среде Up и Down тиков (см. Принцип подсчета сил быков и медведей). Причем алгоритм не является сам по себе аксиомой. Возможно, он выбран неправильно. Но все-равно уж больно лакомый кусок данных - тиковые объемы Если на них возникает асимметрия ( а она уж точно возникает ), то можно получить довольно интересный опережающий торговый сигнал и ничего подобного я не видел в разработках на наших и зарубежных сайтах. По RSI видно насколько раньше движения начинает расти асимметрия.

Scriptong: Genry пишет: Но все-равно уж больно лакомый кусок данных - тиковые объемы Если на них возникает асимметрия ( а она уж точно возникает ) И к бабке не ходи - возникает. Иначе бы рынок просто стоял на месте. Это со временем тоже исследуем.

Genry: Scriptong пишет: Это со временем тоже исследуем. Игорь, первый шаг Вы уже сделали в марте этого года в статье " Асимметрия и объемы" Но в статье подход раздельный: мы смотрим на асимметрию цены и тиковый баланс отраженный в классе BearBullBalance: "Класс BearBullBalance возвращает рассчитанные значения в переменные bullPower и bearPower. Это величины сил быков и медведей соответственно." В случае с RSI я получил рабочие сигналы рассчитав асимметрию отдельно для буфера Up и Down RSI и сгладив их. Интересно, что даст такой подход, если мы отдельно посчитаем асимметрию применительно к bullPower и bearPower



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