АвторСообщение
постоянный участник




Сообщение: 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 красиво рисует на графике, так что в тестере надеялся получить как минимум безубыток вместо которого постоянно рисуется

http://f4.s.qip.ru/NYzSvWel.png

Валюта UsdJpy m15 пятизнак, параметры торговли выставлены как параметры ЕА.
TP, SL нет - вход и выход по сигналам индикатора. Сделал запись всех сигналов в лог, вроде логика работает верно, а ордера выставляет поздно.

Может это какой-то общеизвестный факт, типа задержки с периодом, но здесь я читаю сигналы индюка, который уже цвет сменил....

Игорь, взгляните, пожалуйста, в чем может быть проблема?

Индикатор и советник в прицепе FastTMALine_EA.
Спасибо!


С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 55 , стр: 1 2 3 4 All [только новые]







Сообщение: 111
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 1
ссылка на сообщение  Отправлено: 16.06.13 19:46. Заголовок: Если под общеизвестн..


Если под общеизвестным фактом понимать существование перерисовывающихся индикаторов...
Было так:


А в итоге стало вот так:


Как видно, этот индикатор именно такой. Заставляет его перерисовываться вот эта строка:

 цитата:
limit=MathMin(limit,Bars-counted_bars+ TMAPeriod * barsPerTma );



То есть, чем больше значение TMAPeriod (по умолчанию 20), тем больше баров будет перерисовываться. В данной ситуации, чтобы быть на 100% уверенным, что индикатор сформировал то, что в последствии будет видно в истории, нужно подождать 20 баров. Поэтому говорить о запаздывании в каких-то 11 баров - смешно


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 86
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 1
ссылка на сообщение  Отправлено: 16.06.13 20:56. Заголовок: Scriptong пишет: Ес..


Scriptong пишет:

 цитата:
Если под общеизвестным фактом понимать существование перерисовывающихся индикаторов...



Эх, вот оно что! Спасибо, Игорь... А я уже эти несколько строк своего кода и так и этак перелопатил...век живи...

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 451
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 1
ссылка на сообщение  Отправлено: 20.02.14 09:24. Заголовок: Игорь, день добрый! ..


Игорь, день добрый!

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

Советник этот , спасибо!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 360
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 20.02.14 09:46. Заголовок: Факт перерисовки как..


Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации.

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

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 453
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 1
ссылка на сообщение  Отправлено: 20.02.14 10:26. Заголовок: Scriptong пишет: За..


Scriptong пишет:

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



Игорь, в коде индикатора как-то мудрено идет расчет бар для сравнения. Плюс происходит вызов индикатором самого себя (что-то типа рекурсии)
Поэтому для проверки в тестере я сделал этот параметр настраиваемым чтобы посмотреть результаты с отступом на истории.
Звиняйте, что забыл упомянуть об этой особенности и сам на нее попался
Спасибо!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
Зарегистрирован: 07.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 07.03.14 06:50. Заголовок: Scriptong пишет: Фа..


Scriptong пишет:

 цитата:
Факт перерисовки каким-либо индикатором выявляется достаточно просто - установкой индикатора на график визуализации.


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

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 373
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 09.03.14 12:46. Заголовок: Batman пишет: .. Ес..


Batman пишет:

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


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

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 650
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 14:37. Заголовок: Игорь, день добрый! ..


Игорь, день добрый!

Сделал индикатор в котором 2 буфера, потом хотел от одного буфера избавиться и столкнулся с проблемой: как только один буфер убираю,
данные другого перестают отображаться

Это вариант где они вместе и работают: Ок А здесь один буфер убран и не работает: BAD

Подскажите, пожалуйста, что не так?

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 547
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 16:29. Заголовок: Genry пишет: Сделал..


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 нужно производить перерасчет либо полной истории, либо только ее обновленной части.

К сожалению, в двух словах этого не расскажешь. Это чисто техническая задача. Если ее решение интересно, то можем двигаться дальше, я помогу. Хотя сразу скажу, что проще работать с двумя буферами. В таком случае расчетный буфер можно просто скрыть и не отображать.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 651
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 17:11. Заголовок: Игорь, спасибо за оп..


Игорь, спасибо за оперативный ответ!

Scriptong пишет:

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


Я с этого начал , но когда скрывал расчетный буфер первый тоже не отображался и тогда я начал вот эту переделку.
Мне тоже было удобнее когда 2 буфера, но наверно и там что-то сделал не так

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

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 551
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 19:28. Заголовок: Genry пишет: Вот во..


Genry пишет:

 цитата:
Вот восстановил код где было 2 буфера, но он как и раньше ничего не отображает, а здесь где собака зарыта?


В этом случае все просто.
Для того чтобы использовать скрытые буфера, необходимо воспользоваться переопределением количества буферов. Причем новое количество должно быть больше того, что указано в

 цитата:
#property indicator_buffers


В таких случаях нужна функция IndicatorBuffers.
Но и это еще не все. Под скрытые буфера должна быть распределена память. В представленном коде этого нет - массив ARSI объявлен с нулевым размером и не связан ни с одним из буферов индикатора. Устранение этой ошибки - связать индекс буфера индикатора с массивом:

 цитата:
SetIndexBuffer(1, ARSI);



Вуаля!

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 653
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 19:32. Заголовок: Scriptong пишет: В ..


Scriptong пишет:

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



Ураааа!!! Теперь продолжу изучение, а то без первичного сигнала было как-то тускло

И отдельное спасибо за пIndicatorBuffers и SetIndexBuffer, а то я встречал эти конструкции в текстах, но их значение мне было непонятно

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 654
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 24.06.14 19:38. Заголовок: Это скрин ТС, где я ..


Это скрин ТС, где я применяю эти индикаторы. Попалась недавно, изучаю, называется по имени автора - Perky scalping b
При переходе на 5-ти знак она у них работать перестала и ее забросили. Разберусь, посмотрю как уровни SR и объемы на нее ложаться.

Сигналы простые:
1. Если ARSI > +10 - покупка, ARSI < -10 - продажа. При значении 9 будет звуковой сигнал.
2. Если lswpr(зеленого цвета) над Adaptive RSI - зона покупки, под и lswpr красного цвета - продажи.

Это основные сигналы, остальное - бантики. Тики - для выбора наилучшего входа и т.д.




С уважением! Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 665
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 29.06.14 11:05. Заголовок: Игорь, день добрый! ..


Игорь, день добрый!

У AZZX есть индикатор RSI [ исходный код ] по книге Ч.Лебо, я решил сделать его
двухцветным [ измененный код], выделив восходящие и нисходящие участки разными цветами .

Но результат совсем не тот Если такие сигналы передать в ЕА, то будут убытки.
Есть ли решение для устранения этой ошибки с раскраской линий?
Мне в голову приходит только сделать третий буфер - в него писать все данные и его рисовать первым, а восходящие-нисходящие линии поверх него.

Если других решений нет, то как передать из такого индикатора в советник правильные сигналы без учета ошибок с цветом?
Будет ли решением перенести код индикатора в советник?



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 563
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 29.06.14 18:57. Заголовок: Genry пишет: Но рез..


Genry пишет:

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


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

Более простое решение визуализации - перейти со сплошной линии на отдельные графические элементы. Вот так.

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 55 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет