Сообщение: 83
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
1
Отправлено: 07.06.13 11:44. Заголовок: Template_Lines_Color_Expert и FastTMA Line
День добрый, Scriptong!
Периодически возвращаюсь к изучению MQL и часто налетаю на одну и туже кочку - запаздывание при открытии позиции. Вроде на графике и на рисунках тестера индикатор своевременно отслеживает ситуацию, а при открытии позиции ордер выставляется значительно позже.
Вот очередная заковыка: индикатор FastTMALine очень привлекательно рисует центральную 3-х цветную линию, где красный участок - медвежий, зеленый - бычий, а белый соответствует флету.
Я взял за основу Template_Lines_Color_Expert и сделал советника. Целью было даже не торговать по FastTMALines, а отработать ее сигналы по смене тренда. Логика такая: выставляем ордер при появлении краного или зеленого цвета, закрываем при смене цвета или появлении белого цвета. FastTMALine красиво рисует на графике, так что в тестере надеялся получить как минимум безубыток вместо которого постоянно рисуется
Валюта UsdJpy m15 пятизнак, параметры торговли выставлены как параметры ЕА. TP, SL нет - вход и выход по сигналам индикатора. Сделал запись всех сигналов в лог, вроде логика работает верно, а ордера выставляет поздно.
Может это какой-то общеизвестный факт, типа задержки с периодом, но здесь я читаю сигналы индюка, который уже цвет сменил....
Игорь, взгляните, пожалуйста, в чем может быть проблема?
То есть, чем больше значение TMAPeriod (по умолчанию 20), тем больше баров будет перерисовываться. В данной ситуации, чтобы быть на 100% уверенным, что индикатор сформировал то, что в последствии будет видно в истории, нужно подождать 20 баров. Поэтому говорить о запаздывании в каких-то 11 баров - смешно
Сообщение: 451
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
1
Отправлено: 20.02.14 09:24. Заголовок: Игорь, день добрый! ..
Игорь, день добрый!
Попался вот такой интересный индикатор, у него там 3 варианта сигналов - раскраской бар, линиями и стрелками (в виде кружков - 4 и 5 буф). Попробовал снять сигналы с помощью стрелочного темплейта, но как и в предыдущем случае - врет. Взгляните, пожалуйста, может опять перерисовывает?
Отправлено: 20.02.14 09:46. Заголовок: Факт перерисовки как..
Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации.
Заявленный индикатор не имеет таких проблем. В этом плане он "правильный". То же самое можно сказать и о советнике. Проблема лишь в одной цифре - нужно присвоить 1 параметру bn вместо 0.
Заявленный индикатор не имеет таких проблем. В этом плане он "правильный". То же самое можно сказать и о советнике. Проблема лишь в одной цифре - нужно присвоить 1 параметру bn вместо 0.
Игорь, в коде индикатора как-то мудрено идет расчет бар для сравнения. Плюс происходит вызов индикатором самого себя (что-то типа рекурсии) Поэтому для проверки в тестере я сделал этот параметр настраиваемым чтобы посмотреть результаты с отступом на истории. Звиняйте, что забыл упомянуть об этой особенности и сам на нее попался Спасибо!
Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации.
... Если бы всё было так просто... К сожалению, в режиме визуализации тестера явно перерисовывающиеся индикаторы, берущие данные текущего бара старших ТФ, перестают перерисовываться и превращаются в Граали, заглядывая в будущее. Сталкивался с этим много раз.
Отправлено: 09.03.14 12:46. Заголовок: Batman пишет: .. Ес..
Batman пишет:
цитата:
.. Если бы всё было так просто... К сожалению, в режиме визуализации тестера явно перерисовывающиеся индикаторы, берущие данные текущего бара старших ТФ, перестают перерисовываться и превращаются в Граали, заглядывая в будущее. Сталкивался с этим много раз.
Большинство индикаторов имеют дело с текущим ТФ и именно с для них существует описанный способ. Что же касается мультитаймфреймных или мультивалютных индикаторов, то проверять их работу в визуализаторе вообще нельзя, т. к. для индикаторов в МТ4 на данный момент не существует среды тестирования. Окно визуализатора расценивается индикатором как онлайн график. Для таких индикаторов способ проверки просто растягивается во времени: ставится индикатор на онлайн график, графическими объектами (линиями, метками) отмечаются на графике текущие проверяемые показания, а затем, через заданный промежуток времени (зависит от периода старшего ТФ), сверяются с новыми показаниями индикатора. То есть сложность проверки увеличивается незначительно. Тем не менее, этот способ не требует знаний языка программирования.
Сообщение: 650
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
2
Отправлено: 24.06.14 14:37. Заголовок: Игорь, день добрый! ..
Игорь, день добрый!
Сделал индикатор в котором 2 буфера, потом хотел от одного буфера избавиться и столкнулся с проблемой: как только один буфер убираю, данные другого перестают отображаться
Это вариант где они вместе и работают: Ок А здесь один буфер убран и не работает: BAD
Сделал индикатор в котором 2 буфера, потом хотел от одного буфера избавиться и столкнулся с проблемой: как только один буфер убираю, данные другого перестают отображаться
Тут сплелись элементарные ошибки с алгоритмическими (глобальными).
Элементарных ошибки две:
1. На первых порах расчета индикатора значение ARSI2 (по логике - более раннее, чем ARSI1), получает значение цены более позднее:
цитата:
ARSI2 = Close[i-1];
Как исправить: вместо "-" поставить "+".
2. При подходе точки расчета ближе к текущей дате начинает работать второй блок, в котором неверно реализован переход от старых значений к новым:
Очевидно, что при расчете значения ExtMapBuffer1 величины ARSI1 и ARSI2 равны между собой. Как исправить: перенести сохранение значения ARSI2 позже момента расчета ExtMapBuffer1:
Глобальная ошибка. Полученный исправленный код нормально работает при первой загрузке, но не может корректно работать в онлайн, т. к. с каждым новым тиком значения ARSI1 и ARSI2 сбрасываются в ноль. Т. е. не получается преемственность значений, которая была достигнута при использовании дополнительного буфера. Решение этой задачи не относится к тривиальным. Как исправить: Необходимо на каждом новом тике поддерживать актуальные значения переменных ARSI1 и ARSI2. Для этого, как минимум, они должны быть либо глобальными переменными, либо статическими для функции start (ключевое слово - static перед объявлением типа). В зависимости от значения переменной limit нужно производить перерасчет либо полной истории, либо только ее обновленной части.
К сожалению, в двух словах этого не расскажешь. Это чисто техническая задача. Если ее решение интересно, то можем двигаться дальше, я помогу. Хотя сразу скажу, что проще работать с двумя буферами. В таком случае расчетный буфер можно просто скрыть и не отображать.
Сообщение: 651
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
2
Отправлено: 24.06.14 17:11. Заголовок: Игорь, спасибо за оп..
Игорь, спасибо за оперативный ответ!
Scriptong пишет:
цитата:
К сожалению, в двух словах этого не расскажешь. Это чисто техническая задача. Если ее решение интересно, то можем двигаться дальше, я помогу. Хотя сразу скажу, что проще работать с двумя буферами. В таком случае расчетный буфер можно просто скрыть и не отображать.
Я с этого начал , но когда скрывал расчетный буфер первый тоже не отображался и тогда я начал вот эту переделку. Мне тоже было удобнее когда 2 буфера, но наверно и там что-то сделал не так
Сейчас, вооруженный новыми знаниями, попробую повторить код с 2-мя буферам, я его не сохранил. ..... ..... Вот восстановил код где было 2 буфера, но он как и раньше ничего не отображает, а здесь где собака зарыта?
Отправлено: 24.06.14 19:28. Заголовок: Genry пишет: Вот во..
Genry пишет:
цитата:
Вот восстановил код где было 2 буфера, но он как и раньше ничего не отображает, а здесь где собака зарыта?
В этом случае все просто. Для того чтобы использовать скрытые буфера, необходимо воспользоваться переопределением количества буферов. Причем новое количество должно быть больше того, что указано в
цитата:
#property indicator_buffers
В таких случаях нужна функция IndicatorBuffers. Но и это еще не все. Под скрытые буфера должна быть распределена память. В представленном коде этого нет - массив ARSI объявлен с нулевым размером и не связан ни с одним из буферов индикатора. Устранение этой ошибки - связать индекс буфера индикатора с массивом:
Сообщение: 653
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
2
Отправлено: 24.06.14 19:32. Заголовок: Scriptong пишет: В ..
Scriptong пишет:
цитата:
В таких случаях нужна функция IndicatorBuffers. Но и это еще не все. Под скрытые буфера должна быть распределена память. В представленном коде этого нет - массив ARSI объявлен с нулевым размером и не связан ни с одним из буферов индикатора. Устранение этой ошибки - связать индекс буфера индикатора с массивом: цитата: SetIndexBuffer(1, ARSI); Вуаля!
Ураааа!!! Теперь продолжу изучение, а то без первичного сигнала было как-то тускло
И отдельное спасибо за пIndicatorBuffers и SetIndexBuffer, а то я встречал эти конструкции в текстах, но их значение мне было непонятно
Сообщение: 665
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация:
2
Отправлено: 29.06.14 11:05. Заголовок: Игорь, день добрый! ..
Игорь, день добрый!
У AZZX есть индикатор RSI [ исходный код ] по книге Ч.Лебо, я решил сделать его двухцветным [ измененный код], выделив восходящие и нисходящие участки разными цветами
Отправлено: 29.06.14 18:57. Заголовок: Genry пишет: Но рез..
Genry пишет:
цитата:
Но результат совсем не тот Если такие сигналы передать в ЕА, то будут убытки. Есть ли решение для устранения этой ошибки с раскраской линий? Мне в голову приходит только сделать третий буфер - в него писать все данные и его рисовать первым, а восходящие-нисходящие линии поверх него.
Насчет еще одного буфера направление мысли правильное. Неправильный лишь вывод, т. к. подобная конструкция не решит проблему визуализации. Она решается только дублированием значений одного из буферов с целью разруливания ситуаций, при которых на трех свечах линия дважды меняет направление. Недавно мы с Вами уже говорили о подобной проблеме. Только не могу вспомнить, в какой теме. Если нужно, могу такой вариант сделать, но он решит лишь проблему правильного отображения. В советнике его будет не очень удобно использовать. В этом случае достаточно исходного индикатора - по нему и считать.
Более простое решение визуализации - перейти со сплошной линии на отдельные графические элементы. Вот так.
Все даты в формате GMT
2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет