"

HP Extrapolator

by Dr.Hamdi Boukamcha
Name:
HP Extrapolator [ ru ]
Author: gpwr (2009.01.15 10:15)
Rating: 10
Downloaded: 3716
Download:
HP Extrapolator   HP.mq4 (2.1 Kb) View
HP Extrapolator   HP Extrapolator.mq4 (4.8 Kb) View

Автор: gpwr

Описание:

Отличительное качество фильтра Ходрика-Прескота в том что он не имеет задержки. Рассчитывается он путём минимизации целевой функции

F = Sum((y[i] – x[i])^2,i=0..n-1) + lambda*Sum((y[i+1]+y[i-1]-2*y[i])^2,i=1..n-2)

где x[] – цены, y[] – значения фильтра. Вот пример поведения этого фильтра (см приложенный файл HP.mq4)

HP Extrapolator

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

y[i] = Sum(a[k]*x[i-k],k=0..nx-1) – FIR фильтр

или

y[i] = Sum(a[k]*x[i-k],k=0..nx-1) + Sum(b[k]*y[i-k],k=1..ny) – IIR фильтр

Предпочтительно выбрать такой “фильтр-близнец”, который имел бы частотно-независимую задержку Тзад (constant group delay). IIR фильтры в таком случае не подходят. Для FIR фильтров, условием частотно-независимой задержки является

a[i] = +/-a[nx-1-i], i = 0..nx-1

Простейшим FIR фильтром с постоянной задержкой является Simple Moving Average (SMA):

y[i] = Sum(x[i-k],k=0..nx-1)/nx

При нечётном nx, задержка такого фильтра равна Тзад = (nx-1)/2. Если сдвинуть значения этого SMA фильтра в прошлое на количество баров равному задержке Тзад, то SMA значения совпадут со значениями фильтра Ходрика-Прескота. Точного совпадения достичь невозможно из-за существенной разницы в частотных характеристик двух фильтров проиллюстрированной на этом графике

HP Extrapolator

Чтобы достичь наиболее близкого совпадения между значениями обоих фильтров, желательно выбрать их ширину пропускания (например, на уровне -6dB) одинаковой. Ширина пропускания на уровне -6dB фильтра Ходрика-Прескота расчитывается по формуле

wc = 2*arcsin(0.5/lambda^0.25).

Ширина пропускания на уровне -6dB для SMA фильтра находится численными методами из уравнения

|H(w)| = sin(nx*wc/2)/sin(wc/2)/nx = 0.5

График внизу сравнивает значения двух фильтров при одинаковой полосе пропускания: красный цвет – фильтр Ходрика-Прескота (FiltPer = 25), синий цвет – SMA (Period = 15, Shift = -7). Заметьте что SMA (синий) для последних 7 баров не существует, т.к. ему нужно знать будущие цены. Фильтр Ходрика-Прескота (красный), с другой стороны, показывает какие-то значения. Если предположить что при появлении будущих цен, сдвинутый SMA будет повторять значения фильтра Ходрика-Прескота на последних 7 барах, то какие эти будущие значения должны быть?

HP Extrapolator

Алгоритмы предсказания:

В индикаторе встроены два метода предсказания:

Metod 1:

1. Задаём длинну SMA равную 3 и сдвигаем SMA в прошлое на 1 бар. При такой длинне, сдвинутый SMA не существует только для последнего бара (Bar = 0), т.к. ему нужно значение следующей будущей цены Close[-1].

2. Рассчитываем частоту пропускания SMA. Приравниваем эту частоту к частоте пропускания фильтра Ходрика-Прескота. Находим lambda.

3. Рассчитываем значение фильтра Ходрика-Прескота на последнем баре HP[0] и предполагаем что SMA[0] с неизвестной Close[-1] даёт такое же значение.

4. Находим Close[-1] = 3*HP[0] – Close[0] – Close[1]

5. Увеличиваем длинну SMA до 5. Повторяем все вычисления и находим Close[-2] = 5*HP[0] – Close[-1] – Close[0] – Close[1] – Close[2]. И так далее пока не рассчитано заданное количество будущих цен FutBars.

Metod 2:

1. Задаём длинну SMA равную 2*FutBars+1 и сдвигаем SMA в прошлое на FutBars

2. Рассчитываем частоту пропускания SMA. Приравниваем эту частоту к частоте пропускания фильтра Ходрика-Прескота. Находим lambda.

3. Рассчитываем значения фильтра Ходрика-Прескота на последних FutBars барах и предполагаем что SMA поведёт себя таким же образом при появлении новых цен.

4. Находим Close[-1] = (2*FutBars+1)*HP[FutBars-1] – Sum(Close[i],i=0..2*FutBars-1), Close[-2] = (2*FutBars+1)*HP[FutBars-2] – Sum(Close[i],i=-1..2*FutBars-2), и т.д.

В индикаторе следующие входные данные:

Method – метод предсказания

LastBar – номер последнего бара для проверки предсказания на существуящих ценах (LastBar >= 0)

PastBars – количество прошлых баров для которых будет рассчитываться фильтр Ходрика-Прескотта (чем больше тем лучше или, по крайней мере, PastBars>2*FutBars)

FutBars – количество предсказанных будущих значений

Индикатор красным цветом строит предсказанные значения. В следующем примере используется Metod 1:

HP Extrapolator

Metod 2:

HP Extrapolator

Второй метод имеет тенденцию более точного предсказания, но часто имеет большие выбросы первой предсказанной цены. Описанный метод предсказания может улучшен путём нахождения FIR фильтра с частотной характеристикой более близкой к той фильтра Ходрика-Прескота. Например, вместо SMA, можно попробовать Hanning, Blackman, Kaiser и другие фильтры с постоянной задержкой.

Автор благодарен Korey за публикацию оригинального индикатора построения фильтра Ходрика-Прескота в следующей ветке форума:

http://forum.mql4.com/ru/18404/page2

5 comments  To post a new comment, please log in or register

Comment in PORTUGUESE. Indicador HP cruzando (crossover) com média móvel de 7 períodos (preço de fechamento) se revelou fácil e excelente. Simples. Experimente. Parabéns ! jmailto:[email protected]

26.08.2010 20:37 jrportobr

Comment in PORTUGUESE. Indicador HP cruzando (crossover) com média móvel de 7 períodos (preço de fechamento) se revelou fácil e excelente. Simples. Experimente. Parabéns ! jmailto:[email protected]

26.08.2010 20:36 jrportobr

You don’t even know what you’ve created!

Contact me directly and I’ll show you.

Forget the prediction. This is dead end.

But the Hodrick-Prescott Filter implementation – this is what I’m about 🙂

ALX

02.10.2009 14:13 alxalx

Would you please in english ? Rgds

18.01.2009 03:19 jskchan

i dont understand,difficult!

Share this article

Leave a comment