Hodrick-Prescott filtresi

 

Merhaba sevgili programcılar!

Bence basit bir hindi yazma işini kim çözecek? Bir Hodrick-Prescott filtresi ile satırı filtreleyecek bir hindi yazmak gerekiyor. Prensipte bu fonksiyon MATLAB'dadır, yanılmıyorsam Matlab derleyicisini kullanarak bir DLL yapabilirsiniz. Buna göre, bu Dll'ye atıfta bulunacak bir hindi oluşturun. Girişte şu parametreleri gönderin: satırın uzunluğu, yumuşatma parametresi. Çıktıda bir trend bileşeni (tablo üzerinde çizim) ve bir döngüsel bileşen (osilatör) elde ederiz.

Kendim yapamıyorum çünkü MATLAB Compiler ve MQL4'ü de anlamıyorum.

Grafikte, Eurodollar H4 için ayrışma. Gördüğünüz gibi, neredeyse tarih boyunca, fiyat hareketinin özelliği, trendi kırdıktan sonra, fiyatın bir önceki ekstremum ile trend arasındaki farka eşit bir mesafeye hareket etmesiydi, kısacası, genlik neredeyse aynıydı. aynı. İstisna en son verilerdir, ancak aşırılık vardır. Prensip olarak, böyle bir hindi, veri noktalarının sayısı küçükse, ancak 2000'e yükseltilirse, yeniden çizme ile ilgili herhangi bir sorun olmayacağını düşünüyorum.

 
Constantin писал(а) >>

Grafikte, Eurodollar H4 için ayrışma. Gördüğünüz gibi neredeyse...

Göremiyorum. Buradaki program nedir?

 

 
Hareketli ortalamada gecikme görmüyorum. Bu, yazarın ne ayarladığını anlamadığı veya algoritmada bir hata olduğu ve göstergenin yeniden çizildiği anlamına gelir.
 
Neutron >> :
Hareketli ortalamada herhangi bir gecikme görmüyorum. Bu, yazarın ne ayarladığını anlamadığı veya algoritmada bir hata olduğu ve göstergenin yeniden çizildiği anlamına gelir.

Gecikme yoktur, çünkü genel olarak hareketli bir ortalama değildir. Belirli bir seri için fonksiyonun minimize edilmesi problemi çözülmüştür. Doğal olarak, satır hareket ederken, satırın uzunluğu küçükse, özellikle patlamalar varsa, yeni bilgilerin gelmesiyle yeniden çizilecektir. http://en.wikipedia.org/wiki/Hodrick-Prescott_filter adresindeki filtre açıklaması

 
Constantin писал(а) >>

Prensipte bu fonksiyon MATLAB'dadır, yanılmıyorsam Matlab derleyicisini kullanarak bir DLL yapabilirsiniz. Buna göre, bu Dll'ye atıfta bulunacak bir hindi oluşturun.

Bence dünya dll'den daha basit.

Bu dijital filtreyi oluşturmak için en aza indirilmesi gereken işlevsellik:

Bu ayarda filtrenin yalnızca geçmiş veriler üzerinde çalışabileceği görülebilir, çünkü trend çizgisinin o anki değerini hesaplamak için bu trendin sadece önceki değerlerini değil, bir adım ileri t[i+1]'i de bilmek gerekir. Tarihte böyle bir filtre, düzgün eğrinin tırnak işaretiyle tam eşleşmesini (topik başlatıcının ilk gönderide bir gösteri olarak getirdiği şey) gösterecek ve tırnak işaretinin sağ kenarında utanmadan yeniden çizecektir.

İşte internette bulduğum başka şeyler:

Bu filtreyi oluşturmak için hazır bir tarif bulamadım. Aslında, kendimiz VR'nin sağ kenarı için bir işlevsellik alalım ve oluşturalım (üst denklem).

y[0] parametresine göre türevini alalım - mevcut değer ve onu sıfıra eşitleyerek, hemen istenen HP filtresi için özyinelemeli ifadeyi elde ederiz (alt denklem). Filtrenin yumuşatma özelliklerinin w yumuşatma parametresine nasıl bağlı olduğunu görelim:

Burada yeşil çizgi kotir, siyah çizgi w=0.5, vb. Her şeyin doğru çalıştığı görülebilir - kaçınılmaz bir faz gecikmesi vardır, bu ne kadar büyükse, kenar yumuşatma o kadar güçlüdür ve sağ kenar yeniden çizilmez. Artık MQL'de de kod yazabilirsiniz.

//+------------------------------------------------------------------+
//| Moving Average HP.mq4 |
//| Code by Neutron |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_color1 Blue
#property indicator_width1 3
extern double w=0.1;
int Start,i,m;
double MA[5000],Y[5000];
int start()
{
Start=5000;
MA[Start]=Open[Start];
MA[Start-1]=Open[Start-1];
for (i=Start-2;i>=0;i--) MA[i]=w*(Open[i]-2.*MA[i+1]+MA[i+2])+2.*MA[i+1]-MA[i+2];
}
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MA);
return(0);
}

İşte nasıl oldu:

Mavi - HP, yeşil - kotir, kırmızı - 2. dereceden Sulama filtresi (karşılaştırma için).

Gerçekten de, bu filtre doğrusal eğilimleri dürüstçe yakalamaya çalışır. Aksi olmamalı, gönderinin üstündeki işlevselliğe bakın, hareketli ortalamanın tırnak işaretinden sapmasını (ilk toplam) en aza indirme gerekliliğine ek olarak, en aza indirme gerekliliği olduğunu gösterir. ikinci türev (ikinci toplam)! Ancak, çizginin ikinci türevi sıfıra eşittir ve bunu minimize etme gereksinimi, rastgele bir girdi veri vektörü için trend çizgisine maksimum aspirasyon gereksinimine eşdeğerdir. Yaklaşımı beğendim.

Not: Bu ilginçtir, eğer fonksiyonel ifadede ikincinin değil de birinci türevin (üst denklem) minimizasyonunu gerektiriyorsa, o zaman üstel ortalama EMA (alt denklem) için tekrarlayan hareketli formülü elde ederiz:

Görünen o ki, üstel ortalama, olası tüm hareketli ortalamaların en yumuşakı!

 

Bu HP filtresine (kırmızı) göre osilatör (mavi çizgi) şöyle görünür:

Zaten ticaret yapmayı deneyebilirsiniz :-)

Osilatör seviyesi sıfırın üzerindeyken satın alıyoruz, aşağıda satıyoruz. Ekteki Gösterge.

Dosyalar:
difhp.mq4  1 kb
 
Neutron писал(а) >>

Üstel ortalamanın, olası tüm hareketli ortalamaların en yumuşak olduğu ortaya çıktı.

Evet, konuyla ilgili bir makale var.

Yazıya göre yapmadım ama aynı ema pürüzsüzlüğü fikrini geliştirerek iyi bir pürüzsüzlük elde edebilirsiniz:

Mavi - EMA15 gecikmesi 5.

Kırmızı - aynı gecikmeyle daha yumuşak MA.

Dosyalar:
stan.zip  147 kb
 
NR yakın, UGKOZN M1,
kırmızı =1600
mavi =100
sarı = EMA 14, kapat.
 
Korey >> :
UKKOZN

UGKOZN beş yaşında! muhtemelen 10 saniye sıkışmış, nedir? :) başka bir seçenek - UGKYV

 
yani, JPY- olmaz, (sitede kızlar görülür)