Помогите разобраться с Фурье - страница 2

 
Амплитуда и фаза это ОДНО комплексное число, 1 бар – это тоже 1 число в котором мнимая часть = 0. Поэтому 8 баров – 8 частот. Давайте спросим у klot, что он по этому поводу думает?
 
Что-то не файл не отправляется
еще раз попробую
Файлы:
 
Вообщем вот так лучше :)

//+------------------------------------------------------------------+
//|                                            #_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 писал (а):
Амплитуда и фаза это ОДНО комплексное число, 1 бар – это тоже 1 число в котором мнимая часть = 0. Поэтому 8 баров – 8 частот. Давайте спросим у klot, что он по этому поводу думает?

С комплексными числами я так делал:
//--- Вывод спектрограммы на экран
for( i=0; i<=N-1; i++)
{
// Модуль комплексного числа
SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]);
}
//---
 
lsv:
Амплитуда и фаза это ОДНО комплексное число, 1 бар – это тоже 1 число в котором мнимая часть = 0. Поэтому 8 баров – 8 частот. Давайте спросим у klot, что он по этому поводу думает?
Спросите лучше меня :)
Я несколько лет занимался этой темой :)
вот даже на моем сайте кучка страниц про ЦФ есть
http://www.may.nnov.ru/mak/DSP/Contents.shtml

Или в гугле пошукайте ..
Вот к примеру первая же ссылка
http://alglib.sources.ru/fft/realfft.php

конец страницы:

Если сравнить эту картинку с аналогичной для БПФ комплексной функции, то мы заметим, что частоты с f-1 по f-N/2+1 куда-то исчезли, а от частот f0 и fN/2 остались только вещественные части, занявшие прежнее место комплексной частоты f0 . Причиной этого являются свойства симметрии преобразования Фурье: для вещественной функции h(t) верно, что H(-f) = H *(f).

Таким образом, частоты с f-1 по f-N/2+1 уже не несут в себе новой информации, т.к. получаются комплексным сопряжением своих симметричных близнецов, а у частот f0 и fN/2 мнимые части равны нолю.

===========================================================
Комплексное число содержит 2 независимые компоненты,
комплексное число с мнимой частью равной нулю содержит 1 независимую компоненту.

Если на входе ряд комплексных чисел, то получаем К частот,
если на входе ряд вещественных чисел, то остается половина частот.
 
Я рассуждаю проще: Есть такая теорема, только фамилию не помню того, кто ее доказал: для преобразования аналогового сигнала в цифровой для сохранения определенной частоты требуется в два раза больше семплов чем сохраняемая частота. В нашем случае имеется 8 семплов, поэтому они могут хранить информацию о частоте не более 4 периодов.
 
Теорема Котельникова.
 

Судя по обсуждению,этот Фурье что-то интересное,но я,к сожалению, вообще не понимаю о чем тут речь,
может кто нибудь, в двух словах объяснит,что это такое и как из этого советники делать?

 
Ronen:

Судя по обсуждению,этот Фурье что-то интересное,но я,к сожалению, вообще не понимаю о чем тут речь,
может кто нибудь, в двух словах объяснит,что это такое и как из этого советники делать?


Могу некоторые неточности допустить.... Суть в том, что любую периодическую функцию можно представить в виде суммы синусоидальных составляющих различной частоты, т.е. разложить в ряд Фурье. Ряд Фурье представляеь собой сумму синусоид и косинусоид удваивающейся частоты (гармоник). Путем некоторых математематических манипуляций при помощи преобразований Фурье ряд данных можно представить как сумму синусоид равномерно изменяющейся частоты и для каждой составляющей получить апмлитуду, попросту говоря получить частотную характеристику сигнала (умплитуду синусоид с частотой 1 гц, 2, 3 и тд). Затем путем манипуляций с каждой частотной составляющей возможно фильтровать сигнал и т.д. и т.п. Всё ничего, но одно но -  функция должна быть периодической, даже если она не периодическая, то эти перобразования подразумевают, что она периодическая. Хотя кто знает... может быть от этого есть какая-то польза.
 
Integer писал (а):
Суть в том, что любую периодическую функцию можно представить в виде ...

Ну тогда, ежели не трудно - еще чуть-чуть для уровня чайника:

Может я не прав, но мне кажется, что малые ТФ достаточно хорошо ложаться в это условие. Я щас это наблюдаю передавая значения с М1 при prevBars!=Bars глобальными переменными и читая их на М15 и Н1 с интервалом в 1 мин, смотрю - сильно ли это может отразиться на точку входа внутри бара старшего ТФ. Может забавы ради, а может - "Внутри каждого часового бара сидят 10п профита :). Или 15п лося :(."  Если синус/косинус действительно лягут - для интрадей это будет реальный довесок. Мне кажется.