Aide avec Fourier - page 2

 
L'amplitude et la phase sont UN nombre complexe, 1 barre est aussi 1 nombre dans lequel la partie imaginaire = 0. Par conséquent, 8 mesures correspondent à 8 fréquences. Demandons à Klot ce qu'il en pense ?
 
Quelque chose n'envoie pas le fichier
Je vais réessayer.
Dossiers :
 
Quoi qu'il en soit, c'est mieux :)

//+------------------------------------------------------------------+
//|                                            #_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 писал (а):
L'amplitude et la phase sont UN nombre complexe, 1 barre est aussi 1 nombre dans lequel la partie imaginaire = 0. Par conséquent, 8 mesures correspondent à 8 fréquences. Demandons à Klot ce qu'il en pense.

Je l'ai fait avec des nombres complexes :
//--- Sortie du spectrogramme à l'écran
for( i=0 ; i<=N-1 ; i++)
{
// Module d'un nombre complexe
SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]);
}
//---
 
lsv:
L'amplitude et la phase sont UN nombre complexe, 1 barre est aussi 1 nombre dans lequel la partie imaginaire = 0. Par conséquent, 8 mesures correspondent à 8 fréquences. Demandons à Klot ce qu'il en pense ?
Vous feriez mieux de me demander :)
Je m'occupe de ce sujet depuis plusieurs années :)
il y a même un tas de pages sur le TF sur mon site web
http://www.may.nnov.ru/mak/DSP/Contents.shtml

Ou googlez-le.
Voici le premier lien, par exemple.
http://alglib.sources.ru/fft/realfft.php

fin de la page :

Si nous comparons cette image avec une image similaire pour la fonction complexe FFT, nous remarquons que les fréquences f-1 à f-N/2+1 ont disparu quelque part, et qu'il ne reste que des parties réelles des fréquences f0et fN/2, prenant l'ancienne place de la fréquence complexe f0. La raison en est les propriétés de symétrie de la transformée de Fourier : pour la fonction réelle h(t ), il est vrai que H(-f) = H *(f).

Ainsi, les fréquences f-1 à f-N/2+1 ne portent plus aucune information nouvelle, puisqu'elles sont obtenues par conjugaison complexe de leurs jumelles symétriques, et les fréquences f0et fN/2 ont des parties imaginaires égales à zéro.

===========================================================
Un nombre complexe contient 2 composants indépendants,
Un nombre complexe dont la partie imaginaire est égale à zéro contient 1 composante indépendante.

Si l'entrée est une série de nombres complexes, on obtient des fréquences K,
Si l'entrée est un nombre de nombres réels, alors la moitié des fréquences restent.
 
Mon raisonnement est plus simple : il existe un théorème, mais je ne me souviens plus du nom de la personne qui l'a démontré : pour convertir un signal analogique en numérique, il faut deux fois plus d'échantillons pour stocker une certaine fréquence que la fréquence stockée. Dans notre cas, il y a 8 échantillons, ils peuvent donc stocker des informations de fréquence pour 4 périodes au maximum.
 
Le théorème de Kotelnikov.
 

A en juger par la discussion, ce Fourier est quelque chose d'intéressant, mais malheureusement je ne comprends pas de quoi il s'agit,
Quelqu'un peut-il expliquer en quelques mots ce que c'est et comment en faire un EA ?

 
Ronen:

A en juger par la discussion, ce Fourier est quelque chose d'intéressant, mais malheureusement je ne comprends pas de quoi nous parlons ici,
quelqu'un peut-il expliquer en quelques mots ce que c'est et comment en faire un EA ?


Je peux faire quelques inexactitudes.... Le fait est que toute fonction périodique peut être représentée comme une somme de composantes sinusoïdales de différentes fréquences, c'est-à-dire qu'elle peut être développée en série de Fourier. La série de Fourier est la somme des composantes sinus et cosinus de fréquence double (harmoniques). Par certaines manipulations mathématiques avec des transformées de Fourier, les séries de données peuvent être présentées comme une somme de sinusoïdes de fréquence variantuniformément et pour chaque composante nous obtenons l'amplitude, en d'autres termes, nous obtenons la réponse en fréquence du signal (amplitude des sinusoïdes avec une fréquence de 1 Hz, 2, 3, etc.) Ensuite, en manipulant chaque composante de fréquence, il est possible de filtrer le signal, etc. etc. C'est bon, mais une chose, la fonction doit être périodique, même si elle ne l'est pas, ces perobranches impliquent qu'elle est périodique. Mais qui sait... peut-être qu'il y a un avantage à cela.
 
Integer писал (а):
Le fait est que toute fonction périodique peut être représentée par ...

Eh bien, si ce n'est pas trop difficile - un peu plus pour le niveau de l'idiot :

Je me trompe peut-être, mais il me semble que les petites TF s'adaptent plutôt bien à cette condition. Je l'observe maintenant, en passant les valeurs de M1 avec prevBars!=Bars par des variables globales et en les lisant à M15 et H1 avec un intervalle de 1 min. Je vois - si cela peut fortement affecter un point d'entrée dans une barre du TF majeur. Peut-être pour le plaisir, ou peut-être - "Dans chaque barre horaire se trouve 10p de profit :). Si le sinus/cosinus ment vraiment, pour l'intraday, ce sera un vrai complément. Il me semble.