Скачать MetaTrader 5

Индикаторы: FIR_filter

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Automated-Trading
Админ
103589
Automated-Trading  

FIR_filter:

Скользящая средняя на основе цифрового фильтра. В данном примере используется окно Ханна (Hann Window).

Автор: Vladimir

FIR

Sergey Pavlov
9866
Sergey Pavlov  
А зачем такая точность числа ПИ?

Vladimir
5989
Vladimir  

DC2008:
А зачем такая точность числа ПИ? 

 

 Я над этим не задумывался. В гугле легко найти любую константу высокой точности. Полагаю что если метатрадейру не нужна такая высокая точность, то он автоматически определит сколько отбросить знаков после запятой.
Prival
4579
Prival  

Вы уверены что формула правильная ? Сравните пожалуйста с этими http://dspsystem.narod.ru/add/win/win.html

Скользящая средняя на основе цифрового фильтра. В данном примере используется Hann Window. Для изменения коэффициентов фильтра, редактируйте следующие строки в OnInit():

По поводу терминологии извините вы меняете не коэффициенты фильтра, а коэффициенты окна. Это разные вещи. В вашем примере цифровой фильтр (ЦФ) это скользящая средняя (СС),  и использоваться она (СС) может с любым окном (небольшая их часть приведена по ссылке выше). Каждое из окон, а их много, служит для определенных целей. Обычно оно улучшает, какое либо свойство ЦФ, но за это приходиться платить, просто так ничего не дается, в выходной спектр вносятся искажения.

По поводу точности числа Пи, точность никогда не бывает лишней. Загрубить результат  мы всегда успеем. Вот тут есть простой способ его задания https://www.mql5.com/ru/code/8309

Очень красивое решение.

 pi = 4*MathArctan(1);
Evgeniy Logunov
716
Evgeniy Logunov  
Prival:

По поводу точности числа Пи, точность никогда не бывает лишней. Загрубить результат  мы всегда успеем. Вот тут есть простой способ его задания https://www.mql5.com/ru/code/8309

Определять пи как переменную не стоит. Пускай будет константой лучше.

Но и лишние знаки тоже не нужны. Для double известно количество знаков, которые могут храниться. 

Prival
4579
Prival  
lea:

Определять пи как переменную не стоит. Пускай будет константой лучше.

Но и лишние знаки тоже не нужны. Для double известно количество знаков, которые могут храниться. 

ошибаетесь. я в свое время 2 недели потерял просто из-за того что пи было задано не с максимальной точностью. сверял построение спектра получаемое в маткаде с тем что сделал используя библиотеку FFT https://www.mql5.com/ru/code/9696
Vladimir
5989
Vladimir  
Prival:

Вы уверены что формула правильная ? Сравните пожалуйста с этими http://dspsystem.narod.ru/add/win/win.html

По поводу терминологии извините вы меняете не коэффициенты фильтра, а коэффициенты окна. Это разные вещи. В вашем примере цифровой фильтр (ЦФ) это скользящая средняя (СС),  и использоваться она (СС) может с любым окном (небольшая их часть приведена по ссылке выше). Каждое из окон, а их много, служит для определенных целей. Обычно оно улучшает, какое либо свойство ЦФ, но за это приходиться платить, просто так ничего не дается, в выходной спектр вносятся искажения.

Существуют разные формулы для окна Ханна и других подобных окон. Они все идентичны если вдуматься. Формула в Вашей ссылке имеет один большой недостаток: нулевые значения окна при n=0 и n=N-1. Так как смысла умножать цены на нули нет, то получается что окно только существует для цен с n=1...n=N-2. Теперь давайти обозначим количество цен для которых окно не равно нулю через Per, как у меня, тогда получим N-2=Per или N=Per+2. Подставьте этот N в формулу Ханна в Вашей ссылке и получите такую же формулу как у меня.

Насчёт имени индикатора. Имя правильно выбрано. По определению, то что я сконструировал является цифровым фильтром с конечной импульсной характеристикой

The difference equation that defines the output of an FIR filter in terms of its input is:

y[n]=b_0 x[n] + b_1 x[n-1] + ... + b_N x[n-N]

where:

  • x[n] is the input signal,
  • y[n] is the output signal,
  • bi are the filter coefficients, and
  • N is the filter order  

Смотрите здесь http://en.wikipedia.org/wiki/Finite_impulse_response

Я по электронике уже 21 год работаю. Знаю эти вещи. Хотя всегда спасибо за замечания. Приятно поговорить со знающими людьми.

Prival
4579
Prival  
gpwr:

Существуют разные формулы для окна Ханна и других подобных окон. Они все идентичны если вдуматься. Формула в Вашей ссылке имеет один большой недостаток: нулевые значения окна при n=0 и n=N-1. Так как смысла умножать цены на нули нет, то получается что окно только существует для цен с n=1...n=N-2. Теперь давайти обозначим количество цен для которых окно не равно нулю через Per, как у меня, тогда получим N-2=Per или N=Per+2. Подставьте этот N в формулу Ханна в Вашей ссылке и получите такую же формулу как у меня.

....

Спасибо за ссылку в википедию. Попробую показать с помощью формул,  что Вы сделали.

Для вашего случая точнее эту формулу будет записать так

y[n]=а_0*b_0* x[n] +а_1* b_1* x[n-1] + ... + а_N*b_N* x[n-N]

x[n] is the input signal, 

y[n] is the output signal,

bi are the filter coefficients, and

а[i] –  коэффициенты окна,  

N is the filter order 

Т.е. вы произвели свертку коэффициентов ЦФ (b) и коэффициентов Окна (a).

Да вы правы, что есть разные формулы записи оконных функций. Но это различие порождено тем в какой области производиться свертка, в частотной или временной. И эти формулы жестко связаны между собой преобразованием Фурье http://ru.wikipedia.org/wiki/Оконное_преобразование_Фурье

Хотя формулы и похожи, никогда нельзя путать в какой области производится свертка, иначе аброкодабра получается.

 

Теперь по поводу n. В формуле действительно важно определить с чего начинается с 0 или 1 (“…окно только существует для цен с n=1...n=N), если смещаете на 1, то смещается все и N-1, становиться N, а не N-2

Точная формула окна Ханна выглядит вот так

p(t) = 0.5[1+cos(pi*t/tаu)]

 Для тех, кто хочет чуть глубже изучить эту тему прилагаю файл с лекцией. 

Для трейдеров

Постараюсь пояснить, про что мы тут говорим, на известном Вам всем примере.

https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma

Всем известно:

а) простое скользящее среднее (Simple Moving Average, SMA).

У него окно прямоугольное, т.е. каждое значение цены имеет одинаковый вес a[i]= 1, независимо от глубины истории.

б) линейно-взвешенное скользящее среднее (Linear Weighted Moving Average, LWMA)

Во взвешенном скользящем среднем последним данным присваивается больший вес, а более ранним — меньший.

т.е. коэффициенты окна а[1]=1, a[2]=1/2,a[3]=1/3 …. a[n]=1/n

З.Ы. gpwr тоже рад общению, радиоинженер всегда найдет общий язык с электронщиком, тем более, если оба не новички в этом деле и говорят на универсальном языке – языке математики.

Файлы:
dsp.rar 1811 kb
Maks
15
Maks  

есть только 3 индикатора - цена, цена закрытия, и простая скользящая средняя

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий