Добро пожаловать

dfm pack

Добро пожаловать в раздел помощи программы "Генератор цифровых методов". Хотя этот раздел помощи написан не полностью, он позволит вам понять основное предназначение программы и научиться ей пользоваться. Постепенно я буду пополнять этот раздел новыми описаниями.

Что такое генератор цифровых методов, для чего он создан?

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

Программа распространяется бесплатно в соответствии с принципами "как есть".

Пожалуйста о всех замечаниях и ошибках в работе сообщайте автору.

Copyright © 2004-2005, Сергей Ильюхин


О цифровых фильтрах

Информация о цифровых фильтрах

Ниже приведен цикл статей, содержащий описание цифровых фильтров, и методики их использования в торговле. Материал составлен на основе сайта http://www.may.nnov.ru/mak/.

Если хотите узнать больше о цифровых фильтрах, вы можете получить больше информации в интернете с помощью поисковой системы Яндекс или Google по запросам "цифровой фильтр", "DSP" и т.п.

Анализ временных рядов и цифровая обработка сигналов в торговле
Временные ряды
Что такое цифровой фильтр
Характеристики цифровых фильтров
Импульсная характеристика фильтра
Амплитудно-частотная характеристика фильтра

Далее (Анализ временных рядов) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Анализ временных рядов и цифровая обработка сигналов в торговле

Применяя Технический Анализ (ТА) или разрабатывая свою Механическую Торговую Систему (МТС) трейдеры сталкиваются с рядом вопросов и с проблемой выбора:

· Какие индикаторы использовать?
· Какой смысл они имеют, и что они измеряют и показывают?
· В настоящее время опубликованы сотни (а может быть уже и тысячи) индикаторов. Некоторые отличаются только названием, но в большинстве случаев они различаются и расчетными формулами. Неужели каждый из них измеряет что-то свое?
· А если это не так, и оцениваемых параметров существенно меньше, тогда какие индикаторы из однотипных лучше справляются со своей работой и какие лучше использовать в различных случаях?
· Можно ли каким-то образом сравнить индикаторы между собой?
· Существуют ли какие-то характеристики индикаторов позволяющие это сделать?

Возникает много вопросов, попробуем в них разобраться.

Для начала сделаем оговорку, что под сигналом будем понимать не сигналы МТС, а изменение некоторой величины во времени, например цены.

Такие сигналы принято называть временными рядами (TimeSeries), а область знаний занимающаяся этими задачами так и называется - Анализ временных рядов.

Начнем с того, что большинство применяемых в ТА индикаторов с точки зрения Анализа временных рядов являются обычными линейными цифровыми фильтрами (в дальнейшем просто цифровой фильтр или ЦФ). Большую часть из оставшихся индикаторов можно считать цифровыми фильтрами приближенно. И в любом случае, практически все индикаторы внутри себя содержат скользящие средние, которые являются простейшими (и далеко не самыми лучшими) цифровыми фильтрами низких частот.

Из сказанного можно сделать вывод, что технической основой, на которой базируется ТА, служат цифровые фильтры. Цифровые фильтры давно и хорошо исследованы. Существуют методики расчета как самих фильтров с заданными характеристиками, так и методики расчета характеристик конкретного фильтра заданного скажем его формулой, набором весовых коэффициентов или его импульсной характеристикой.

Далее (Временные ряды) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Временные ряды

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

Временные ряды, которые интересуют нас в первую очередь – это динамика изменения курсов валют и акций. Обычно временной ряд содержит значения через равные промежутки времени. Этот промежуток времени называют периодом съема данных. Для курсов это может быть минута, час, день или даже месяц. Вообще говоря, динамику курсов принято характеризовать пятью величинами:

Open - цена открытия периода
High - наибольшая цена за период
Low - наименьшая цена за период
Close - цена закрытия периода
Volume - объем операций за период, он может быть выражен в разных единицах, но в любом случае он характеризует активность рынка

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

Приведенные выше временные ряды служат исходными данными в т ехническом анализе. Любое выражение от этих величин также будет временным рядом. Например, такое выражение TP:=(High+Low+Close)/3 дает типичную цену (TypicalPrice в MetaStock и Omega), а выражение DP:=TP-Ref(TP,-N)) дает оценку скорости изменения типичной цены. Результатом работы любого индикатора также является один или несколько временных рядов. Например, RSI и скользящие средние дают по одному временному ряду на выходе, а Bollinger Bands дает три временных ряда, один для верхней границы канала, один для нижней границы и один для середины канала.

Область знаний занимающаяся анализом и обработкой временных рядов так и называется - "Анализ временных рядов".

Задачи анализа и обработки временных рядов возникали не только у трейдеров.

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

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

Дисциплина, занимающаяся этими задачами, называется – «Анализ временных рядов и обработка сигналов», или другое название, появившееся с началом применения компьютеров в этой области – «Цифровая обработка сигналов» (DSP – Digital Signal Processing).

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

Далее (Что такое цифровой фильтр) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Что такое цифровой фильтр

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

Вот несколько примеров:

Простое скользящее среднее (SMA). Как известно, оно вычисляется как среднее значение последних N элементов временного ряда. Это пример ЦФ с конечной импульсной характеристикой (КИХ-фильтра).

Треугольное и взвешенное средние (Triangular & Weighted). Эти скользящие средние вычисляются так же как и простое среднее, но члены временного ряда берутся с разными весами. Для треугольного среднего веса образуют треугольник, т.е. наибольший вес имеют средние элементы, а наименьший крайние. Для взвешенного среднего наибольший вес имеют последние элементы ряда, наименьший самые старые. Это тоже примеры КИХ-фильтров, но уже с другими характеристиками.

Экспоненциальное среднее (EMA). Вычисляется по формуле Y[i] = Y[i-1] + (X[i] - Y[i-1]) * Alpha. Здесь X - это данные на входе фильтра, Y - данные на выходе фильтра, Alpha - коэффициент в диапазоне от 0 до 1, определяющий степень сглаживания, чем он меньше, тем сильнее будут сглажены данные. На первый взгляд, формула для экспоненциального среднего совсем не похожа на формулу для простого или треугольного скользящего среднего. Но если вместо Y[i-1] подставить его значение, вычисленное по той же формуле и повторить эту процедуру много раз, то мы получим формулу для Y[i] выраженную только через значения X с убывающими весами. Последнее значение будет иметь максимальный вес (равный Alpha), а каждое предыдущее будет иметь вес в (1 - Alpha) раз меньше. Это похоже на взвешенное среднее, но в отличие от него, все члены ряда X имеют ненулевые веса. Это пример ЦФ с бесконечной импульсной характеристикой (БИХ-фильтра) 1 порядка.

Сюда можно еще добавить такие известные индикаторы и их комбинации, как Momentum, ROC, MACD, TRIX, разность двух скользящих средних с разными периодами или взятые в разные моменты времени и многие другие. Не буду их сейчас детально расписывать. Все они являются цифровыми фильтрами и сводятся к сумме (конечной или бесконечной) членов входного ряда взятых с некоторыми весами или к конечной сумме нескольких последних членов входного ряда и возможно нескольких членов выходного ряда взятых с некоторыми весами. Набор весов и определяет свойства фильтра. Вот мы и подошли к формуле линейного цифрового фильтра, она записывается следующим образом:

Y[i] = B[0] X[i] + B[1] X[i-1] + .... - A[1] Y[i-1] - A[2] Y[i-2] - ....

Здесь X – входной временной ряд, Y – выходной ряд, A и B – наборы весовых коэффициентов.

Далее (Характеристики цифровых фильтров) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Характеристики цифровых фильтров

Цифровой фильтр полностью описывается его импульсной характеристикой. Импульсная характеристика – это реакция фильтра на единичный импульс поданный на его вход. Другая характеристика, используемая при изучении и проектировании ЦФ, называется переходной характеристикой. Она показывает, что делает фильтр с разными частотными составляющими входного сигнала, как он изменяет спектр сигнала.

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

Переходная характеристика показывает как фильтр изменяет амплитуду и фазу частотных составляющих входного сигнала. Так как переходная характеристика – это комплексная функция частоты и изобразить ее на бумаге довольно трудно, а может быть и бессмысленно, то принято рисовать отдельно зависимость амплитуды от частоты – Амплитудно-Частотная Характеристика (АЧХ) и зависимость сдвига фазы от частоты – Фазо-Частотная Характеристика (ФЧХ).

Еще одной важной для нас характеристикой фильтра является величина задержки сигнала на выходе фильтра по сравнению со входным сигналом. В общем случае эта задержка зависит от частоты сигнала и называется Групповым Временем Задержки (ГВЗ).

Нужно отметить, что свойства линейного цифрового фильтра полностью и однозначно определяются его импульсной или переходной характеристиками, и никаких дополнительных, неучтенных особенностей они не имеют. Этот факт позволяет сравнивать между собой различные ЦФ и индикаторы сравнивая их амплитудно-частотные и фазовые характеристики.

Далее (Импульсная характеристика) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Импульсная характеристика фильтра

Импульсной характеристикой называют реакцию фильтра на единичный импульс поданный на его вход. Под единичным импульсом понимается такой сигнал, что в момент времени t=0 он равен 1, а во все остальные моменты времени он равен нулю.

Фильтры с конечной импульсной характеристикой

Фильтром с конечной импульсной характеристикой (КИХ-фильтром) называют цифровые фильтры у которых импульсная характеристика имеет конечную длину. Т.е. только ограниченное число член входного ряда вносит свой вклад в формирование выходного сигнала. Для реализации таких свойств КИХ-фильтры не могут иметь рекурсивных членов (коэффициенты A). Примерами КИХ-фильтров могут быть простое скользящее среднее, треугольное скользящее среднее, Momentum и многие другие.

КИХ-фильтры имеют более простую формулу для вычислений, но при этом их частотные характеристики несколько хуже, чем у БИХ-фильтров.

Фильтры с бесконечной импульсной характеристикой

Фильтром с бесконечной импульсной характеристикой (БИХ-фильтром) называют цифровые фильтры у которых импульсная характеристика имеет бесконечную длину. Т.е. любой член входного ряда, даже очень удаленный от текущего момента времени, вносит свой вклад (может быть исчезающе малый) в формирование выходного сигнала. Поскольку количество весовых коэффициентов в формуле линейного цифрового фильтра ограничено, БИХ-фильтр должен иметь хотя бы один ненулевой рекурсивный член (коэффициент A).

Примерами БИХ-фильтров могут быть экспоненциальное скользящее среднее, фильтры Баттерворта, фильтры и индикаторы использующие в вычислениях другие БИХ-фильтры (например TRIX) и некоторые другие.

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

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

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

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

Сама по себе импульсная характеристика может быть не очень удобна для изучения свойств ЦФ, поэтому вместо нее обычно используют производные от нее Амплитудно-частотную (АЧХ) и Фазо-частотную характеристики (ФЧХ). Они связаны с импульсной характеристикой преобразованием Фурье. Эта связь опять же взаимно однозначна, т.е. из АЧХ и ФЧХ можно восстановить импульсную характеристику.

Далее (Амплитудно-частотная характеристика) >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Амплитудно-частотная характеристика фильтра

Амплитудно-частотная характеристика (АЧХ) показывает зависимость коэффициента передачи фильтра от частоты сигнала подаваемого на вход фильтра. Это одна из важнейших характеристик фильтра. Коэффициент передачи - это отношение амплитуды выходного сигнала к амплитуде входного. Если коэффициент передачи равен 1, это означает, что сигнал на выходе совпадает по амплитуде с входным. Если коэффициент передачи меньше 1, значит сигнал с данной частотой подавляется фильтром.

Коэффициент передачи принято измерять либо в абсолютных единицах, либо в логарифмических - децибелах (dB). Децибелы пришли к нам из радиоэлектроники и составляют десятые доли Белла, где Белл - это десятичный логарифм от коэффициента передачи. Кроме того в радиоэлектронике принято измерять коэффициент передачи для мощности сигнала, а не для амплитуды, отсюда появляется множитель 2. Короче говоря, абсолютные и логарифмические единицы связаны формулой:

M(dB) = 20 * Log10(M)

Для логарифмических единиц полезно запомнить пару цифр. Значению в 6dB соответствует уменьшение амплитуды в 2 раза и соответствующую частоту принято называть частотой отсечки фильтра. Значению в 20dB соответствует уменьшение сигнала в 10 раз, значению 40dB уменьшение в 100 раз и т.д.

В начало >>

Описание цифровых фильтров - Copyright © Юрий Макаров, http://www.may.nnov.ru/mak/


Работа с программой

Генератор цифровых методов - это программа, реализующая алгоритм синтеза цифрового КИХ-фильтра по алгоритму Паркса-МакГлеллана двумя вариантами.

1. Первый вариант создан на основе программы цифровой фильтрации, созданной в 1995 автором Jake Janovetz (janovetz@coewl.cen.uiuc.edu), см. http://www.dsptutor.freeuk.com/remez/RemezFIRFilterDesign.html

2. Второй вариант создан с применением библиотеки цифровой фильтрации MtxVec 1.51, в которой воплощен алгоритм, описанный в литературе:

· Discrette-time signal processing. Openheim and Schafer, Prentice-Hall, 1989
· Theory and application of digital signal processing, Lawrence R. Rabiner and Bernand Gold. Prentice-Hall, 1975

Программа умеет работать напрямую с файлами истории котировок от основных пакетов технического анализа:

· MetaStock
· Rumus ForexClub
· Gordago Stock Optimizer - *.gtk
· MetaTrader (версии 3.х и 4.х) - *.hst
· А также текстовые CSV-файлы в форматах DD.MM.YYYY, HH:MM, open, hi, low, close, value или YYYY.MM.DD, HH:MM, open, hi, low, close, value

Генератор позволяет создать готовый код индикатора, пригодный для использования в следующих программах технического анализа:

· Omega ProSuite 2000i
· MetaStock
· MetaTrader (языки MQL2 и MQL4)
· Rumus ForexClub

а также получить набор рассчитанных коэффициентов, которые можно использовать в любых других программах

Спектральный анализ реализован по методу максимальной энтропии (Burg J.P. Maximum Entropy Spectral Analysis. Oklahoma City, OK, 1967.)

· Расчет фильтров
· Наборы фильтров
· Сравнение характеристик фильтров
· Спектральный анализ
· Пример использования цифровых фильтров

Далее (Расчет фильтров) >>

Copyright © 2004-2005, Сергей Ильюхин


Расчет фильтров

Диалог расчета фильтров

Диалог расчета цифровых фильтров позволит вам осуществить расчет коэффициентов и представить их в форме уже готовых индикаторов. Всего программа может осуществить расчет четырех вариантов фильтров:

· Низких частот (FATL/SATL, RFTL/RSTL, KGLP)
· Высоких частот (KGHP)
· Полосовой (RBCI, KGBP)
· Режекторный (KGPS)

Вызов диалога осуществляется по нажатию на кнопку filter generator icon или вызову команды из меню "View->Генератор фильтров"

Любые параметры фильтров можно сохранить в файле (Ctrl+S или File->Сохранить) для дальнейшего использования.

Особенности использованием получаемого текста

Как добавить индикатор в Omega ProSuite:

Создайте в EasyLanguage PowerEditor пустой индикатор, для этого выберите пункт меню File/New. В появившемся окне выберите Indicator и введите какое-либо название (придумайте сами). После открытия пустого окна индикатора скопируйте туда полностью сгенерированный текст индикатора и скомпилируйте код, нажва клавишу F3. Полученный индикатор можно добавлять на график в TradeStation так же как и другие индикаторы.

Как добавить индикатор в MetaTrader

Сохраните текст индикаторв в MQL-коде в папке experts/indicator там где у вас установлен MetaTrader. Перезапустите MetaTrader или откройте текст индикатора в MetaEditor и нажмите кнопку Verify для компиляции кода индикатора. Теперь можно добавлять индикатор на график в MetaTrader как пользовательский индикатор

Как добавить индикатор в Metastock:

Поскольку в Метастоке есть ограничение на длину индикатора в 20 строк, то вам нужно будет создать несколько частей одного индикатора по числу блоков, разделенных полосой "--------------", и затем один главный индикатор в котором суммируются все части.

Предположим, что вы создали четыре индикатора part1, part2, part3 и part4. Тогда текст индикатора цифровых фильтров должен быть таким:

Fml("part1")+Fml("part2")+Fml("part3")+Fml("part4")

Новые индикаторы создаются в Метастоке через меню Tools/Indicator Builder

Как добавить индикатор в Rumus ForexClub

На момент написания этой инструкции в Rumus 1.5.х к сожалению не реализована возможность сохранения и открытия текста индикаторов из файлов. Поэтому все действия по установке индикатора на график вам придется делать вручную:

1. Запустить Rumus
2. В меню "Данные" выбрать пункт "Список индикаторов"
3. Откроется окно со списком доступных в программе индикаторов. В окне со списком доступных в программе индикаторов нужно нажать кнопку "New..".
4. Откроется окно, в котором нужно будет ввести название индикатора, а в большом окне внизу - весь текст с коэффициентами, которые предоставит программа
5. Теперь можно накладывать на график индикатор, щелкнув правой кнопкой мыши на графике, и выбрав пункт меню "Индикаторы"

Расчет фильтров низкой частоты

Синтез фильтра низкой частоты (индикаторы FATL, SATL / KGLP ) На двух рисунках ниже изображена амплитудно-частотная характеристика фильтра и указаны все параметры необходимые для его синтеза. Координатная ось X левого рисунка размечена в периодах, а правого в частотах.

LowPass filter | HighPass filter
Увеличить рисунок 1 | Увеличить рисунок 2

При синтезе ФНЧ необходимо указать несколько параметров. Пример заполнения указан ниже:

filter parameters

Период отсечки цифрового фильтра, P1

Обычно, при проектировании фильтров задают ЧАСТОТУ отсечки, но при проектировании индикаторов гораздо удобнее задавать ПЕРИОД отсечки в барах. Все колебания циклов рынка с периодом меньшим чем P1 бар будут погашены. При проектировании аналога скользящей средней этот параметр соответствует периоду скользящей средней.

Период отсечки переходного периода, D1

Переходный период - отличительная особенность цифрового фильтра, связанная с тем, что реальные фильтры отличаются от идеальных (теоретических) и разделение частот (периодов) возможно только с конечной точностью, которую определяет переходный период. Рекомендуемое значение этого параметра для быстрых (FATL) индикаторов P1-2 дня. Для более медленных (SATL) следует выставлять разницу между P1 и D1 побольше. Смысл этого параметра в том, что колебания будут подавлены не мгновенно на P1, а в течении времени от P1 до D1 они будут постепенно подавляться, а после D1 будут полностью подавлены.

Величина биений в области пропускания, R

Этот параметр описывает величину искажений в полосе пропускания фильтра. Желательно выставлять его как можно меньше, поскольку в этом случае искажения будут соответственно меньше. Обратной стороной уменьшения этого параметра является увеличение длины фильтра.

Величина затухания в области задерживания, A1

Этот параметр описывает насколько хорошо будут гаситься ненужные колебания. Рекомендуемое значение -40 Дб. Такое значение параметра определяет гашение ненужных колебаний в 100 раз.

Задержка, бар

Этот параметр необходим для построения запаздывающих индикаторов с задержкой на выбранный период торговых свечей, таких как RFTL, RSTL. Индикаторы с задержкой применяются в некоторых механических торговых системах, таких как AT&CF Владимира Кравчука, см. пример использования цифровых фильтров. За счет запаздывания достигается большая гладкость и предсказуемость индикатора. Чем больше запаздывание, тем глаже и предсказуемей поведение индикатора. Для получения индикатора из пакета AT&CF-метода необходимо задавать этот параметр равным интервалу Найквиста для данного фильтра, который, как известно, равен половине периода отсечки. В это значение параметр устанавливается программой автоматически при расчете необходимой длины фильтра. Впрочем, можно и поэкспериментировать с этим параметром, устанавливая его больше или меньше интервала Найквиста.

Метод расчета

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

filter order

Сразу при указании параметров фильтра программа осуществляет расчет длины его коэффициентов. Если вам необходимо изменить длину коэффициентов фильтра, снимите крыжик "Автоматически" и укажите требуемый порядок фильтра.

filter autoorder

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

Затем нажмите на кнопку "Расчет параметров" и подождите пока программа осуществит расчет. Если при расчетах выяснилось, что фильтр рассчитать невозможно, программа сообщит об этом красной надписью. После осуществления расчета коэффициентов фильтра выберите для какой программы технического анализа вам необходимо получить индикаторы:

filter format

Получение текста индикатора

После указания формата индикатора в окне справа программа выведет его текст:

filter text

При необходимости вы можете выбрать какую цену брать за основу - цену закрытия Close или так называемую среднюю, вычисляемую как (High+Low)/2. В зависимости от выбранных условий программа переформирует текст индикатора

Живая импульсная характеристика

Набор коэффициентов цифрового индикатора - это характеристика на отклик единичного импульса. Этот набор можно представить в виде графика:

filter impulse response

Точки на этом графике можно двигать, соответственно этим изменениям будет перерасчитан текст индикатора

Просмотр фильтра

Вы сразу же можете просмотреть получившийся фильтр в окне "Вид индикатора в программе теханализа". По умолчанию программа осуществляет расчет случайных значений. Вы можете открыть (Ctrl+O или File->Открыть) файл истории котировок в форматах:
· Gordago Stock Optimizer (*.gtk)
· MetaTrader (*.hst)
· Metastock (Rumus) (MASTER-файл)
и посмотреть готовый фильтр прямо на рыночных котировках.

filter view

Крыжик "Separate?" приведет к тому, что индикатор будет выведен в отдельном окне внизу основного графика (необходимо для построения полосовых фильтров типа RBCI, см. ниже)

Слева вверху расположены три кнопки

· Обновить график - заменяет свечной график новыми случайными значениями. Если вы открыли файл с историей котировок, то будете выведено содержимое этого файла
· Увеличить график
· Уменьшить график

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

filter characteristic

Расчет полосовых (индикатор KGBP, RBCI) и режекторных фильтров (индикатор KGBS)

При расчете полосового фильтра добавляются еще три параметра к уже описанным. См. рисунок ниже:

Полосовой фильтр | Режекторный фильтр
BandPass filter | BandStop filter
Увеличить рисунок 3 | Увеличить рисунок 4

Это дополнительные параметры:

· Период отсечки цифрового фильтра, P2
· Период отсечки переходного периода, D2
· Величина затухания в области задерживания, A2

Остальные параметры такие же, как и у описанных выше фильтров

Сохранение получишихся фильтров

Осуществляется по нажатии иконки с изображением дискетки или через меню (Ctrl+S или File->Сохранить). Вы можете сохранить в файле:

· Текст индикатора
· Параметры фильтра для дальнейшего использования

В начало >>

Copyright © 2004-2005, Сергей Ильюхин


Наборы фильтров

Работа с наборами фильтров

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

Обратите внимание! Такой диалог имеет смысл использовать только в том случае, если вы пользуетесь индикаторами для MetaTrader платформы. Для Omega TradeStation или Equis Metastock использование данного диалога не предусмотрено.

Принцип работы

Зачастую для работы требуется создать индикатор, в котором используется два или больше фильтров для того чтобы произвести необходимые вычисления. Например, это индикаторы FTLM (Fast Trend Line Momentum) и STLM (Slow Trend Line Momentum), который показывают темп изменения (падения или роста) FATL и SATL и вычисляются аналогично индикатору Momentum по формулам:

FTLM(k) = FATL(k) – RFTL(k),
STLM(k) = SATL(k) – RSTL(k).

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

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

1. Сначала идет MQL-код заголовка без каких-либо изменений
2. Затем единым блоком последовательно - рассчитанные коэффициенты каждого фильтра
3. Заканчивается текст индикатора заключительным MQL-кодом

При нажатии на кнопку "Calculate" программа последовательно рассчитает все фильтры, и предложить сохранить MQL-код фильтра.

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

Создание нового индикатора

Нажатием на кнопку "+" расположенную внизу слева, вы можете добавлять любое количество фильтров с заданными параметрами.

Диалог ввода нового или редактирования фильтра выглядит следующим образом:

filter set

Основной набор параметров цифровых фильтров описан в предыдущем разделе и полностью им идентичен

Название фильтра в MQL-коде

По сути это название переменной, которой будет присвоен набор коэффициентов из рассчитанного фильтра

Название переменной индекса смещения

Дополнительная переменная, указываемая в смещении выбранного бара, например

указана как shift

+0.0168532934*Close[shift+24]
+0.0121825067*Close[shift+25]
+0.0067474241*Close[shift+26]
+0.0012444305*Close[shift+27]
-0.0037087682*Close[shift+28]
-0.0076300416*Close[shift+29]

или указана как i

+0.0168532934*Close[i+24]
+0.0121825067*Close[i+25]
+0.0067474241*Close[i+26]
+0.0012444305*Close[i+27]
-0.0037087682*Close[i+28]
-0.0076300416*Close[i+29]

Далее необходимо указать MQL-код заголовка и завершения индикатора.

После нажатия кнопки Calculate программа произведет поочередной расчет параметров каждого фильтра и предложит сохранить результаты расчета в MQL-коде индикатора.

Например, если вы добавите два разных фильтра, а результаты расчета ("название фильтра") поместите в переменные value1 и value2, то при записи в файл вы получите запись вида

value1 =
0.2149840610*Close[shift+0]
+0.2065763732*Close[shift+1]
+0.1903728890*Close[shift+2]
+0.1675422436*Close[shift+3]
+0.1397053150*Close[shift+4]
[... и так далее]

value2 =
0.0740020474*Close[shift+0]
+0.0849638500*Close[shift+1]
+0.0937931173*Close[shift+2]
+0.0999822858*Close[shift+3]
+0.1031703947*Close[shift+4]
[... и так далее]

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

В начало >>

Copyright © 2004-2005, Сергей Ильюхин


Сравнение характеристик фильтров

Сравнение характеристик нескольких фильтров

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

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

Как это делается?

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

Исходный фильтр может быть задан следующими путями:

· Из диалога генератора фильтров (путем нажатия кнопки Сравнить)
· Из набора коэффициентов MQL- или MQ4-файла
· Из скомпилированного EXP-файла (экспериментальная поддержка с версии 1.0.49)
· Из CSV-файла, содержащего котировки и отклик скомилированного EXP- или EX4-файла

Если при открытии исходного файла с коэффициентами было найдено несколько наборов коэффициентов, программа предложить выбрать один:

filter coefficients

После импорта фильтра вы можете осуществить визуальный подбор параметров нескольких кривулин:

filter response

Если вы имеете только скомпилированный код индикатора

То вам необходимо применить этот индикатор на любой истории с котировками. Для этого возьмите индикатор, позволяющий через iCustom открыть скомпилированный код и записать в файл отклик этого фильтра вместе с котировками.

Для MQL2 например код такого индикатора может быть следующим:

/*[[
   Name := SaveExp
   Separate Window := No
   First Color := Blue
   First Draw Type := Line
   First Symbol := 217
   Use Second Data := No
   Second Color := Red
   Second Draw Type := Line
   Second Symbol := 218
]]*/
Inputs : Bar(1400),LastBar(1); //количество записываемых баров, № бара до которого пишем
Variables : EXPFileName("XX FATL"), shift(0),NumBar(0),sName(" "),file(0),ss1(" "),ss2(" "),Ex1(0), Ex2(0);
Variables : Ye(0),Mo(0),Da(0),Ho(0),Mi(0),Se(0),Ti(0);
SetLoopCount(0);
// loop from first bar to current bar (with shift=0)
      print(sName);
If NumBar<bars Then //работаем только при смене бара! ну и при первом запуске еще.
   {
      sName=Symbol+Period; //формируем имя файла, типа "EURUSR1440.csv".
      print(sName);
      FileDelete(sName); //старое файло сносим
      file=FileOpen(sName, ","); //типа открыли
      For shift=(Bar+LastBar-1) Downto LastBar //цикла - пишем стока, скока заказывали
         Begin
            Ti=T[shift]; //время бара в сек. вытаскиваем из него все, что надо
            Ye=TimeYear(Ti);
            Mo=TimeMonth(Ti);
            Da=TimeDay(Ti);
            Ho=TimeHour(Ti);
            Mi=TimeMinute(Ti);
            Se=TimeSeconds(Ti);
            ss1=Ye;
            If Mo<10 Then ss1=ss1+"0"+Mo Else ss1=ss1+Mo;
            If Da<10 Then ss1=ss1+"0"+Da Else ss1=ss1+Da; //ss1 - ГГГГММДД
            If Ho<10 Then ss2="0"+Ho Else ss2=Ho;
            If Mi<10 Then ss2=ss2+"0"+Mi Else ss2=ss2+Mi;
            If Se<10 Then ss2=ss2+"0"+Se Else ss2=ss2+Se; //ss2 - ЧЧММСС
            Ex1 = iCustom("XX FATL",MODE_FIRST,shift); //в EXPFileName пишем название индикатора
            FileWrite(file,ss1,ss2,O[shift],H[shift],L[shift],C[shift],Ex1); //пишем очередной бар
         End;
      NumBar=Bars; //метим бар - на нем уже отработали.
      FileClose(file); //закрыли файл.
      SetIndexValue(0, 0);
   };

Для MQL4 код такого индикатора может быть следующим:

#property copyright "Copyright c 2006, Staker"
#property link "mailto:staker@bk.ru"
#property indicator_chart_window

#define IndicatorName "FATL(D)"

int NumBars, Range = 300;
string ExpFile;

int init()
   {
   NumBars = 0;
   ExpFile = StringConcatenate(Symbol(), Period(), ".CSV");
   return(0);
   }

int deinit()
   {
   return(0);
   }

int start()
   {
   string MyDate, MyTime;
   double ExtVal;
   if (NumBars == Bars) return(0);
   int Handle = FileOpen(ExpFile, FILE_CSV | FILE_WRITE, ',');
   if (Handle <= 0) return(-1);
   for (int Shift = MathMin(Bars - 1, Range); Shift > 0; Shift --)
      {
      datetime Ti = Time[Shift];
      int Ye = TimeYear(Ti);
      int Mo = TimeMonth(Ti);
      int Da = TimeDay(Ti);
      int Ho = TimeHour(Ti);
      int Mi = TimeMinute(Ti);
      int Se = TimeSeconds(Ti);
      if (Mo < 10) MyDate = StringConcatenate(Ye, ".", 0, Mo, ".");
      else MyDate = StringConcatenate(Ye, ".", Mo, ".");
      if (Da < 10) MyDate = StringConcatenate(MyDate, 0, Da);
      else MyDate = StringConcatenate(MyDate, Da);
      if (Ho < 10) MyTime = StringConcatenate(0, Ho, ":");
      else MyTime = StringConcatenate(Ho, ":");
      if (Mi < 10) MyTime = StringConcatenate(MyTime, 0, Mi);
      else MyTime = StringConcatenate(MyTime, Mi);
      ExtVal = iCustom(NULL, 0, IndicatorName, 0, Shift);
      ExtVal = MathRound(ExtVal / Point) * Point;
      FileWrite(Handle, MyDate, MyTime, Open[Shift], High[Shift], Low[Shift], Close[Shift], ExtVal);
      }
   NumBars = Bars;
   FileClose(Handle);
   Print("Файл ", ExpFile, " сформирован.");
   return(0);
   }

После работы индикатора мы получаем CSV-файл, содержащий семь колонок, разделенных запятыми:

· Дата ГГГГММДД
· Время ЧЧММСС
· Open
· High
· Low
· Close
· Отклик индикатора

Получившийся файл необходимо открыть в диалоге сравнения - вы увидите график котировок и некую кривулину. Далее необходимо создать новый фильтр и визуально осуществить подбор параметров.

Автоматический подбор

Диалог автоматического подбора параметров вызывается путем нажатия на кнопку optimize icon

(Кнопка будет доступна только после того как вы откроете набор коэффициентов или CSV-файл с откликов фильтра). Алгоритм осуществляет последовательный расчет всех комбинаций фильтров и вычисляет корреляцию и ошибку на указанном диапазоне исторических данных (но не менее 100 баров).

filter optimize

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

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

Данный метод работы называется brute force или метод "грубой силы" - когда подбор параметров осуществляется "влоб", последовательно перебирая все комбинации.

Внимание! Указание большого диапазона параметров приведет к тому, что расчет может занять длительное время!

После окончания подбора программа выведет параметры фильтра, обладающие наибольшей корреляцией и наименьшей ошибкой расхождения с исходным фильтром.

Данный диалог был разработан в опытных целях и в настоящее время позволяет осуществлять подбор только низкочастотных фильтров. Кроме того, в нем не реализованы существующие генетические алгоритмы оптимизации параметров, существенно (на порядок или больше) ускоряющие процесс перебора.

В начало >>

Copyright © 2004-2005, Сергей Ильюхин


Спектральный анализ

Данный диалог позволяет рассчитать спектр котировок в заданном диапазоне. Вы можете открыть файл в формате *.hst (MetaTrader 3 или 4), либо в *.csv-формате (который может быть также создан в программе MetaTrader).

Далее вам необходимо указать диапазон выборки и нажать на кнопку "Расчет". Программа осуществит расчет спектра предложенной выборки и отобразит его в графике снизу.

mesa spectrum

Предложенный алгоритм расчета спектра на мой взгляд не самый лучший и я с благодарностью приму от пользователей программы любые пожелания по улучшению алгоритма расчета параметров спектра методом максимальной энтропии плотности мощности (MESA)

В начало >>

Copyright © 2004-2005, Сергей Ильюхин


Пример ипользования цифровых фильтров

Пример использования цифровых фильтров в торговой системе

Индикаторы метода AT&CF (Adaptive Trend & Cycles Following).

FATL (Fast Adaptive Trend Line)– «быстрая» адаптивная линия тренда получается с использованием цифрового фильтра низкой частоты ФНЧ-1. Фильтр ФНЧ-1 служит для подавления высокочастотных шумов, а также рыночных циклов с очень короткими периодами колебаний, которые также можно считать шумом.

SATL (Slow Adaptive Trend Line)– «медленная» адаптивная линия тренда получается с помощью цифрового фильтра низкой частоты ФНЧ-2. ФНЧ-2 служит для подавления шумов и рыночных циклов с более длинными периодами колебаний.

Параметры этих фильтров (частота среза fc и затухание A в полосе задерживания) рассчитывались с использованием спектральных оценок валютного курса EUR/USD. Фильтры низкой частоты ФНЧ-1 и ФНЧ-2 обеспечивают затухание A в полосезадерживания не менее 40 дБ и абсолютно не искажают амплитуду и фазу входного дискретного ряда цен закрытия в полосе пропускания. Эти свойства цифровых фильтров обеспечивают значительно лучшее (по сравнению с простым скользящим усреднением) подавление шумов, что, в свою очередь, позволяет резко уменьшить вероятность появления «ложных» сигналов на покупку или продажу

Аналогов FATL и SATL среди широко известных технических инструментов не существует. Это не скользящие «средние», а именно адаптивные оценки линий краткосрочного и долгосрочного тренда. В отличие от скользящих «средних», FATL и SATL не имеют никакого фазового запаздывания относительно текущих цен. Значение FATL(k) является математическим ожиданием цены закрытия close(k), где k –номер торгового дня. Значение N-точечного скользящего «среднего» MA(k), строго говоря, является математическим ожиданием не close(k), а close(k-N/2), где k – номер торгового дня. Значение SATL(k) является математическим ожиданием FATL(k) для любого k на заданном временном интервале T.

RFTL (Reference Fast Trend Line)– опорная «быстрая» линия тренда и RSTL (Reference Slow Trend Line) – опорная «медленная» линия тренда являются откликами цифровых фильтров ФНЧ-1 и ФНЧ-2 на входной дискретный ряд, взятыми с задержками, равными соответствующим интервалам Найквиста TNi. Опорные линии RFTL и RSTL являются аналогами простых скользящих «средних» в смысле их запаздывания относительно текущих цен. Если вместо импульсных характеристик ФНЧ, имеющих сложную форму, использовать импульсную характеристику с весами 1/N, соответствующую процедуре N-точечного скользящего усреднения, то аналогия была бы полной. Индикаторы FTLM (Fast Trend Line Momentum) и STLM (Slow Trend Line Momentum) показывают темп изменения (падения или роста) FATL и SATL и вычисляются аналогично индикатору Momentum по формулам:

FTLM(k) = FATL(k) – RFTL(k),
STLM(k) = SATL(k) – RSTL(k).

Главное отличие FTLM и STLM от классического технического инструмента Momentum заключается в том, что для его вычисления используются не цены закрытия, а сглаженные в результате фильтрации значения линий тренда. В результате FTLM и STLM оказываются значительно более гладкими и регулярными функциями, нежели классический инструмент Momentum, и поэтому имеют большую прогностическую ценность. Линии FTLM и STLM вычислялись с соблюдением всех правил дискретной математики как первые разности между ближайшими двумя независимыми точками ограниченных по полосе процессов.

При вычислении классических индикаторов Momentum это требование часто не выполняется, что приводитк неустранимым искажениям в спектре входного сигнала. Специалисты по цифровой обработке сигналов называют такие искажения aliasing, т.е. наложение частот, или неоднозначность. Эта неоднозначность и приводит к сильной нерегулярностии хаотичности классического технического индикатора Momentum.

Набор технических инструментов метода содержит еще два новых осциллятора. Это индексы RBCI и PCCI, также приведенные на рис. 1

Индекс RBCI (Range Bound Channel Index) – ограниченный по полосе индекс канала – вычисляется с помощью полосового фильтра ПФ. Полосовой фильтр выполняет одновременно следующие функции:

· удаляет низкочастотный тренд, формируемый низкочастотными составляющими спектра с периодами, большими T2= 1/fc2;
· удаляет высокочастотный шум, формируемый высокочастотными составляющими спектра с периодами, меньшими T1= 1/fc1.

Периоды T1 и T2 выбираются так,чтобы выполнялось условие T2> T1

Упрощенно RBCI(k) = FATL(k) –SATL(k).

Действительно, когда RBCI приближается к своему локальному максимуму, цены приближаются к верхней границе торгового коридора, а когда RBCI приближается к своему локальному минимуму, цены приближаются к нижней границе торгового коридора.

Отметим основное свойство индекса RBCI. Это квазистационарный (т.е. почти стационарный) процесс, ограниченный по полосе частот как сверху, так и снизу.

Индекс PCCI (Perfect Commodity Channel Index) – совершенный индекс товарного канала – вычисляется по формуле:
PCCI(k) = close(k) – FATL(k).

Он имеет некоторую внешнюю схожесть в способе вычисления с индексом товарного канала CCI(Commodity Channel Index) Д. Лэмберта. Действительно, индекс CCI вычисляется как нормированная разность между текущей ценой и ее скользящей средней, а PCCI – как разность между ценой закрытия дня и ее математическим ожиданием, представленным значением FATL. В этом заключается большая по сравнению с CCI совершенность PCCI. Индекс PCCI – это нормированная на свое стандартное отклонение высокочастотная составляющая колебаний валютного курса.

atcf

Рис. 1. Иллюстрация к методу AT & CF

Основные принципы построения торгового алгоритма и правила интерпретации новых технических инструментов

Основные принципы, которые следует соблюдать при разработке конкретного торгового алгоритма, следующие:

* торговать только в направлении господствующей тенденции, направление которой определяется «медленной» адаптивной линией тренда SATL;
* учитывать динамические характеристики «быстрого» и «медленного» тренда, представленные индикаторами FTLM и STLM;
* использовать информацию о том, в какой области значений (нейтральная, перекупленная, перепроданная, локальный максимум или локальный минимум) находится сумма доминирующих рыночныхциклов (индекс RBCI) в выбранном с помощью спектрального анализа частотном диапазоне;
* считать сигналы осцилляторов вторичными в случаях, когда трендовые индикаторы свидетельствуют о наличии ярко выраженной медвежьей или бычьей тенденции;
* считать сигналы осцилляторов основными в случаях, когда трендовые индикаторы сигнализируют об отсутствии ярко выраженной тенденции;
* использовать гибкую систему защитных стоп-приказов, основанную на показаниях индексов RBCI,PCCI и значениях волатильности «быстрых» колебаний рынка.

Основные правила интерпретации указанных выше инструментовследующие:

* Растущая линия SATL свидетельствует о бычьем тренде на рынке. Точкой начала разворота медвежьего тренда считается точка локального минимума SATL. Точкой завершения разворота медвежьего тренда считается точка, в которой знак STLM сменился с минуса на плюс.
* Падающая линия SATL свидетельствует о медвежьем тренде на рынке. Точкой начала разворота бычьего тренда считается точка локального максимума SATL. Точкой завершения разворота бычьего тренда считается точка, в которой знак STLM сменился с плюса на минус.
* Близкая к горизонтальной форма SATL свидетельствует о нейтральной тенденции.
* Интерпретация STLM требует особого внимания. Положительное значение STLM свидетельствует о бычьем тренде, а отрицательное – о медвежьей тенденции. STLM является опережающим индикатором. Локальный минимум STLM всегда предшествует локальному минимуму SATL. Локальный максимум STLM всегда предшествует локальному максимуму SATL. Достижение STLM своих экстремальных точек является необходимым, но недостаточным условием достижения кривой SATL вершины или дна. Растущий STLM при растущей SATL свидетельствует об ускорении бычьего тренда. Горизонтальный и положительный STLM при растущей SATL свидетельствует об установившемся бычьем тренде. Чем больше абсолютное значение STLM, тем больший потенциал имеет бычий тренд. Падающий STLM при падающей SATL свидетельствует об ускорении медвежьего тренда.

Горизонтальный и отрицательный STLM при растущей SATL свидетельствует об установившемся медвежьем тренде. Чем больше при этом абсолютное значение STLM, тем больший потенциал имеет медвежий тренд.

* Растущая «быстрая» линия тренда FATL при растущей «медленной» линии тренда SATL свидетельствует о сильном бычьем трен-де на рынке.
* Падающая «быстрая» линия FATL при падающей «медленной» линии SATL свидетельствует о сильном медвежьем тренде на рынке.
* Растущая линия FATL при падающей линии SATL свидетельствует либо о бычьей коррекции при медвежьем тренде, либо о консолидации.
* Падающая линия FATL при растущей линии SATL свидетельствует либо о медвежьей коррекции при бычьем тренде, либо о консолидации.
* Начало или возобновление движения в одном направлении линий FATL и SATL сигнализируют либо о развороте тенденции, либо о завершении коррекции и возобновлении движен

В начало >>

Copyright © Владимир Кравчук, 2000-2001


DLL для программ теханализа

Использование цифровых фильтров в программах теханализа (DLL)

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

Именно это неудобство заставило меня написать вспомогательные модули расчета, которые осуществляют расчет фильтров "на лету", при этом вы сразу в своей программе указываете параметры фильтра, не используя программу-генератор. Такие модули называются DLL (Dynamic link library) и с их помощью можно построить цифровые фильтры в таких программах, как:

· MetaTrader 4
· NeuroShell DayTrader 4
· Omega Research ProSuite 2000i
· а также в любых пользовательских программах

Обратите внимание: несмотря на то, то для всех этих программ DLL-файлы называются одинаково (DF.dll), для каждой программы необходима своя персональная DLL, которая выбирается при инсталляции пакета.


MetaTrader 4

Использование DLL расчета цифровых фильтров в программе MetaTrader 4

Библиотека для MetaTrader находится в файле DF.dll. Тестировалась на версии 4.0

Metatrader 4

Параметры вызова:

При вызове функции DigitalFilter из DF.dll необходимо передавать десять параметров:

№
Параметр
Тип
Описание
Величина
1
Filtertype
ByVal Integer (int)
Тип фильтра:
· 0 - ФНЧ (FATL/SATL/KGLP)
· 1 - ФВЧ (KGHP)
· 2 - полосовой (RBCI/KGBP)
· 3 - режекторный (KGBS)
Numeric Value (Integer >=0)
2
P1
ByVal Integer (int)
Период отсечки P1, бар
Numeric Value (Integer >=1)
3
D1
ByVal Integer (int)
Период отсечки переходного процесса D1, бар
Numeric Value (Integer >=1)
4
A1
ByVal Integer (int)
Затухание в полосе задержки А1, дБ
Numeric Value (Integer >=1)
5
P2
ByVal Integer (int)
Период отсечки P2, бар
Numeric Value (Integer >=1)
6
D2
ByVal Integer (int)
Период отсечки переходного процесса D2, бар
Numeric Value (Integer >=1)
7
A2
ByVal Integer (int)
Затухание в полосе задержки А2, дБ
Numeric Value (Integer >=1)
8
Ripple
ByVal Double (double)
Биения в полосе пропускания, дБ
Numeric Value (Real Number >=0)
9
Delay
ByVal Integer (int)
Задержка, бар
Numeric Value (Integer >=0)
10
FilterBuffer
ByRef Double[] (* double)
Ссылка на массив рассчитанных коэфициентов
Массив объявлен статически 1500 элементов

Функция возвращает количество коэфициентов фильтра (ByVal параметр Integer). При ошибке в задании входных параметров возвращается значение -1. При первом вызове DLL производит расчет коэффициентов и выводит график фильтра.

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

При создании ФНЧ/ФВЧ анализируются параметры P1,D1,A1. Параметры P2,D2,A2 используются только при работе с полосовым и режекторными фильтрами.

 Внимание! Для работы требуется три дополнительных DLL, содержащих блок математической обработки - bdsp.dll, lapack.dll,  mkl_support.dll, которые должны быть установлены в C:\Windows\System32\ или рядом с DF.dll в \experts\libraries\

Перед использованием убедитесь:

1. что установлены пункты "Allow DLL import" и "Confirm DLL function's call" в настройках Options->Expert Advisors
2. Что в директории C:\Windows\System32\ имеются Bdsp.dll, lapack.dll, mkl_support.dll - вспомогательные математические библиотеки.

Для ФНЧ и ФВЧ значения параметров P2,D2,A2 игнорируются
Условия работы:
· ФНЧ: P1>D1
· ФВЧ: P1<D1
· Полосовой и режекторный: D2>P2>P1>D1

Прототип функции

#import "DF.dll"
 int DigitalFilter(int FType, int P1, int D1, int A1, int P2, int D2, int A2,
                   double Ripple, int Delay, double& arr[]);

Пример вызова

//---- buffers
double FilterBuffer[1500];

  // Вычисляем цифровой фильтр
  FilterSize=DigitalFilter(FType, P1, D1, A1, P2, D2, A2, Ripple, Delay, FilterBuffer);
  if (FilterSize>0) {
    SetIndexDrawBegin(0,FilterSize);
  } else Print("Incorrect input parameters. Indicator cannot run.");


NeuroShell DayTrader Professional

Использование DLL расчета цифровых фильтров в NeuroShell DayTrader Professional

Библиотека для NeuroShell Trader находится в файле DF.dll. Тестировалась на версии 4.4 rev 5

Neuroshell

Параметры вызова:

При вызове функции DigitalFilter из DF.dll необходимо передавать десять параметров:

Вызов осуществляется как Call by Array (DLL Array)
Procedure Type - Function as ByRef Double (double *)
Включите крыжик "Use the function return as the indicator output"
Все параметры передаются как указатели ByRef

Перечень параметров

№
Параметр
Тип
Описание
Величина
1
Filtertype
ByRef Integer (int *)
Тип фильтра:
· 0 - ФНЧ (FATL/SATL/KGLP)
· 1 - ФВЧ (KGHP)
· 2 - полосовой (RBCI/KGBP)
· 3 - режекторный (KGBS)
Numeric Value (Integer >=0)
2
P1
ByRef Integer (int *)
Период отсечки P1, бар
Numeric Value (Integer >=1)
3
D1
ByRef Integer (int *)
Период отсечки переходного процесса D1, бар
Numeric Value (Integer >=1)
4
A1
ByRef Integer (int *)
Затухание в полосе задержки А1, дБ
Numeric Value (Integer >=1)
5
P2
ByRef Integer (int *)
Период отсечки P2, бар
Numeric Value (Integer >=1)
6
D2
ByRef Integer (int *)
Период отсечки переходного процесса D2, бар
Numeric Value (Integer >=1)
7
A2
ByRef Integer (int *)
Затухание в полосе задержки А2, дБ
Numeric Value (Integer >=1)
8
Ripple
ByRef Double (double *)
Биения в полосе пропускания, дБ
Numeric Value (Real Number >=0)
9
Delay
ByRef Integer (int *)
Задержка, бар
Numeric Value (Integer >=0)
10
Close
ByRef Double (double *)
Close цены из графика

11
BarCount
ByRef Integer (int *)
Количество баров на графике (number of values in Time Series input)

При первом вызове, либо при открыти cht-файла DLL производит расчет коэффициентов и выводит график фильтра.

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

При создании ФНЧ/ФВЧ анализируются параметры P1,D1,A1. Параметры P2,D2,A2 используются только при работе с полосовым и режекторными фильтрами.

Для ФНЧ и ФВЧ значения параметров P2,D2,A2 игнорируются
Условия работы:
· ФНЧ: P1>D1
· ФВЧ: P1<D1
Полосовой и режекторный: D2>P2>P1>D1

Copyright © 2004-2005, Сергей Ильюхин


Omega ProSuite 2000i

Использование DLL расчета цифровых фильтров в Omega ProSuite 2000i

Библиотека для Omega Prosuite находится в файле DF.dll. Тестировалась на версии ProSuite 2000i

Omega 2000

Параметры вызова

При вызове функции DigitalFilter из DF.dll необходимо передавать 12 параметров:

№ | Параметр | Тип | Описание | Величина
1 | Filtertype | ByVal Integer (int) | Тип фильтра: · 0 - ФНЧ (FATL/SATL/KGLP) · 1 - ФВЧ (KGHP) · 2 - полосовой (RBCI/KGBP) · 3 - режекторный (KGBS) | Numeric Value (Integer >=0)
2 | P1 | ByVal Integer (int) | Период отсечки P1, бар | Numeric Value (Integer >=1)
3 | D1 | ByVal Integer (int) | Период отсечки переходного процесса D1, бар | Numeric Value (Integer >=1)
4 | A1 | ByVal Integer (int) | Затухание в полосе задержки А1, дБ | Numeric Value (Integer >=1)
5 | P2 | ByVal Integer (int) | Период отсечки P2, бар | Numeric Value (Integer >=1)
6 | D2 | ByVal Integer (int) | Период отсечки переходного процесса D2, бар | Numeric Value (Integer >=1)
7 | A2 | ByVal Integer (int) | Затухание в полосе задержки А2, дБ | Numeric Value (Integer >=1)
8 | Ripple | ByVal Float (Float) | Биения в полосе пропускания, дБ | Numeric Value (Real Number >=0)
9 | Delay | ByVal Integer (int) | Задержка, бар | Numeric Value (Integer >=0)
10 | ClosePointrer | (LPLONG)&Close | Close цены из графика |
11 | Scale | (Float) PriceScale | Делитель цены Close |
12 | BarCount | (INT)CurrentBar | Номер текущего бара на графике |

При первом вызове, либо при открытии файла с чартом DLL производит расчет коэффициентов и выводит график фильтра.

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

При создании ФНЧ/ФВЧ анализируются параметры P1,D1,A1. Параметры P2,D2,A2 используются только при работе с полосовым и режекторными фильтрами.

Для ФНЧ и ФВЧ значения параметров P2,D2,A2 игнорируются
Условия работы:
· ФНЧ: P1>D1
· ФВЧ: P1<D1
Полосовой и режекторный: D2>P2>P1>D1

Пример кода индикатора

Input: FilterType(0), P1(40), D1(22), A1(40), P2(50), D2(60), A2(40), Ripple(0.01), Delay(0);
var: FilterResponse(0), Scale(PriceScale);

{ Внимание! Для работы требуется три дополнительных DLL
  содержащих блок математической обработки - bdsp.dll, lapack.dll, mkl_support.dll,
  которые должны быть установлены в C:\Windows\System32\ }

DefineDLLFunc: "DF.dll", Float, "DigitalFilter",
              INT, INT, INT, INT, INT, INT, INT, FLOAT, INT, LPLONG, FLOAT, INT;

{function DigitalFilter(
         FType: Integer;    // Тип фильтра 0-ФНЧ (FATL/SATL/KGLP), 1 - ФВЧ (KGHP),
                            // 2-полосовой (RBCI/KGBP) 3- режекторный (KGBS)
         P1: Integer;       // Период отсечки P1, бар
         D1: Integer;       // Период отсечки переходного процесса D1, бар
         A1: Integer;       // Затухание в полосе задержки А1, дБ
         P2: Integer;       // Период отсечки P2, бар
         D2: Integer;       // Период отсечки переходного процесса D2, бар
         A2: Integer;       // Затухание в полосе задержки А2, дБ
         Ripple: Float;     // Биения в полосе пропускания, дБ
         Delay: Integer;    // Задержка, бар
         ClosePtr: LPLong;  // Входная цена ClosePtr
         Scale: Float;      // Делитель цены ClosePtr {Уж как в ELKit32.dll сделано}
         CurrentBar: Integer // номер текущего бара в графике
         ):Float; export; stdcall;
}

{ CALL the DLL FUNCTION }

FilterResponse = DigitalFilter(FilterType, P1, D1, A1, P2, D2, A2,
          Ripple, Delay, (LPLONG)&Close, (Float)Scale, (INT)CurrentBar);

Plot1(FilterResponse);


DLL для программ пользователя

Использование DLL расчета цифровых фильтров в пользовательских программах

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

Параметры вызова:

При вызове функции DigitalFilter из Filter.dll необходимо передавать десять параметров:

№
Параметр
Тип
Описание
Величина
1
Filtertype
ByRef Integer (int *)
Тип фильтра:
· 0 - ФНЧ (FATL/SATL/KGLP)
· 1 - ФВЧ (KGHP)
· 2 - полосовой (RBCI/KGBP)
· 3 - режекторный (KGBS)
Numeric Value (Integer >=0)
2
P1
ByRef Integer (int *)
Период отсечки P1, бар
Numeric Value (Integer >=1)
3
D1
ByRef Integer (int *)
Период отсечки переходного процесса D1, бар
Numeric Value (Integer >=1)
4
A1
ByRef Integer (int *)
Затухание в полосе задержки А1, дБ
Numeric Value (Integer >=1)
5
P2
ByRef Integer (int *)
Период отсечки P2, бар
Numeric Value (Integer >=1)
6
D2
ByRef Integer (int *)
Период отсечки переходного процесса D2, бар
Numeric Value (Integer >=1)
7
A2
ByRef Integer (int *)
Затухание в полосе задержки А2, дБ
Numeric Value (Integer >=1)
8
Ripple
ByRef Double (double *)
Биения в полосе пропускания, дБ
Numeric Value (Real Number >=0)
9
Delay
ByRef Integer (int *)
Задержка, бар
Numeric Value (Integer >=0)
10
Order
ByRef Integer (int *)
Порядок фильтра (возвращаемое количество коэффициентов)

При первом вызове DLL производит расчет коэффициентов и выводит график фильтра.

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

При создании ФНЧ/ФВЧ анализируются параметры P1,D1,A1. Параметры P2,D2,A2 используются только при работе с полосовым и режекторными фильтрами.

Для ФНЧ и ФВЧ значения параметров P2,D2,A2 игнорируются
Условия работы:
· ФНЧ: P1>D1
· ФВЧ: P1<D1
Полосовой и режекторный: D2>P2>P1>D1

Прототип функции для языка Delphi:

const
  MAXORDER = 1500; // Макс порядок фильтра

type
   TAFilter = array[0..MAXORDER] of Double;
   PAFilter = ^TAFilter;
   PDouble = ^Double;
   PInteger = ^Integer;

function DigitalFilter(
   const FType: PInteger;    // Тип фильтра 0-ФНЧ (FATL/SATL/KGLP), 1 - ФВЧ (KGHP),
                             // 2-полосовой (RBCI/KGBP) 3- режекторный (KGBS)
   const P1: PInteger;       // Период отсечки P1, бар
   const D1: PInteger;       // Период отсечки переходного процесса D1, бар
   const A1: PInteger;       // Затухание в полосе задержки А1, дБ
   const P2: PInteger;       // Период отсечки P2, бар
   const D2: PInteger;       // Период отсечки переходного процесса D2, бар
   const A2: PInteger;       // Затухание в полосе задержки А2, дБ
   const Ripple: PDouble;    // Биения в полосе пропускания, дБ
   const Delay: PInteger;    // Задержка, бар
         Order: PInteger     // Указатель на порядок фильтра
         ):PAFilter; stdcall;

Функция возвращает указатель на массив коэффициентов TAFilter
Массив коэффициентов должен быть освобождён при помощи функции HeapFree.

Пример вызова DLL из языка Delphi находится в дистрибутиве


Часто задаваемые вопросы (FAQ)

На этой странице собраны наиболее часто задаваемые вопросы по программе

1. Можно ли в Вашей программе получить аналоги индикаторов В. Кравчука?

Да, именно для этого и разработана предлагаемая программа.

2. Генерит ли программа все индикаторы (FATL, SATL, RFTL, RSTL, FTLM, STLM, RBCI, PCCI)?

Программа позволяет получить MQL-код индикаторов метода AT&CF:

FATL/SATL (низкочастотный фильтр без задержек)
RFTL/RSTL (низкочастотный фильтр с задержкой)
RBCI (полосовой фильтр без задержки)

Индикаторы FTLM, STLM и PCCI являются производными от вышеперечисленных. Напрямую через диалог "Расчет фильтров" их получить нельзя. Вы можете вручную доработать получаемый код от индикаторов по простым формулам, указанным в описании метода AT&CF. Кроме того, вы можете создать шаблон такого фильтра в диалоге "Наборы фильтров" и осуществлять расчет через него.

3. Можно ли получить четкие указания по каждому индикатору - какие параметры для него нужно установить?

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

4. Мне сказали (я читал) что там-то (на таком-то сайте) рекомендуются такие-то конкретные параметры для фильтров. Я могу их использовать?

Указанные параметры возможно КОГДА-ТО были применимы. Рынок меняется постоянно, и какие параметры нужно использовать сейчас - я не в курсе. Поймите, что вы имеете дело с еще одним классом технических индикаторов. Возьмите простейшую среднюю - каким должен быть ее период? Надеюсь вы понимаете, что вопрос поставлен некорректно - непонятно с каким таймфреймом вы имеете дело, на каком инструменте, какие правила торговой системы. Все эти величины зависят от требований вашей системы. Это же касается и индикаторов с задержкой из метода AT&CF. Подбирайте визуально по графику и решайте что вам лучше.

5. Программа сама подставляет числовые значения, или все-таки нужно выставлять параметры вручную?

Сама по себе программа не в курсе, какие вам требуются значения. Она просто запоминает последние введенные параметры. В случае когда вы переключаете типы фильтров, программа сразу же исправляет значения периодов. Если вы прочтете описание, то вам станет понятно, почему период P1 должен быть больше D1, а D2 - больше P2. Именно по этой причине все некорректные для каждого типа фильтров значения автоматически заменяются на ближайшие допустимые.

6. Как рассчитать необходимые параметры фильтров по спектральной оценке курса?

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

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

По такому принципу строятся все фильтры - ФНЧ (FATL, SATL) и полосовые (RBCI). Поскольку периоды должны подбираться "на глазок", то в определенном смысле это скорее искусство нежели строгая математика.

Кроме того, для оптимизации торговых систем имеет смысл осуществлять подбор параметров в определенных рамках - для получения более лучших показателей. Для таких целей удобно воспользоваться расчетом цифровых фильтров "на лету" с применением DLL.

7. У меня при открытии CSV-файла с котировками возникает ошибка. Почему?

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

· DD.MM.YYYY, HH:MM, open, hi, low, close, value
· YYYY.MM.DD, HH:MM, open, hi, low, close, value


Благодарности

Программа разработана благодаря

· Keny (Олег, Красноярск, unclekenny@yandex.ru)
· Goodman'у (Зябрев Илья, Москва, info@goodman.ru)
· Cobalt (Москва)

Эти люди помогли сделать программу в том виде, в котором вы ее видите. В качестве основы была положена идея сделать софт лучше чем другие программы аналогичного класса (Keny+Goodman). Goodman предоставил техническое задание, исходные коды и объяснил как делать софт, включая интерфейс ввода данных и алгоритмы расчета.

В программе использован алгоритм открытия hst-файлов (c) Cobalt

Помощь при тестировании

· Цыганков Андрей, Москва gypsy@mail.ru
· Елизаров Олег, Самара TOPpoint@yandex.ru

Распространяется бесплатно в соответствии с принципами "AS-IS". Любые пожелания по доработке данного софта за ваши WMZ/WMR приветствуются.

Пожалуйста о всех замечаниях и ошибках в работе сообщайте автору.


Связь с автором

Связь с автором программного пакета

Сергей Ильюхин aka UA9OTY

Email sergey@tibet.ru, ua9oty@qrz.ru
ICQ 7426815

Распространяется бесплатно в соответствии с принципами "AS-IS".

Пожалуйста о всех замечаниях и ошибках в работе сообщайте автору.


АЧХ фильтра низкой частоты, период

Амлитудно-частотная характеристика цифрового фильтра

Координатная ось X рисунка размечена в периодах, бар

LowPass filter period


АЧХ фильтра низкой частоты, частота

Амлитудно-частотная характеристика цифрового фильтра

Координатная ось X рисунка размечена в частоте (1/период)

LowPass filter frequency


АЧХ полосового фильтра

Амлитудно-частотная характеристика полосового фильтра

BandPass filter big


АЧХ режекторного фильтра

Амлитудно-частотная характеристика режекторного фильтра

BandStop filter big