Hilfe bei Fourier - Seite 2

 
Amplitude und Phase sind EINE komplexe Zahl, 1 Balken ist auch 1 Zahl, bei der der Imaginärteil = 0 ist. 8 Takte sind also 8 Frequenzen. Fragen wir klot, was er darüber denkt?
 
Etwas sendet die Datei nicht
Ich werde es noch einmal versuchen.
Dateien:
 
Jedenfalls ist das besser :)

//+------------------------------------------------------------------+
//|                                            #_i_SpecktrAnalis.mq4 |
//|                                          Copyright © 2006, klot. |
//|                                                     klot@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, klot."
#property link      "klot@mail.ru"
//---
#include <stdlib.mqh>
#define pi 3.14159265358979323846
//---
#import "#_lib_FFT.ex4"
void realfastfouriertransform(double& a[], int tnn, bool inversefft);
#import
//---
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- buffers
double SpecktrBuffer[];
//---
extern double n=8;// Задает размер массива - степень двойки
extern double f=1.0;// Частота периодической функции
extern double ff=0;// Фаза периодической функции
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,SpecktrBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int tnn1=MathPow(2,n);// По ограничению функции- размер массива длжен быть степенью двойки
   double aa[];
   int N=ArrayResize(aa,tnn1);
   SetIndexDrawBegin(0,Bars-N);
   SetIndexDrawBegin(1,Bars-N);
   //ArrayResize(aa,tnn1+1); //Для косинус-преобразования
   //---
   // Исследование спектра разных функций
   double sig;
   for(int i=0; i<=N-1; i++)
   {
      sig=MathCos(f*i/(2.0*pi)+ff*pi); // Обыкновенная периодическая функция - к рынку не имееет отношения
      //sig=Close[i];
      //sig=iRSI(NULL,0,14,PRICE_CLOSE,i+1);
      aa[i]=sig;
      
   }
   //InSigNormalize(aa); //Нормализация значений 
   // Прямое преобразование Фурье - после выпонения функции в массиве aa[] - спектрограмма
   realfastfouriertransform(aa, tnn1, false); 
   InSigNormalize(aa); //Нормализация значений 
   
   //--- Вывод спектрограммы на экран
   for( i=0; i<=N-1; i++)
   {
      // Модуль комплексного числа
      SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]); 
   }
   //---
   /*
   //realfastfouriertransform(aa, tnn1, true);
   for( i=0; i<=N; i++)
   {
      SpecktrBuffer[i]=aa[i];
   }*/
 
   //----
   return(0);
  }
  
//+------------------------------------------------------------------+
 
//--------------------------------------------------------------------+
void InSigNormalize(double& aa[])
{
   double sum_sqrt;
   int element_count=ArraySize(aa);
   sum_sqrt=0;
   for( int i=0; i<=element_count-1; i++)
   {
      sum_sqrt+=MathPow(aa[i],2);
   }
   sum_sqrt=MathSqrt(sum_sqrt);
   
   if (sum_sqrt!=0)
   {
      for( i=0; i<=element_count-1; i++)
      {
         aa[i]=aa[i]/sum_sqrt;
      }
   }
   return;
}
//---------------------------------------------------------------------+
 
lsv писал (а):
Amplitude und Phase sind EINE komplexe Zahl, 1 Balken ist auch 1 Zahl, bei der der Imaginärteil = 0 ist. 8 Takte sind also 8 Frequenzen. Fragen wir doch mal klot, was er darüber denkt.

Ich habe es mit komplexen Zahlen gemacht:
//--- Ausgabe des Spektrogramms auf dem Bildschirm
for( i=0; i<=N-1; i++)
{
// Modul einer komplexen Zahl
SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]);
}
//---
 
lsv:
Amplitude und Phase sind EINE komplexe Zahl, 1 Balken ist auch 1 Zahl, bei der der Imaginärteil = 0 ist. 8 Takte sind also 8 Frequenzen. Fragen wir klot, was er darüber denkt?
Fragen Sie lieber mich :)
Ich beschäftige mich schon seit mehreren Jahren mit diesem Thema :)
Es gibt sogar eine Reihe von Seiten über TF auf meiner Website
http://www.may.nnov.ru/mak/DSP/Contents.shtml

Oder googeln Sie es.
Hier ist zum Beispiel der erste Link.
http://alglib.sources.ru/fft/realfft.php

Ende der Seite:

Wenn wir dieses Bild mit einem ähnlichen Bild für die komplexe FFT-Funktion vergleichen, stellen wir fest, dass die Frequenzen f-1 bis f-N/2+1 irgendwo verschwunden sind und nur reelle Teile von den Frequenzen f0und fN/2 übrig geblieben sind, die den früheren Platz der komplexen Frequenz f0 einnehmen . Der Grund dafür sind die Symmetrieeigenschaften der Fourier-Transformation: Für die reelle Funktion h(t) gilt, dass H(-f) = H *(f) ist.

Die Frequenzen f-1 bis f-N/2+1 enthalten also keine neuen Informationen mehr, da sie durch komplexe Konjugation ihrer symmetrischen Zwillinge erhalten werden, und die Frequenzen f0und fN/2 haben Imaginärteile gleich Null.

===========================================================
Eine komplexe Zahl enthält 2 unabhängige Komponenten,
Eine komplexe Zahl mit einem Imaginärteil gleich Null enthält 1 unabhängige Komponente.

Wenn die Eingabe eine Reihe komplexer Zahlen ist, erhält man K Frequenzen,
Wenn die Eingabe eine Reihe von reellen Zahlen ist, dann bleibt die Hälfte der Frequenzen übrig.
 
Meine Argumentation ist einfacher: Es gibt ein Theorem, aber ich kann mich nicht mehr an den Nachnamen der Person erinnern, die es bewiesen hat: Um ein analoges Signal in ein digitales umzuwandeln, braucht man doppelt so viele Samples wie die gespeicherte Frequenz, um eine bestimmte Frequenz zu speichern. In unserem Fall gibt es 8 Stichproben, so dass sie Frequenzinformationen für nicht mehr als 4 Perioden speichern können.
 
Kotelnikovs Theorem.
 

Nach der Diskussion zu urteilen, ist dieser Fourier etwas Interessantes, aber leider verstehe ich nicht, worum es dabei geht,
Kann jemand kurz und knapp erklären, was das ist und wie man daraus einen EA macht?

 
Ronen:

Nach der Diskussion zu urteilen, ist diese Fourier etwas Interessantes, aber leider verstehe ich nicht, was wir hier reden,
kann jemand in aller Kürze erklären, was es ist und wie man einen EA aus ihm machen?


Ich kann einige Ungenauigkeiten machen.... Der Punkt ist, dass jede periodische Funktion als Summe von Sinuskomponenten verschiedener Frequenzen dargestellt werden kann, d. h. sie kann in Fourier-Reihen erweitert werden. Die Fourier-Reihe ist die Summe der Sinus- und Kosinuskomponenten der doppelten Frequenz (Oberschwingungen). Durch einige mathematische Manipulationen mit Fourier-Transformationen können Datenreihen als Summe vongleichmäßig variierenden Frequenzsinuskurven dargestellt werden, und für jede Komponente erhalten wir die Amplitude, einfach gesagt den Frequenzgang des Signals (Amplitude der Sinuskurven mit einer Frequenz von 1 Hz, 2, 3 usw.). Durch Manipulation der einzelnen Frequenzkomponenten kann das Signal dann gefiltert werden usw. usw. Das ist in Ordnung, aber eines muss klar sein: Die Funktion muss periodisch sein, auch wenn sie nicht periodisch ist, implizieren diese Verzweigungen, dass sie periodisch ist. Aber wer weiß... vielleicht hat es ja einen gewissen Nutzen.
 
Integer писал (а):
Der Punkt ist, dass jede periodische Funktion dargestellt werden kann als ...

Nun, wenn es nicht zu schwierig ist - ein bisschen mehr für das Niveau eines Dummies:

Vielleicht irre ich mich, aber ich habe den Eindruck, dass kleine TFs recht gut zu dieser Bedingung passen. Ich beobachte es jetzt, indem ich Werte von M1 mit prevBars!=Bars durch globale Variablen übergebe und sie an M15 und H1 mit 1 min. Intervall lese, ich sehe - ob es einen Einstiegspunkt innerhalb eines Balkens der großen TF stark beeinflussen kann. Vielleicht zum Spaß, oder vielleicht - "In jedem Stundenbalken stecken 10p Gewinn :). Oder 15p Verlust :(" Wenn der Sinus/Cosinus wirklich lügt - für Intraday wird es ein echter Mehrwert sein. Das scheint mir so.