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

 

FIR_filter:

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

Автор: Vladimir

FIR

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

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

 

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

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

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

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

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

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

 pi = 4*MathArctan(1);
 
Prival:

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

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

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

 
lea:

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

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

ошибаетесь. я в свое время 2 недели потерял просто из-за того что пи было задано не с максимальной точностью. сверял построение спектра получаемое в маткаде с тем что сделал используя библиотеку FFT https://www.mql5.com/ru/code/9696
 
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 год работаю. Знаю эти вещи. Хотя всегда спасибо за замечания. Приятно поговорить со знающими людьми.

 
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
 

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