フーリエに関するヘルプ - ページ 2

 
振幅と位相は1つの複素数で、1バーは虚数部=0となる1つの数でもあります。したがって、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となる1つの数でもあります。したがって、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となる1つの数でもあります。したがって、8小節は8つの周波数となります。klotに 感想を聞いてみようか。
と聞いた方が良いですよ :)
このテーマには数年前から取り組んでいます :)
私のホームページにも、TFに関するページがたくさんあります。
http://www.may.nnov.ru/mak/DSP/Contents.shtml

もしくはググってみてください。
例えば、最初のリンクはこちら。
http://alglib.sources.ru/fft/realfft.php

ページの終わりです。

FFTの複素関数と 比較すると,周波数f-1f-N/2+1が どこかに消えてしまい,周波数f0と fN/ 2の実部だけが残り,以前の複素周波数f0と入れ替わって いることがわかる。その理由は、フーリエ変換の対称性にある。実関数h(t)に対して、H(-f)=H *( f)が成り立つのだ。

したがって、周波数f-1f-N/2+ 1は、その対称的な双子の複素共役によって得られるため、もはや新しい情報はなく、周波数f0と fN/ 2は虚数 部が0に等しくなります。

===========================================================
複素数は2つの独立した成分を含んでいます。
虚数部が0に等しい複素数は、1つの独立成分を含む。

入力が複素数列の場合、K個の周波数が得られる。
入力が実数の場合、半分の周波数が残ります。
 
私の推論はもっと単純で、ある定理があるのですが、それを証明した人の姓を思い出せません。アナログ信号をデジタルに変換する場合、ある周波数を記憶するためには、記憶した周波数の2倍のサンプルが必要なのだそうです。この場合、サンプル数は8個なので、4周期分以上の周波数情報を格納することはできない。
 
コテルニコフの定理
 

議論から判断すると、このフーリエは何か面白そうだが、残念ながら私にはよく分からない。
どなたか、どんなもので、どうやってEAを作るのか、わかりやすく説明していただけませんか?

 
Ronen:

議論から判断すると、このフーリエは何か面白いのですが、残念ながらここで話していることが理解できません。
どなたか、それが何であり、それを使ってどのようにEAを作るかを端的に説明していただけませんか?


不正確なものも作れますが...。ポイントは、どんな周期 関数も異なる周波数の正弦波成分の和として表現できること、つまりフーリエ級数に展開できることです。フーリエ級数は、周波数が2倍のサインとコサイン成分(高調波)の和である。フーリエ変換による数学的操作により、データ系列は一様に 変化する周波数の正弦波の和として表示され、各成分について振幅を得ることができます。そして、それぞれの周波数成分を操作することで、信号をフィルタリングすることができる、などなど。それはいいのですが、ひとつだけ、関数が周期的でなければなりません。たとえ周期的でなくても、このペロブランチは周期的であることを暗示しているのです。でも、誰にもわからない...。もしかしたら、何かメリットがあるのかもしれませんね。
 
Integer писал (а):
ポイントは、どんな周期 関数も ... として表現できることです。

まあ、難しすぎなければ......ダミーのレベルに合わせてもう少し。

間違っているかもしれませんが、この条件には小型のTFが割と合うように思います。現在、グローバル変数でM1からprevBars!=Barsで値を渡し、M15とH1で1分間隔で読み込んで観察していますが、なるほど、メジャーTFのバー内のエントリーポイントに強く影響する可能性があります。遊び心というか、「1時間ごとのバーの中には、10pの利益が収まっているんだよ。)もし、サイン/コサインが本当に嘘をつくなら、日中取引では、それは本当のアドオンとなるでしょう。そう思える。