Форум » Консультации по программированию » 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 пишет: Но результат совсем не тот Если такие сигналы передать в ЕА, то будут убытки. Есть ли решение для устранения этой ошибки с раскраской линий? Мне в голову приходит только сделать третий буфер - в него писать все данные и его рисовать первым, а восходящие-нисходящие линии поверх него. Насчет еще одного буфера направление мысли правильное. Неправильный лишь вывод, т. к. подобная конструкция не решит проблему визуализации. Она решается только дублированием значений одного из буферов с целью разруливания ситуаций, при которых на трех свечах линия дважды меняет направление. Недавно мы с Вами уже говорили о подобной проблеме. Только не могу вспомнить, в какой теме. Если нужно, могу такой вариант сделать, но он решит лишь проблему правильного отображения. В советнике его будет не очень удобно использовать. В этом случае достаточно исходного индикатора - по нему и считать. Более простое решение визуализации - перейти со сплошной линии на отдельные графические элементы. Вот так.



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