Индикатор на Вайвлет – преобразованиях Kristi_GrafWav. - страница 2

 
Piligrimm:
Reshetov:
Piligrimm:


Давайте, для начала, тогда уточним, что каждый из нас вкдадывает в понятие перерисовывание, а то, я чувствую, что мы это истолковываем по разному. Если Вы под этим имеете ввиду, что при каждом старте индикатора графики перерисовываются заново,

Под этим имеется в виду, что индикатор или осциллятор перерисовывает свои показания на барах предшествующих текущему. Т.е. если он изменяет значения не только на нулевом, но и на 1 - ом, 2 - ом, 3 - ем и т.д. барах, то значит он перерисовывает свои прежние показания и торговые сигналы.

Если изменения вносятся только в значения индикатора на 0 - ом баре, а на остальных барах не меняются, то индюк нормальный.

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


По-моему здесь какое-то излишнее усложнение. Ну допустим МТ4 перерисовывает график индикатора на каждом тике. Но это подробность программной реализации и это, имхо, правильно. Если индикатор не меняет значения буфера для всех баров, кроме текущего, то и после перерисовывания график (кроме может быть 0-й точки) будет тем же. Если алгоритм вычисления индикатора построен так, что его значение на N-ом баре не зависит от N (при N<>0), то зачем пересчитывать его заново ? Если же этот алгоритм зависит от N (то есть фактически зависит от значений цены на барах из промежутка [N-1,0] - будущего по отношению к N-ому бару), то значения на данном баре будут меняться при изменении его номера N. А значит будет меняться и форма всей кривой индикатора. Это и есть то перерисовывание о котором идет речь.

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

И вы не ответили ничего ни про граничные искажения, ни про используемые вами граничные условия. Спрошу прямо: вы придумали что-то оригинальное для решения этих вопросов или используете известные методы ?

 
Piligrimm:
Выше я пояснил, что если нет видимых изменений на предыдущих барах, это еще не значит, что все нормально, т.к. перерисовывается весь график по принципу работы самого МТ4, и эти изменения внутри цикла просто не всегда видны.
Здесь вы сильно неправы.
1. МТ4 не пересчитывает, т.е. и не перерисовывает, график на каждом тике. (Исключение: програмист конкретного индикатора конкретно тупит.)
2. Нормальные индикаторы не изменяют свои значения для 1-го, 2-го и последующих баров независимо от того, что происходит на нулевом баре. Индикатор изменяющий значение для баров в прошлом тем самым правит историю, а значит в сад такой индикатор.
 
Yurixx:
что-то оригинальное для решения этих вопросов или используете известные методы ?
Для решения этой проблемы я использую двойную фильтрацию, вначале фильтрую данные внутри ф-ции int start(), затем формирую буферный реверсивный массив вне ф-ции int start(), и заполняю его последним расчетным значением полученным внутри ф-ции int start(), после этого провожу филтрацию этого массива. Это позволяет устранить искажения связанные с переходными процессами и отчасти сгладить искажения связанные с границей диапазона.
 
eugenk:
Но тема вейвелетов мне интересна. Мультивалютность кстати тоже. Душой и всем прочим чуствую, что и там и там, есть очень нехилые возможности.

Еще на эти темы можно посмотреть здесь, если ранее не читали: 'Эффективная торговая стратегия основанная на мультивалютном анализе нескольких ДЦ'

 
Piligrimm:
Yurixx:
что-то оригинальное для решения этих вопросов или используете известные методы ?
Для решения этой проблемы я использую двойную фильтрацию, вначале фильтрую данные внутри ф-ции int start(), затем формирую буферный реверсивный массив вне ф-ции int start(), и заполняю его последним расчетным значением полученным внутри ф-ции int start(), после этого провожу филтрацию этого массива. Это позволяет устранить искажения связанные с переходными процессами и отчасти сгладить искажения связанные с границей диапазона.


Спасибо, понял. Я тоже изначально все свои индикаторы пишу так, что буфер индикатора объявлен на глобальном уровне и в функции start() происходит расчет только последнего знавения. Для этого, естественно, подходят только такие индикаторы, которые не меняют своих значений в прошлом. И это полностью решает проблему перерисовывания истории.

А что из себя представляют ваши фильтры и какое отношение они имеют к вейвлет-преобразованию ?

 

1. Что является базисной функцией в Вашем вейвлет преобразовании ?

2. Как выставляется порог (правило по которым отсекаются малозначимые коэффициенты) ?

3. Обработка идет тиков, или баров (Close) ?

4. Каким образом индикатор собирает данные других валютных пар?

5. Как выполняется синхронизация, тики же приходят не синхронно ?

 
Yurixx:
Piligrimm:
Yurixx:
что-то оригинальное для решения этих вопросов или используете известные методы ?
Для решения этой проблемы я использую двойную фильтрацию, вначале фильтрую данные внутри ф-ции int start(), затем формирую буферный реверсивный массив вне ф-ции int start(), и заполняю его последним расчетным значением полученным внутри ф-ции int start(), после этого провожу филтрацию этого массива. Это позволяет устранить искажения связанные с переходными процессами и отчасти сгладить искажения связанные с границей диапазона.


Спасибо, понял. Я тоже изначально все свои индикаторы пишу так, что буфер индикатора объявлен на глобальном уровне и в функции start() происходит расчет только последнего знавения. Для этого, естественно, подходят только такие индикаторы, которые не меняют своих значений в прошлом. И это полностью решает проблему перерисовывания истории.

А что из себя представляют ваши фильтры и какое отношение они имеют к вейвлет-преобразованию ?


В принципе, любой индикатор - фильтр, и вайвлет - преобразования, также осуществляют функцию фильтрации данных. Я Использую для фильтрации не только вайвлеты, но и полиномы, а также Зиг-заги, и им подобные, о которых я уже писал в других темах, использую только свои индикаторы. 
 
Prival:

1. Что является базисной функцией в Вашем вейвлет преобразовании ?

2. Как выставляется порог (правило по которым отсекаются малозначимые коэффициенты) ?

3. Обработка идет тиков, или баров (Close) ?

4. Каким образом индикатор собирает данные других валютных пар?

5. Как выполняется синхронизация, тики же приходят не синхронно ?

1. Чаще всего использую db и sym, но иногда и другие.
2. Эмпирическим путем.

3. Баров.

4. С помощью ф-ции iClose.

5. Синхронизирую все относительно инструмента на котором установлен индикатор, за счет опроса по приходу нового бара.

 
Yurixx:
Piligrimm:
Yurixx:
что-то оригинальное для решения этих вопросов или используете известные методы ?


Спасибо, понял. Я тоже изначально все свои индикаторы пишу так, что буфер индикатора объявлен на глобальном уровне и в функции start() происходит расчет только последнего знавения. Для этого, естественно, подходят только такие индикаторы, которые не меняют своих значений в прошлом. И это полностью решает проблему перерисовывания истории.

А что из себя представляют ваши фильтры и какое отношение они имеют к вейвлет-преобразованию ?

Я слабо знаю MQL, в связи с этим вопрос, как наиболее оптимально организовать расчет за пределами ф-ции start() ? Как делаете Вы, если можно приведите, пожалуйста, пример.
 

Чтобы ответить на этот вопрос конкретно, надо хоть что-то знать о том как Вы организуете свои расчеты.

А общая рекомендация такая. Буферы и все массивы и переменные, которые не должны менять своих значений при перезапуске start(), надо объявлять вне start(), то есть в начале самого эксперта. Внутри start() имеет смысл объявлять только рабочие переменные, которые используются там для вспомогательных целей.

Расчетов за пределами функции start() у меня нет, кроме, конечно, предварительной подготовки данных в init() перед началом работы советника. В основном вся эта кухня опирается на соответствующим образом проработанный алгоритм, а не на место расчетов. Идея проста: при появлении нового тика пересчитываться должно только то, что изменилось, остальное не трогать.

Причина обращения: