Форум » Консультации по программированию » 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

Scriptong: Если под общеизвестным фактом понимать существование перерисовывающихся индикаторов... Было так: А в итоге стало вот так: Как видно, этот индикатор именно такой. Заставляет его перерисовываться вот эта строка: limit=MathMin(limit,Bars-counted_bars+ TMAPeriod * barsPerTma ); То есть, чем больше значение TMAPeriod (по умолчанию 20), тем больше баров будет перерисовываться. В данной ситуации, чтобы быть на 100% уверенным, что индикатор сформировал то, что в последствии будет видно в истории, нужно подождать 20 баров. Поэтому говорить о запаздывании в каких-то 11 баров - смешно

Genry: Scriptong пишет: Если под общеизвестным фактом понимать существование перерисовывающихся индикаторов... Эх, вот оно что! Спасибо, Игорь... А я уже эти несколько строк своего кода и так и этак перелопатил...век живи...

Genry: Игорь, день добрый! Попался вот такой интересный индикатор, у него там 3 варианта сигналов - раскраской бар, линиями и стрелками (в виде кружков - 4 и 5 буф). Попробовал снять сигналы с помощью стрелочного темплейта, но как и в предыдущем случае - врет. Взгляните, пожалуйста, может опять перерисовывает? Советник этот , спасибо!


Scriptong: Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации. Заявленный индикатор не имеет таких проблем. В этом плане он "правильный". То же самое можно сказать и о советнике. Проблема лишь в одной цифре - нужно присвоить 1 параметру bn вместо 0.

Genry: Scriptong пишет: Заявленный индикатор не имеет таких проблем. В этом плане он "правильный". То же самое можно сказать и о советнике. Проблема лишь в одной цифре - нужно присвоить 1 параметру bn вместо 0. Игорь, в коде индикатора как-то мудрено идет расчет бар для сравнения. Плюс происходит вызов индикатором самого себя (что-то типа рекурсии) Поэтому для проверки в тестере я сделал этот параметр настраиваемым чтобы посмотреть результаты с отступом на истории. Звиняйте, что забыл упомянуть об этой особенности и сам на нее попался Спасибо!

Batman: Scriptong пишет: Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации. ... Если бы всё было так просто... К сожалению, в режиме визуализации тестера явно перерисовывающиеся индикаторы, берущие данные текущего бара старших ТФ, перестают перерисовываться и превращаются в Граали, заглядывая в будущее. Сталкивался с этим много раз.

Scriptong: Batman пишет: .. Если бы всё было так просто... К сожалению, в режиме визуализации тестера явно перерисовывающиеся индикаторы, берущие данные текущего бара старших ТФ, перестают перерисовываться и превращаются в Граали, заглядывая в будущее. Сталкивался с этим много раз. Большинство индикаторов имеют дело с текущим ТФ и именно с для них существует описанный способ. Что же касается мультитаймфреймных или мультивалютных индикаторов, то проверять их работу в визуализаторе вообще нельзя, т. к. для индикаторов в МТ4 на данный момент не существует среды тестирования. Окно визуализатора расценивается индикатором как онлайн график. Для таких индикаторов способ проверки просто растягивается во времени: ставится индикатор на онлайн график, графическими объектами (линиями, метками) отмечаются на графике текущие проверяемые показания, а затем, через заданный промежуток времени (зависит от периода старшего ТФ), сверяются с новыми показаниями индикатора. То есть сложность проверки увеличивается незначительно. Тем не менее, этот способ не требует знаний языка программирования.

Genry: Игорь, день добрый! Сделал индикатор в котором 2 буфера, потом хотел от одного буфера избавиться и столкнулся с проблемой: как только один буфер убираю, данные другого перестают отображаться Это вариант где они вместе и работают: Ок А здесь один буфер убран и не работает: BAD Подскажите, пожалуйста, что не так?

Scriptong: Genry пишет: Сделал индикатор в котором 2 буфера, потом хотел от одного буфера избавиться и столкнулся с проблемой: как только один буфер убираю, данные другого перестают отображаться Тут сплелись элементарные ошибки с алгоритмическими (глобальными). Элементарных ошибки две: 1. На первых порах расчета индикатора значение ARSI2 (по логике - более раннее, чем ARSI1), получает значение цены более позднее: ARSI2 = Close[i-1]; Как исправить: вместо "-" поставить "+". 2. При подходе точки расчета ближе к текущей дате начинает работать второй блок, в котором неверно реализован переход от старых значений к новым: else { ARSI1 = ARSI2 + sc * (Close - ARSI2); ARSI2 = ARSI1; } ExtMapBuffer1 = (ARSI1*koef) - (ARSI2*koef); Очевидно, что при расчете значения ExtMapBuffer1 величины ARSI1 и ARSI2 равны между собой. Как исправить: перенести сохранение значения ARSI2 позже момента расчета ExtMapBuffer1: else ARSI1 = ARSI2 + sc * (Close - ARSI2); ExtMapBuffer1 = (ARSI1*koef) - (ARSI2*koef); ARSI2 = ARSI1; В итоге получим: новый код. Глобальная ошибка. Полученный исправленный код нормально работает при первой загрузке, но не может корректно работать в онлайн, т. к. с каждым новым тиком значения ARSI1 и ARSI2 сбрасываются в ноль. Т. е. не получается преемственность значений, которая была достигнута при использовании дополнительного буфера. Решение этой задачи не относится к тривиальным. Как исправить: Необходимо на каждом новом тике поддерживать актуальные значения переменных ARSI1 и ARSI2. Для этого, как минимум, они должны быть либо глобальными переменными, либо статическими для функции start (ключевое слово - static перед объявлением типа). В зависимости от значения переменной limit нужно производить перерасчет либо полной истории, либо только ее обновленной части. К сожалению, в двух словах этого не расскажешь. Это чисто техническая задача. Если ее решение интересно, то можем двигаться дальше, я помогу. Хотя сразу скажу, что проще работать с двумя буферами. В таком случае расчетный буфер можно просто скрыть и не отображать.

Genry: Игорь, спасибо за оперативный ответ! Scriptong пишет: К сожалению, в двух словах этого не расскажешь. Это чисто техническая задача. Если ее решение интересно, то можем двигаться дальше, я помогу. Хотя сразу скажу, что проще работать с двумя буферами. В таком случае расчетный буфер можно просто скрыть и не отображать. Я с этого начал , но когда скрывал расчетный буфер первый тоже не отображался и тогда я начал вот эту переделку. Мне тоже было удобнее когда 2 буфера, но наверно и там что-то сделал не так Сейчас, вооруженный новыми знаниями, попробую повторить код с 2-мя буферам, я его не сохранил. ..... ..... Вот восстановил код где было 2 буфера, но он как и раньше ничего не отображает, а здесь где собака зарыта?

Scriptong: Genry пишет: Вот восстановил код где было 2 буфера, но он как и раньше ничего не отображает, а здесь где собака зарыта? В этом случае все просто. Для того чтобы использовать скрытые буфера, необходимо воспользоваться переопределением количества буферов. Причем новое количество должно быть больше того, что указано в #property indicator_buffers В таких случаях нужна функция IndicatorBuffers. Но и это еще не все. Под скрытые буфера должна быть распределена память. В представленном коде этого нет - массив ARSI объявлен с нулевым размером и не связан ни с одним из буферов индикатора. Устранение этой ошибки - связать индекс буфера индикатора с массивом: SetIndexBuffer(1, ARSI); Вуаля!

Genry: Scriptong пишет: В таких случаях нужна функция IndicatorBuffers. Но и это еще не все. Под скрытые буфера должна быть распределена память. В представленном коде этого нет - массив ARSI объявлен с нулевым размером и не связан ни с одним из буферов индикатора. Устранение этой ошибки - связать индекс буфера индикатора с массивом: цитата: SetIndexBuffer(1, ARSI); Вуаля! Ураааа!!! Теперь продолжу изучение, а то без первичного сигнала было как-то тускло И отдельное спасибо за пIndicatorBuffers и SetIndexBuffer, а то я встречал эти конструкции в текстах, но их значение мне было непонятно

Genry: Это скрин ТС, где я применяю эти индикаторы. Попалась недавно, изучаю, называется по имени автора - Perky scalping b При переходе на 5-ти знак она у них работать перестала и ее забросили. Разберусь, посмотрю как уровни SR и объемы на нее ложаться. Сигналы простые: 1. Если ARSI > +10 - покупка, ARSI < -10 - продажа. При значении 9 будет звуковой сигнал. 2. Если lswpr(зеленого цвета) над Adaptive RSI - зона покупки, под и lswpr красного цвета - продажи. Это основные сигналы, остальное - бантики. Тики - для выбора наилучшего входа и т.д.

Genry: Игорь, день добрый! У AZZX есть индикатор RSI [ исходный код ] по книге Ч.Лебо, я решил сделать его двухцветным [ измененный код], выделив восходящие и нисходящие участки разными цветами . Но результат совсем не тот Если такие сигналы передать в ЕА, то будут убытки. Есть ли решение для устранения этой ошибки с раскраской линий? Мне в голову приходит только сделать третий буфер - в него писать все данные и его рисовать первым, а восходящие-нисходящие линии поверх него. Если других решений нет, то как передать из такого индикатора в советник правильные сигналы без учета ошибок с цветом? Будет ли решением перенести код индикатора в советник?

Scriptong: Genry пишет: Но результат совсем не тот Если такие сигналы передать в ЕА, то будут убытки. Есть ли решение для устранения этой ошибки с раскраской линий? Мне в голову приходит только сделать третий буфер - в него писать все данные и его рисовать первым, а восходящие-нисходящие линии поверх него. Насчет еще одного буфера направление мысли правильное. Неправильный лишь вывод, т. к. подобная конструкция не решит проблему визуализации. Она решается только дублированием значений одного из буферов с целью разруливания ситуаций, при которых на трех свечах линия дважды меняет направление. Недавно мы с Вами уже говорили о подобной проблеме. Только не могу вспомнить, в какой теме. Если нужно, могу такой вариант сделать, но он решит лишь проблему правильного отображения. В советнике его будет не очень удобно использовать. В этом случае достаточно исходного индикатора - по нему и считать. Более простое решение визуализации - перейти со сплошной линии на отдельные графические элементы. Вот так.

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

Scriptong: Пока не могу заняться такими вещами, т. к. для подобного материала нужно "пожить" им достаточно продолжительное время. Сейчас же много сил и времени отнимает становление сайта и доведение до ума накопленного материала. Так, на следующей неделе планирую освежить еще одну старую статью.

Genry: Scriptong пишет: Пока не могу заняться такими вещами, т. к. для подобного материала нужно "пожить" им достаточно продолжительное время. Игорь, так я же не спешу и Вас не тороплю Постепенно пополняю материалами идею, чтобы оставалось меньше неясности. А когда критическая масса нарастет ... тогда и статья, надеюсь, поспеет

Scriptong: Genry пишет: А когда критическая масса нарастет ... тогда и статья, надеюсь, поспеет Договорились - ждем, когда взорвется

Genry: Игорь, день добрый! По ходу изысканий столкнулся с интересной негативной особенностью работы советника MCCE_Skewness_Eviews_Expert.mq4 (скрин внизу): при отработке трендового сигнала, в случае возникновения убытка на открытом ордере, эксперт сдвигает SL (и ТР) в отрицательную зону Если для ТР это еще как-то объяснимо -поставить его поближе к входу, то логика смещения SL до 1.34498 (так по SL закрылся в итого этот ордер) - в бОльший убыток от SL 1.35358, выставленного при открытии ордера, явно эти убытки увеличивает. Происходит это потому, что либо не запоминается первоначальный SL для последующего сравнения, либо что-то не так с механизмом контроля сделки при возникновении убытка после первоначального смещения SL в плюс. Более того, на скрине последний уровень перед падением был 1.35406, что еще лучше сократило убытки, но он тоже модифицировался Логичнее было остановить рост убытков на 1.35406 или при достижении ценой первого SL, выставленного при открытии ордера, а так цена модифицирует SL и TP вдоль убыточного канала. Буду рад увидеть, что советник более профитный , если внести такое изменение.

Scriptong: Genry пишет: По ходу изысканий столкнулся с интересной негативной особенностью работы советника MCCE_Skewness_Eviews_Expert.mq4 (скрин внизу): при отработке трендового сигнала, в случае возникновения убытка на открытом ордере, эксперт сдвигает SL (и ТР) в отрицательную зону Немного не так. В этом советнике не заложен механизм слежения за состоянием SL и TP в чистом виде. Он несколько завуалирован. Происходит следующее: 1. Открыт ордер. 2. На следующей свече поступает новый сигнал, совпадающий по направлению с имеющимся. В такой ситуации есть несколько вариантов действий: 1. Ничего не делать. 2. Открыть дополнительный ордер по новому сигналу. 3. Модифицировать текущий ордер в соответствии с новым сигналом. При реализации советника был выбран вариант №3. То есть все модификации, которые показаны на рисунке, это сигналы открытия новых ордеров. Так часто эти сигналы возникают, скорее всего, потому, что выбрана достаточно либеральная модель фильтрации сигналов, а именно: реагировать на все трендовые и флэтовые сигналы. Причем флэтовые сигналы не фильтровались по тренду. То есть набор был такой: i_useTrendSignals = true; i_useFlatSignals = true; i_useFlatByTrend = false; Если указать фильтрацию флэтовых сигналов по тренду (i_useFlatByTrend = true), то сигналов станет меньше. Еще меньше их станет, если отбросить флэтовые сигналы (i_useFlatSignal = false). Если же сделать то, о чем Вы просите (запретить советнику наращивать стоп), то проблема все равно не решится, т. к. после срабатывания уровня стопа на следующей же свече будет открыта новая сделка в том же направлении, т. е. стратегия ко всему прочему будет терять на лишних спредах.

Genry: Scriptong пишет: Если же сделать то, о чем Вы просите (запретить советнику наращивать стоп), то проблема все равно не решится, т. к. после срабатывания уровня стопа на следующей же свече будет открыта новая сделка в том же направлении, т. е. стратегия ко всему прочему будет терять на лишних спредах. Понятно, т.к. индикаторы внутри советника и не визуализируются при открытии графика тестирования я для визуализации использовал MultipleCorrelationCoefficient_Evaluation вместо MCCE_Skewness_EViews_Signals, на котором видно множество сигналов. Спасибо, Игорь, с этим разобрался, подзабыл уже особенности.

Genry: Игорь, когда вышла статья, этот вариант советника мне понравится своей универсальностью - Вы заложили в него стратегии для флета и тренда. Плюс асимметрия и регрессионный анализ , думаю он еще на многое способен ---------------------------------------------------------------------------- Что если расширить стратегию и урезать убытки? Алгоритм который работает сейчас, в случае когда ордер открылся против тренда иногда выводит сделку в безубыток или дает небольшую прибыль, но именно в этот момент часто идет сигнал смены тенденции, а вот убыточный тренд, как мы видим на скрине, может развиваться достаточно долго Я нашел свои старые записи, тех времен когда вышла статья, где анализировал все варианты настроек, за полгода было 48 трендовых сигналов и прибыль , а с флетовыми было 448 сделок, но прибыль в половину меньше. Часто убытки росли из-за ситуации которая показана на скрине выше. Может к трем ранее озвученным вариантам: "В такой ситуации есть несколько вариантов действий: 1. Ничего не делать. 2. Открыть дополнительный ордер по новому сигналу. 3. Модифицировать текущий ордер в соответствии с новым сигналом. ", с учетом сказанного Вами: Scriptong пишет: Если же сделать то, о чем Вы просите (запретить советнику наращивать стоп), то проблема все равно не решится, т. к. после срабатывания уровня стопа на следующей же свече будет открыта новая сделка в том же направлении, т. е. стратегия ко всему прочему будет терять на лишних спредах. можно добавить еще два: 4. Модифицируем текущий ордер в соответствии с новым сигналом, если прибыль увеличивается. Если сработал SL, переходим на Вариант №1 до появления противоположного сигнала. 5. Модифицировать текущий ордер в соответствии с новым сигналом, если прибыль увеличивается. Фиксируем локальные MAX|MIN. Если сработал SL (разворот или тренд не состоялся и рынок идет против нас), то при повторении сигналов текущей тенденции новый ордер в этом-же направлении открываем только при/после обнаружения локальной вершины или впадины. ============================= PS. еще после 3 часов разглядывания графиков: Возможно эти добавления и не решат задачи

Scriptong: Genry пишет: Плюс асимметрия и регрессионный анализ , думаю он еще на многое способен В этом советнике, чтобы вносить подобные изменения, придется еще решить задачу перехода на новый MQL4, т. е. потребуется полная переработка существующего кода. Так что это будет возможно только в рамках новой статьи.

Genry: Игорь, день добрый! Попался вот такой индикатор. По сути его все понятно, вопрос возникает при попытке использовать его в советнике, рекомендации он выдает текстом, уровни рисует в графике. Работа с индикатором через буфер понятна, а как быть с такими индикаторами? Или для удобства имеет смысл создать в нем нужный буфер? Мне уже несколько раз попадались такие индикаторы (например WATL или WATI), а проверить их эффективность мог только руками, хотелось бы понять как с ними работать программно. Вы могли бы на его примере показать как использовать сигналы такого индикатора в советнике? Спасибо!

Scriptong: Genry пишет: Вы могли бы на его примере показать как использовать сигналы такого индикатора в советнике? Самый простой вариант: 1. В индикаторе задать специальный префикс для имен объектов. 2. В советнике на каждом тике производится считывание параметров заранее известных имен объектов. Минус такого подхода - возможность тестирования только в режиме визуализации, т. к. при быстром тестировании и оптимизации графические объекты не создаются. Для полноценного использования индикатора в советнике потребуется только его полная перестройка.

Genry: Scriptong пишет: Самый простой вариант: 1. В индикаторе задать специальный префикс для имен объектов. 2. В советнике на каждом тике производится считывание параметров заранее известных имен объектов. Минус такого подхода - возможность тестирования только в режиме визуализации, т. к. при быстром тестировании и оптимизации графические объекты не создаются. Для полноценного использования индикатора в советнике потребуется только его полная перестройка. А если через глобальные переменные? Тогда возможно быстрое тестирование?

Scriptong: Genry пишет: А если через глобальные переменные? Тогда возможно быстрое тестирование? Возможно. Но на мой взгляд, с таким вариантом будет больше мороки (нужно разработать интерфейс общения между советником и индикатором), чем с переделкой индикатора на вывод данных в буфер.

Genry: Игорь, день добрый! Подбирая материал для поста в "Импульсах" я еще раз посмотрел материалы по построению волновых структур. И возник вопрос: возможно-ли внести изменения в индикатор ThreeWaves из статьи " Три волны" и сделать его сигнальным? Т.е. чтобы индикатор отрисовывал стрелки при развитии 3 волны за переделы вершины первой и крестик при окончании. При этом даже несостоявшаяся волна вполне укладывается в определение контрендовой и частенько пригодна для торговли.

Genry:

Scriptong: Genry пишет: И возник вопрос: возможно-ли внести изменения в индикатор ThreeWaves из статьи " Три волны" и сделать его сигнальным? Т.е. чтобы индикатор отрисовывал стрелки при развитии 3 волны за переделы вершины первой и крестик при окончании. Да, вполне возможно. Но когда за это смогу взяться даже обещать не буду.

Genry: Scriptong пишет: Да, вполне возможно. Но когда за это смогу взяться даже обещать не буду. Ну, спокойное ожидание - это часть трейдинга ;)) Здесь важнее другое - насколько оправдано использование сигналов ThreeWaves для задания по ним направления тренда. Если посмотреть на истории, то ThreeWaves хорошо справляется с этой задачей уверенно выделяя области графика, которые движутся в одном направлении. Т.е. если отметить начало такого движения, то с ним можно сравнивать сигналы других индикаторов до завершения тенденции. Поэтому наряду со стрелками, как вариант реализации предлагаю рассмотреть вариант нескольких линий (трендовая и контртрендовая) в отдельном окне. Будет наглядно.

Scriptong: Genry пишет: Поэтому наряду со стрелками, как вариант реализации предлагаю рассмотреть вариант нескольких линий (трендовая и контртрендовая) в отдельном окне. Я так понимаю, речь идет об еще одном индикаторе, сигналы которого и необходимо фильтровать при помощи ThreeWaves?

Genry: Scriptong пишет: Я так понимаю, речь идет об еще одном индикаторе, сигналы которого и необходимо фильтровать при помощи ThreeWaves? Именно так. На скрине сигналы различных статистических индикаторов. Их объединяет то, что они иногда дают сигналы против тренда, реагируя на контртрендовую ситуацию, которая не получила развития. Принцип работы ThreeWaves иной и хотелось бы понять насколько в этой ситуации он может быть фильтром для статистических индикаторов, показывая направление основного тренда.

Scriptong: Genry пишет: Принцип работы ThreeWaves иной и хотелось бы понять насколько в этой ситуации он может быть фильтром для статистических индикаторов, показывая направление основного тренда. Я ведь это и сказал... Нет? Под "еще одним" нужно понимать не какой-то конкретный индикатор, а любой абстрактный индикатор, проблемой которого являются контртрендовые сигналы.

Genry: Scriptong пишет: Я ведь это и сказал... Нет? Игорь, я потом поправил свой ответ, а сейчас с удивлением увидел что правка не запомнилась. Все так. Особенно ситуация раскрылась на длительном падении фунта - там было много боковиков. Перед флетом статистические индикаторы начинали показывать разворот, было много ложных сигналов. Вот я и перебираю запасы на предмет индикатора направления тренда, который не сильно запаздывает на разворотах. Перечитываю статьи и пробую Поэтому и к MultipleSCorrelationCoefficient_Signals и к SkewnessFeatAM вернулся, но даже фильтрация асимметрии машками - тоже из этой оперы (сигналы асимметрии в основе) - т.е. есть ситуации где наши статики дружно врут . Надо что-то принципиально иное с чем сравнивать их сигналы.

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

Genry: Scriptong пишет: Таким образом, работать необходимо в направлении создания правил идентификации этого глобального тренда. И на этот счет уже есть конкретные мысли. Я только за и мысли совпадают, кстати поиском подобного индикатора занимаюсь последние 2-3 месяца Нет смысла ломать копья в битве за краткосрочный тренд (ну может кроме 4 волны), в то время как долгосрочная тенденция проходит мимо. Scriptong пишет: Когда они дойдут до степени "терпеть уже не могу", то отложу все текущие дела и примусь за написание такой программы с последующим написанием статьи. Но пока терпеть еще могу просто объем мал , если его увеличить .... и потребность в статье станет нестерпимой

Scriptong: Genry пишет: Нет смысла ломать копья в битве за краткосрочный тренд (ну может кроме 4 волны), в то время как долгосрочная тенденция проходит мимо. С долгосрочной тенденцией тоже не все так просто. Под "глобальным трендом" я имею в виду такую характеристику рынка, которая проявляется в самые неожиданные моменты. К примеру, после длительного падения или роста цены наблюдается консолидация, которая часто сменяется глубокой и долгой коррекцией. Во время ее развертывания уже кажется, что наступил перелом тренда. Но вдруг происходит какое-то событие, которое приводит к пробуждению сил тренда, и он продолжает свое шествие как ни в чем не бывало. Наиболее свежий пример описанного поведения - возобновление падения евро в четверг 04.09.14. Рынок дружно объяснил это снижением процентной ставки ЕЦБ. Ну как тут не объяснить это подобным образом, если движение началось именно после объявления ставки? На мой взгляд, это слишком поверхностное суждение, в котором, к тому же, причина и следствие перепутаны: не новость вызвала продолжение тренда, а именно сложившийся тренд, которому требовалось продолжение (т. к. все участники рынка стали говорить о том, что дно по евро почти достигнуто), привел к появлению новости о снижении процентной ставки.

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

Scriptong: Genry пишет: Это даже более "тонкий" подход к теме чем я запрашивал. Мистики здесь никакой нет. Просто понимание более глубоких процессов. Вывод же получается до боли банальный (а заодно и скандальный) - как бы фундаментальный анализ не кичился своей важностью, им исподтишка управляет технический анализ.



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