Wie kann man am besten mit den Filterkoeffizienten umgehen? - Seite 4

 

Entschuldigen Sie, dass ich so laienhaft bin, aber sind digitale Filter wie SATL, FATL usw. Ihrer Arbeit ähnlich oder kommen sie aus einem anderen Bereich?

Ich habe gehört, dass es etwas mit Elektronik zu tun hat. Was ist die Philosophie und die theoretische Gültigkeit der Anwendung auf Zitate?

 

Zur Signalverarbeitung siehe Sophocles J. Orfanidis, Optimum Signal Processing (and Introduction to Signal Processing)

 
Maxim Dmitrievsky:

Entschuldigen Sie, dass ich so laienhaft bin, aber sind digitale Filter wie SATL, FATL usw. etwas, das Ihrer Arbeit nahe kommt, oder kommen sie aus einem anderen Bereich?

Ich nehme an, es handelt sich um etwas Elektronisches. Was ist die Philosophie und die theoretische Gültigkeit der Anwendung auf Zitate?


Können Sie mir einen Link zu einer Beschreibung dieser Art von Filtern geben? Dann wäre ich in der Lage, eine klare Antwort zu geben. Bei flüchtiger Lektüre habe ich in dem Artikel keine Beschreibung gefunden.

Ich mache eine Klasse für Filter mit endlicher Impulsantwort FIR oder FIR auf Englisch. Und welche Art und Parameter sie haben werden, wird allein durch die Koeffizienten bestimmt, der Algorithmus ist für alle derselbe.

Ich berücksichtige Koeffizienten für elliptische Filter, da sie am kürzesten sind und daher die geringsten Verzögerungen aufweisen.

Zur Philosophie und Validität: Es macht keinen Unterschied, was gefiltert wird, elektrische Signale, Kurse oder andere Daten. Die Aufgabe des Filters ist es, unnötige Frequenzen zu entfernen. Ein LPF z. B. unterdrückt die oberen Frequenzen, im Zeitbereich erhalten wir eine Glättung der Zitate, weil das hochfrequente Rauschen unterdrückt wird. Ich habe Diagramme gepostet, in denen dies deutlich zu sehen ist. Das gleiche Simple MA mouving ist ein gängiges FIR-Filter, aber nicht sehr effektiv. Ich habe mir das in dem Artikel ausführlich angesehen.

 
Alexey Volchanskiy:


Können Sie mir einen Link zu einer Beschreibung dieser Art von Filtern geben? Dann wäre ich in der Lage, eine klare Antwort zu geben. Bei flüchtiger Lektüre habe ich in dem Artikel keine Beschreibung gefunden.

Ich mache eine Klasse für Filter mit endlicher Impulsantwort FIR oder FIR auf Englisch. Und welche Art und Parameter sie haben, wird allein durch Koeffizienten bestimmt, der Algorithmus ist für alle gleich.

Ich berücksichtige Koeffizienten für elliptische Filter, da sie am kürzesten sind und daher die geringsten Verzögerungen aufweisen.

Zur Philosophie und Validität: Es macht keinen Unterschied, was gefiltert wird, elektrische Signale, Kurse oder andere Daten. Die Aufgabe des Filters ist es, unnötige Frequenzen zu entfernen. Ein LPF z. B. unterdrückt die oberen Frequenzen, im Zeitbereich erhalten wir eine Glättung der Zitate, weil das hochfrequente Rauschen unterdrückt wird. Ich habe Diagramme gepostet, auf denen dies deutlich zu sehen ist. Das gleiche Simple MA mouving ist ein gängiges FIR-Filter, aber nicht sehr effektiv. Ich habe sie in dem Artikel ausführlich beschrieben.


Aber dort wurde der Link zu dem Artikel von selbst eingefügt, der sich mit genau diesem Thema befasst.

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

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

Für die Signalverarbeitung gibt es Bücher: Sophocles J. Orfanidis, Optimum Signal Processing (and Introduction to Signal Processing)


Interessant ist, dass es viele Beispiele gibt, allerdings alle mit Zeigern. A la

/* 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;
}

Ich habe dies bisher getan, dies ist aus dem Beispiel, ohne Klassen. Inm_Coeff[] müssen wir Koeffizienten laden.

#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:

Und da hat sich der Link zum Artikel von selbst eingefügt; es geht genau um diesen Punkt.


Das ist es, was ich gemeint habe. Hier ist die Formel des FIR-Filters, die ich selbst verwende. Aber ich habe ja schon geschrieben, dass es auf die Koeffizienten ankommt. Ja, sie werden angegeben, aber ohne jede Beschreibung, so dass ich sie nicht beurteilen kann. Aber es gibt eine Anzeige des Unternehmens )).

Ich beziehe mich auf diesen Teil des Artikels

----------

Sie könnten zum Beispiel versuchen, in MQL5 einen Code für einen digitalen Filter wie FATL von Finware zu erstellen.

Die Formel für die Berechnung eines digitalen Filters lautet im Allgemeinen:

FILTER = SUMME (K(i) * CLOSE (i), FilterPeriode)

wo:

SUM - Summe;

K(i) - Gewichtungsfaktor;

CLOSE (i) - Schlusskurs des aktuellen Balkens;

FilterPeriod - Anzahl der Balken für die Mittelwertbildung.

 
Alexey Volchanskiy:


Das ist es, was ich meinte. Hier ist die Formel des FIR-Filters, den ich selbst verwende. Aber ich habe bereits geschrieben, dass alles von Koeffizienten abhängt. Ja, sie werden angegeben, aber ohne jede Beschreibung, so dass ich nicht sofort ein Urteil abgeben kann. Aber es gibt eine Anzeige des Unternehmens )).

Ich beziehe mich auf diesen Teil des Artikels

----------

Sie könnten zum Beispiel versuchen, in MQL5 einen Code für einen digitalen Filter wie FATL von Finware zu erstellen.

Die Formel für die Berechnung eines digitalen Filters lautet im Allgemeinen:

FILTER = SUMME (K(i) * CLOSE (i), FilterPeriode)

wo:

SUM - Summe;

K(i) - Gewichtungsfaktor;

CLOSE (i) - Schlusskurs des aktuellen Balkens;

FilterPeriod - Anzahl der Balken für die Mittelwertbildung.


Verstehe, es geht also um dasselbe Thema in einer anderen Interpretation
 
Maxim Dmitrievsky:

Ich verstehe, es geht also um dasselbe Thema in einer anderen Interpretation.


Na ja, man kann sich ja nichts anderes vorstellen)) Ein FIR-Filter ist denkbar einfach: Die Zitate aus dem Eingangspuffer werden nacheinander mit dem Koeffizientenfeld multipliziert, alles wird addiert, und wir erhalten das Ausgangssignal. Wenn wir mit Ticks arbeiten, erhalten wir einen Ausgabe-Tick. Oder Bar, wenn wir mit Close arbeiten.

Deshalb ist es lächerlich zu behaupten, dass ein Unternehmen einen revolutionären Filter für die Kursanalyse entwickelt hat). Revolutionen gab es schon lange in anderen Bereichen.

 
Alexey Volchanskiy:


Nun, etwas anderes fällt Ihnen hier nicht ein)) Ein FIR-Filter ist sehr einfach: Zitate aus dem Eingangspuffer werden mit einem Array von Koeffizienten multipliziert, das Ganze wird addiert und ergibt den Ausgangstick. Wenn wir mit Ticks arbeiten, erhalten wir einen Ausgabe-Tick. Oder Bar, wenn wir mit Close arbeiten.

Deshalb ist es lächerlich zu behaupten, dass ein Unternehmen einen revolutionären Filter für die Kursanalyse entwickelt hat). Revolutionen gab es schon lange in anderen Bereichen.


Ja, vor einigen Jahren wurde dieses Thema den Händlern als eine neue revolutionäre Entdeckung genialer Wissenschaftler angepriesen).
 
Maxim Dmitrievsky:

Ja, ich erinnere mich, dass dieses Thema vor ein paar Jahren den Händlern als neue revolutionäre Entdeckung genialer Wissenschaftler angepriesen wurde).

Sie rekrutierten Leute für die Ausbildung. Nun, jeder verdient so viel, wie er oder sie kann...