Как лучше поступить с коэффициентами фильтров? - страница 4

 

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

Я так понимаю, это что-то из электроники. Какова философия и теоретическая обоснованность возможности применения их к котировкам?

 

По обработке сигналов есть книги: Sophocles J. Orfanidis, Optimum Signal Processing (и введение Introduction to Signal Processing)

 
Maxim Dmitrievsky:

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

Я так понимаю, это что-то из электроники. Какова философия и теоретическая обоснованность возможности применения их к котировкам?


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

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

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

Насчет философии и обоснованности - нет разницы, что фильтровать, электрические сигналы, котировки или какие-либо другие данные. Задача фильтра - убрать ненужные частоты. Например, ФНЧ давит верхние частоты, во временной области получаем сглаживание котировок, так как убит высокочастотный шум. Я выкладывал графики, там это хорошо видно. Тот же мувинг Simple MA - обычный КИХ-фильтр ФНЧ, только не слишком эффективный. Я его в статье подробно разобрал.

 
Alexey Volchanskiy:


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

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

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

Насчет философии и обоснованности - нет разницы, что фильтровать, электрические сигналы, котировки или какие-либо другие данные. Задача фильтра - убрать ненужные частоты. Например, ФНЧ давит верхние частоты, во временной области получаем сглаживание котировок, так как убит высокочастотный шум. Я выкладывал графики, там это хорошо видно. Тот же мувинг Simple MA - обычный КИХ-фильтр ФНЧ, только не слишком эффективный. Я его в статье подробно разобрал.


а вон ссылка как раз на статью сама подставилась, там как раз об этом

https://www.mql5.com/ru/articles/32

Практическая реализация цифровых фильтров на MQL5 для начинающих
Практическая реализация цифровых фильтров на MQL5 для начинающих
  • 2010.03.19
  • Nikolay Kositsin
  • www.mql5.com
Идее цифровой фильтрации сигналов посвящаются достаточно объёмные темы обсуждения на форумах по построению торговых систем. В этой статье автор знакомит с процессом превращения кода более простого индикатора SMA из своей статьи "Пользовательские индикаторы в MQL5 для начинающих" в код гораздо более сложного универсального цифрового фильтра. В ней также изложены простейшие приёмы замены текста в коде и методика получения простейших навыков по исправлению ошибок программирования.
 
Quantum:

По обработке сигналов есть книги: Sophocles J. Orfanidis, Optimum Signal Processing (и введение Introduction to Signal Processing)


Интересно, что много примеров, правда, все с указателями. А-ля

/* cfir1.c - FIR filter implemented with circular delay-line buffer */

void wrap();

double cfir1(M, h, w, p, x)
double *h, *w, **p, x;
int M;
{                        
       int i;
       double y;

       *(*p)-- = x;
       wrap(M, w, p);                          /* \(p\) now points to \(s\sb{M}\) */

       for (y=0, h+=M, i=M; i>=0; i--) {       /* \(h\) starts at \(h\sb{M}\) */
              y += (*h--) * (*(*p)--);
              wrap(M, w, p);
              }

       return y;
}

У меня пока вот так сделано, это из примера, без классов. В m_Coeff[] надо загрузить коэффициенты.

#define TICK_BUF_SIZE       0x1000              // 4096
#define TICK_BUF_MAX_IDX    (TICK_BUF_SIZE - 1) // 0xFFF
#define OUT_BUF_SIZE        0x10000             // 65536
#define OUT_BUF_MAX_IDX     (OUT_BUF_SIZE - 1)  // 0xFFFF   

double  m_TickBuf[TICK_BUF_SIZE]; // ring-buffer for ticks store
double  m_OutBuf[OUT_BUF_SIZE];   // output ring-buffer
double  m_Coeff[];                // coefficient array
int     m_CoeffSize;              // size of m_Coeff  
int     m_TickBufIdx;             // index of new tick placed in m_TickBuf
int     m_OutBufIdx;              // index of new tick placed in m_OutBuf

//+------------------------------------------------------------------+
//| filter one tick                                                                 |
//+------------------------------------------------------------------+
double  FilterTick(double tick)
  {
   static double acc;
   static int tbIdx;
   acc=0;
   tbIdx=m_TickBufIdx;
   m_TickBuf[m_TickBufIdx]=tick;
   if(m_TickBufIdx==0)
      m_TickBufIdx=TICK_BUF_MAX_IDX;
   else
      m_TickBufIdx--;
// filter in cycle "for""
   for(int n=0; n<m_CoeffSize; n++)
     {
      acc+=m_TickBuf[tbIdx++]*m_Coeff[n];
      tbIdx &=TICK_BUF_MAX_IDX; 
      /* it was little optimization instead if
      if(tbIdx > TICK_BUF_MAX_IDX)
         tbIdx = 0;*/
     }
   m_OutBuf[m_OutBufIdx++]=acc;
   m_OutBufIdx &=OUT_BUF_MAX_IDX;
   return acc;
  }
 
Maxim Dmitrievsky:

а вон ссылка как раз на статью сама подставилась, там как раз об этом


Я про нее и говорил. Тут приведена формула КИХ-фильтра, которые я сам использую. Но я уже написал - все зависит от коэффициентов. Да, они приведены, но без какого-либо описания, поэтому сходу не могу судить. Зато есть реклама компании ))

Я про этот кусочек статьи

----------

Например, можно попытаться построить код на MQL5 для такого цифрового фильтра, как FATL от компании Finware.

В общем виде формула для расчёта цифрового фильтра: 

FILTER = SUM (K(i) * CLOSE (i), FilterPeriod)

где:

SUM — сумма;

K(i) —весовой коэффициент;

CLOSE (i) — цена закрытия текущего бара;

FilterPeriod — число баров для усреднения. 

 
Alexey Volchanskiy:


Я про нее и говорил. Тут приведена формула КИХ-фильтра, которые я сам использую. Но я уже написал - все зависит от коэффициентов. Да, они приведены, но без какого-либо описания, поэтому сходу не могу судить. Зато есть реклама компании ))

Я про этот кусочек статьи

----------

Например, можно попытаться построить код на MQL5 для такого цифрового фильтра, как FATL от компании Finware.

В общем виде формула для расчёта цифрового фильтра: 

FILTER = SUM (K(i) * CLOSE (i), FilterPeriod)

где:

SUM — сумма;

K(i) —весовой коэффициент;

CLOSE (i) — цена закрытия текущего бара;

FilterPeriod — число баров для усреднения. 


Ну понял, то есть это та же самая тема в другой интерпретации
 
Maxim Dmitrievsky:

Ну понял, то есть эта та же самая тема в другой интерпретации


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

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

 
Alexey Volchanskiy:


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

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


Да, помню несколько лет назад прям пиарилась эта тема трейдерам как новое революционное открытие от супер генальных ученых )
 
Maxim Dmitrievsky:

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

Вроде они на обучение так народ набирали. Ну, каждый зарабатывает, как может...
Причина обращения: