Fourier Dönüşümlerini Kullanarak Geleceği Tahmin Etme - sayfa 5

 

İşte bir haftadan biraz uzun bir aralıkta öne çıkan frekanslar (gün olarak gösterilmiştir)

4.58 (neredeyse bir hafta)

2.58(yarım hafta)

1.63 (en güçlü, ortadaki grafikte görülebilir)

1.04(bir gün)

0.52(günün ilk harmoniği)

0.26(ikinci harmonik)


1,63 günlük periyodun (haftanın üçüncü harmoniği) neden olduğuna dair bir tahmininiz var mı?

 

İşte ilk tahmin.


Planlananların çoğu yapılmadı

ANG3110 , yarın için tahmininiz nedir?

 
m_keeper :

İşte ilk tahmin.


Planlananların çoğu yapılmadı

ANG3110 , yarın için tahmininiz nedir?

Özel bir tahminde bulunmadım. Sana sadece bir çizim verebilirim.

Ve grafikte gösterdiğiniz şeyi daha ayrıntılı olarak açıklayın.


 
Belki birisinin mq4'te hızlı olmayan bir Fourier dönüşümü vardır? Ayrıca C veya Pascal'da da uygulayabilirsiniz.
 
vaa20003 :
Belki birisinin mq4'te hızlı olmayan bir Fourier dönüşümü vardır? Ayrıca C veya Pascal'da da uygulayabilirsiniz.

İkinci sayfaya bakın

 
m_keeper :
vaa20003 :
Belki birisinin mq4'te hızlı olmayan bir Fourier dönüşümü vardır? Ayrıca C veya Pascal'da da uygulayabilirsiniz.

İkinci sayfaya bakın

Teşekkürler, kaçırdım...

 

Peki, şimdiye kadar olanlar

Piyasanın ana frekansları aranır, genlikleri ve fazları belirlenir, trend belirlenir ve her şey toplanır ve normalleştirilir.

Şimdi periodogramda yerel maksimum aramanın nasıl uygulandığını gerçekten sevmiyorum, arama harmonik dağılıma göre yapılıyor

ve orada kokmuyorlar, elbette parametrelerle oynayarak onları seçebilirsiniz, ancak yine de kararsız ve genellikle tamamen mikro yereldir.

maksimumlar vurgulanır.

İkinci dezavantaj, her şeyin tek bir pencerede görüntülenmesidir, tüm bu keyfi ana pencerede birkaç grafiğe bölmeniz gerekir,

ve 2-3 ek pencere.


Tüm hesaplamaların tek bir yerde yapıldığından ve diğerlerinin sonuçlara - göstergelere, uzmanlara - erişebildiğinden nasıl emin olacağını kim bilebilir?

Piyasa dalgalanmalarının uygun sıklıklarının seçimi yine de manuel olarak yapılmalıdır. Yüksekleri fare ile veya ANG3110 gibi bir çizgi ile seçmek çok uygun olacaktır.


ANG3110 , hat ile çalışmayı nasıl gerçekleştirdiniz? Senaryolar aracılığıyla mı?



Az önce yayınladığım şeyle ne yapacağım hakkında birkaç kelime.

Uzunluk=560;// Pencere boyutunu çubuk olarak ayarlar
Period_count=2;// Sırasıyla kaç periyot dikkate alacağız Uzunluk, piyasada gördüğünüzden Period_count kat daha büyük olmalıdır
Harmonik=9;// Bu parametre ve bir sonraki korkunç bir uyumun rezalet yöntemi ile belirlenir (bu konuyu daha detaylı yazacağım)
HarmonikKontrol=1.7;

iMAperiod=4;//uygulama yardımcı olmadıysa, grafiği biraz düzleştirmeyi deneyin

Futur=100;// Tahmin edilecek çubuk sayısı
InPast=200;// Mevcut verilere dayalı tahminleri değerlendirmek için geçmiş çubuklar üzerinde çalışın

Aslında, göstergede ne görüyorsunuz (bu arada bugün için tahmin)

Tüm grafikler 0 ile Uzunluk aralığında olmalıdır (iyi, +/- %5)

Aralık farklıysa, o zaman sadece hatalıdır, Yenile'yi tıklayın ve her şey geçecek (hatanın nerede olduğunu bulamıyorum)

İnce pembe grafik, hazırlanmış bir zaman serisidir, bir seyir gibi görünmelidir.

Kalın turuncu - periodogram, dönemin değeri mavi çizginin karşılık gelen değerine eşittir

mavi çizgiyi destekleyen Kırmızı çubukların konumu ve sayısı Harmonic ve HarmonicControl tarafından belirlenir

Periyodogramı destekleyen yeşil sütunlar - algılanan periyotlar, en önemli periyotları gözle vurgulayan kırmızı çizgilere büyük ölçüde bağlıdır, sonuç elde edilene kadar Harmonik * ayarlamaya başlamanız gerekir

İnce yeşil eğri bir fazogramdır, öyle görünüyor ki frekans sabitse, fazogram düzgündür ve dalgalanırsa, bu frekansın salınımları son zamanlarda bozuldu ve güvenilemez. (0 -pi/2 ; Uzunluk --- 3*pi/2'ye karşılık gelir)


Aslında en önemli şey kalın pembe çizgidir - bu tahmindir. Tahminin, orijinal grafikle yükseklikte çakışması ve uzak geçmişi tekrar etmesi gerekmez. İçinde görmeniz gereken en önemli şey, dönüm noktaları ve olası yoğunluklarıdır (tahmin edilen dönüş süresi muhtemelen eşleşmeyecektir)


Dosyalar:
 
m_keeper :

Piyasa dalgalanmalarının uygun sıklıklarının seçimi yine de manuel olarak yapılmalıdır. Yüksekleri fare ile veya ANG3110 gibi bir çizgi ile seçmek çok uygun olacaktır.


ANG3110 , çizgiyi nasıl uyguladınız? Senaryolar aracılığıyla mı?

Sizin durumunuz için aşağıdakilerin en iyi seçenek olduğunu düşünüyorum:

göstergeyi kontrol etmek için bir komut dosyası yaparsınız:


 //==============================================================
#import " user32.dll "
int        PostMessageA ( int hWnd , int Msg , int wParam , int lParam ) ;
#import
#define WM_COMMAND    0x0111
//==============================================================
int i0 , ip , T ;
int t0 , tp , t0n , tpn ;
string Symb ;
int Per ;
//**************************************************************
int init () 
{ 
   Symb = Symbol () ;
   Per = Period () ;
   
   t0 = WindowTimeOnDropped () ;
   T = 64 ; 

   i0 = iBarShift ( Symbol () , Period () , t0 ) ;
   ip = i0 + T ;
   tp = Time [ ip ] ;
   t0n = t0 ;
   tpn = tp ;
   
   ObjectCreate ( " RCh " , 4 , 0 , tp , 0 , t0 , 0 ) ;
   ObjectSet ( " RCh " , OBJPROP_COLOR , DodgerBlue ) ; 
}
//**************************************************************
int start () 
{
   int hwnd = WindowHandle ( Symb , Per ) ;        
   if ( hwnd != 0 ) 
   {
       PostMessageA ( hwnd , WM_COMMAND , 33324 , 0 ) ; 
       GlobalVariableSet ( " gi0 " , i0 ) ;
       GlobalVariableSet ( " gip " , ip ) ;
   } else return ( 0 ) ;
   //---- 
   while ( IsStopped () == false ) 
   {
      t0 = ObjectGet ( " RCh " , OBJPROP_TIME2 ) ; 
       if ( t0 > Time [ 0 ]) t0 = Time [ 0 ] ; 
       tp = ObjectGet ( " RCh " , OBJPROP_TIME1 ) ; 
       i0 = iBarShift ( NULL , Per , t0 ) ;
       ip = iBarShift ( NULL , Per , tp ) ;
      
       T = ip - i0 ;
       if ( T < 2 ) { T = 2 ; ip = i0 + T ; tp = Time [ ip ] ; }
      
       if ( t0n != t0 || tpn != tp ) 
       {
         GlobalVariableSet ( " gi0 " , i0 ) ;
         GlobalVariableSet ( " gip " , ip ) ;
         PostMessageA ( hwnd , WM_COMMAND , 33324 , 0 ) ;
         t0n = t0 ;
         tpn = tp ;
       } 
      
       Sleep ( 200 ) ;
   }
   //=============================================
   return ( 0 ) ;
}
//**************************************************************
void deinit () 
{
   ObjectDelete ( " RCh " ) ; 
   GlobalVariableDel ( " gi0 " ) ;
   GlobalVariableDel ( " gip " ) ;
}
//**************************************************************

Ve göstergede, int start() 'dan sonra şunu eklersiniz:

   if ( GlobalVariableCheck ( " gi0 " )) 
   {
       i0 = GlobalVariableGet ( " gi0 " ) ; 
       ip = GlobalVariableGet ( " gip " ) ;
       T = ip - i0 ;
       SetIndexShift ( 2 , T / 2 ) ;
       SetIndexShift ( 3 , T / 2 ) ;
   }
   else 
   {
       i0 = 0 ; T = T0 ; SetIndexShift ( 2 , T / 2 ) ; SetIndexShift ( 3 , T / 2 ) ;
   }


Önce grafiğe bir gösterge koyuyorsunuz, ardından scripti atıyorsunuz ve LR kanalı ile grafiği hareket ettiriyorsunuz.

Söndürme ekstra hatları, umarım bunu kendin yapabilirsin ya da önerebileceğim bir şey varsa.

 

Teşekkürler, satırları anladım.


bir sorum daha var

Şimdi bilgileri biri ana pencerede ve ikisi kendi penceremde olmak üzere 3 çizelgeye yaydım.

parametreler yalnızca birinde ayarlanır ve global değişkenlerde saklanır

"PF_"+Symbol()+"_"+ DoubleToStr (Period(),0)+"_key" tuşlarıyla

Ayrıca, maksimum değerlerle ilgili bilgileri global değişkenlerde saklarım.

Sorun şu ki, her grafik için hesaplamalar üç kez yapılmalıdır.

İlk başta, iCustom'u denedim, ancak bence, kullanırken

önceden eklenmiş çizelgelerden veri alır, ancak bunları en azından init olarak yeniden hesaplar.

tekrar çalışır ve zaten çalıştığını görür (global değişkenlere göre)

ve hesaplama yapmaz ve iCustom Boş değerini döndürür

Dizileri küresel hale getirmenin bir yolu var mı?

Bana öyle geliyor ki, GlobalVariable'a binlerce değer doldurulursa, o zaman çok fazla olacak

daha yavaş çalışın, dizide bir arama var

 
m_keeper :

Dizileri global hale getirmenin bir yolu var mı?

Neye ihtiyacınız olduğunu tam olarak anlamadım, ancak çok fazla veri kaydetmeniz ve ardından tekrar okumanız gerektiğinde, bir ara dosya girişi kullanmak daha kolaydır, örneğin:

int tanıtıcı= FileOpen ("Test.dat",FILE_BIN|FILE_WRITE);

FileWriteArray(tanıtıcı,dizi,0,Narr);

Ve sonra başka bir programdan geriye doğru sayın:

int tanıtıcı=FileOpen("Test.dat",FILE_BIN|FILE_READ);

FileReadArray(tanıtıcı,dizi,0,narr);

Ayrıntılar için Yardım MT4'e bakın.