![Ampirik Mod Ayrıştırma Yöntemine Giriş](https://c.mql5.com/i/articles/overlay.png)
Ampirik Mod Ayrıştırma Yöntemine Giriş
Giriş
Pratikte uğraşmamız gereken tüm gerçek süreçler, genel olarak, çok sayıda bileşenden oluşur ve karmaşıktır. Örneğin, hava durumu. Yağış grafiklerini incelerken, bunların mevsimsel değişiklikler, küresel ısınma/soğuma süreçleri, okyanus akıntısı değişimleri, siklon ve antisiklon dinamikleri, atmosfere salınan karbondioksit miktarı, solar aktivite döngüleri vb. gibi birçok farklı süreç arasındaki etkileşimi temsil ettiğini unutmamalıyız. Liste, sonsuza kadar uzayabilir.
Bu nedenle, bileşenleri birbiriyle etkileşime girdiğinde, tanımlamak istediğimiz düzenlilikleri maskeleyip çarpıttığı için bu tür bir grafiğin analiz edilmesi oldukça zordur. Bu, söz konusu süreci ayrı bileşenlere ayırma ve bileşenlerin her birini ayrı ayrı analiz etme konusunda haklı bir istek uyandırır. Ayrı bileşenlerin analizi ve eldeki sürece yaptıkları katkının dikkate alınması, devam eden süreci daha iyi anlamamıza ve örneğin tahmin güvenilirliğini artırmamıza yardımcı olur.
Ayrıca, çok sayıda farklı faktöre dayalı olarak oluşturulan para birimi fiyatları da dahil olmak üzere, alım satımla ilgili çeşitli bilgiler söz konusu olduğunda herhangi bir istisna yoktur. Bu nedenle, ayrı bileşenlere önceden ayırmanın, bunların daha sonraki analizlerini büyük ölçüde kolaylaştıracağını beklemek oldukça doğaldır.
"Ayrıştırma" terimi, resmi olarak bir bileşik sürecin veya bir kompozit materyalin ayrı parçalara ayrılması anlamına gelir. Ancak, farklı süreçlerin analizi, sinyal analizi, çeşitli türde dizilerin analizi vb. ile ilgili birçok alanda, bu terim uzun süredir daha geniş bir anlamda kullanılmaktadır ve çoğu zaman gerçek başlangıç bileşenlerine ayrılmayı değil, ilk veriler oluşturulurken gerçekte mevcut olmayan belirli işlevlere ayrılmayı önermektedir. Bu işlevler, veri ayrıştırma sürecinde bir şekilde yapay olarak oluşturulur, ancak "yapay" kökenlerine rağmen, gizli kalıpların tanımlanmasına yardımcı olan daha derin bir veri analizine olanak tanırlar.
Piyasa analizinde kullanılan yöntemlerin büyük çoğunluğu, analiz edilen süreçten belirli bileşenleri ayıran yöntemlere, yani ayrıştırma yöntemlerine doğrudan veya dolaylı olarak atfedilebilir. Bunlardan bazılarını kısaca gözden geçirelim.
1. Ayrıştırma
Göz önünde bulundurulan belirli bir diziye pratikte uygulanabilecek birçok farklı ayrıştırma yöntemi vardır. Bu yöntemlerin altında yatan farklı matematiksel veya ampirik yaklaşımlar, farklı karmaşıklık derecesi ve farklı uygulama alanları olabilir.
Örneğin, temel bir piyasa analizi dahi - belirli bir noktada - ayrıştırma yöntemlerinden biri olarak kabul edilebilir. Bu analiz, piyasa koşullarını doğrudan etkileyen bir dizi başlangıç olayının yarattığı etkiyle ilgilidir. Diğer bir deyişle, analiz edilen bir piyasa süreci, onu oluşturan bir dizi olaya dolaylı olarak ayrıştırılır.
Temel analiz ile ilgili konulara daha sonra değinilmeyecektir. İncelenen süreç hakkında daha fazla bilginin mevcut olmadığını varsayacağız; elimizde yalnızca belirli bir sürecin davranışını temsil eden bir dizi var.
En basit ayrıştırma örneği, iyi bilinen olağan yöntemler kullanılarak bir dizinin birkaç bileşene ayrıştırılmasıyla gösterilebilir. Örneğin, herhangi bir para birimi çifti için bir grafik üzerinde bir MA çizelim. Ardından ortaya çıkan eğriyi ilk diziden çıkarın. Sonuç olarak, ilk dizinin iki bileşenini, yani MA eğrisini ve kalan kısmı elde edeceğiz. Aynı prosedür, yalnızca daha uzun bir MA dönemi kullanılarak, elde edilen kalan kısma uygulandığında, üç bileşenle sonuçlanacaktır: İki MA eğrisi ve dönüşümün kalan kısmı. Gördüğünüz gibi, ayrıştırma süreci, mevcut herhangi bir araç kullanılarak kolaylıkla düzenlenebilir. Bütün mesele, böyle bir sürecin sonuçlarına ilişkin özelliklerde yatmaktadır.
İyi bilinen ayrıştırma ve spektral analiz yöntemleri arasında Fourier dönüşümü, burada kesinlikle bahsedilmeye değerdir. Fourier dönüşümü, sabit harmonik temel fonksiyonları kullanan ortogonal dönüşümler sınıfına aittir. Fourier dönüşümü sonucu, başlangıç sürecinin sabit frekans ve genliklere sahip harmonik fonksiyonlara ayrıştırılması olarak gösterilebilir. Bizim için özellikle önemli olan iki noktaya dikkat edin.
İlk olarak, dönüşüm, her zaman sabit bir önceden ayarlanmış ortogonal fonksiyonlar temelinde gerçekleştirilir. Yani, bir dönüşüm temeli, dönüştürülmüş bir dizinin yapısına bağlı değildir.
İkincisi, ortaya çıkan harmonik bileşenlerin genlik ve frekans değerleri sabittir. Yani, değerleri tüm ilk dizi boyunca sabittir. Bu, belirli bir ilk dizinin yapısının incelenen bir aralıkta değişmesi durumunda, bu tür değişikliklerin dönüşüm sonuçlarına yansıtılmayacağı anlamına gelir. Bu durumda elde edilen sonuçlar, bu dönüşüm ilk verilerin durağanlığı varsayımına dayandığı için, yalnızca sürecin belirli bir ortalama durumunu yansıtacaktır.
İlk dizinin durağan olmamasıyla ilgili kısıtlamalardan kaçınmak için Fourier dönüşümünden dalgacık dönüşümüne geçebiliriz. Fourier dönüşümü gibi dalgacık dönüşümü de, sabit bir işlev temelinde ayrıştırma gerçekleştirir. Fourier dönüşümünden farklı olarak, bu temel önceden ayarlanacaktır, yani dönüşümde kullanılan bir dalgacık seçilecektir.
Ayrıca, Fourier dönüşümünün aksine, dalgacık dönüşümünden kaynaklanan her bileşen, zaman içinde ölçeğini ve düzeyini belirleyen parametrelere sahiptir; bu da analiz edilen bir sürecin olası durağan olmamasıyla ilişkili sorunu çözer.
Fourier dönüşümü ve dalgacık dönüşümü, kullanılan iyi bilinen matematiksel teknikler ve mevcut etkili uygulama algoritmaları nedeniyle büyük ölçüde kabul görmüştür. Ayrıca, her iki dönüşüm de oldukça çok yönlü görünmektedir ve farklı alanlarda başarıyla uygulanabilmektedir.
Ancak pratik amaçlar için, yalnızca durağan olmayan süreçlerle ilgilenmeye olanak tanıyan değil, aynı zamanda ilk verilerle belirlenen uyarlanabilir bir dönüşüm temeli kullanacak bir dönüşüme sahip olmak iyi olurdu. Bu tür bir dönüşüm mevcuttur ve aşağıda kısaca ele alınarak bu makalenin ana konusuna atıfta bulunulacaktır.
2. Ampirik Mod Ayrıştırma
Ampirik Mod Ayrıştırmanın (EMD), Hilbert–Huang dönüşümünün (HHT) temel parçası olduğu ileri sürülmüştür. Hilbert Huang dönüşümü, deyim yerindeyse 2 aşamada gerçekleştirilir. İlk olarak, EMD algoritmasını kullanarak içsel mod fonksiyonlarını (IMF) elde ederiz.
Daha sonra ikinci aşamada, yukarıdaki adımın sonuçlarına Hilbert dönüşümü uygulanarak ilk dizinin anlık frekans spektrumu elde edilir. HHT, doğrusal olmayan ve durağan olmayan dizilerin anlık frekans spektrumunun elde edilmesini sağlar. Sonuç olarak bu diziler, ampirik mod ayrıştırma kullanılarak da ele alınabilir.
Ancak, bu makale Hilbert dönüşümü kullanılarak anlık frekans spektrumunun çizilmesini kapsamayacaktır. Yalnızca EMD algoritmasına odaklanacağız.
Daha önce bahsedilen Fourier dönüşümü ve dalgacık dönüşümünün aksine, EMD, herhangi bir belirli veriyi, analitik olarak ayarlanmayan ve bunun yerine yalnızca analiz edilen bir dizi tarafından belirlenen içsel mod fonksiyonlarına (IMF) ayrıştırır. Bu durumda temel fonksiyonlar, doğrudan giriş verilerinden uyarlanabilir şekilde türetilir. EMD'den kaynaklanan bir IMF, yalnızca aşağıdaki gereklilikleri karşılamalıdır:
- IMF ekstremumlarının sayısı (maksimum ve minimum değerlerin toplamı) ve sıfırdan geçişlerin sayısı ya eşit olmalı ya da en fazla bir değer farklı olmalıdır,
- Bir IMF'nin herhangi bir noktasında, yerel maksim değerler tarafından tanımlanan zarfın ve yerel minimum değerler tarafından tanımlanan zarfın ortalama değeri sıfır olacaktır.
Ayrıştırma, frekans sıralı bir IMF bileşenleri ailesiyle sonuçlanır. Her ardışık IMF, bir öncekinden daha düşük frekanslı salınımlar içerir. Ve "frekans" terimi, IMF'lerle ilgili olarak kullanıldığında tam olarak doğru olmasa da, muhtemelen onların doğasını tanımlamak için en uygun olanıdır. Mesele şu ki, bir IMF salınımlı bir yapıya sahip olsa da, zaman ekseni boyunca değişken bir genliğe ve frekansa sahip olabilir.
Yalnızca açıklamaya dayalı olarak EMD algoritması performans sonuçlarını görselleştirmek oldukça zordur; bu nedenle bize algoritma özelliklerini öğrenme fırsatı sunacak yazılım uygulamasına geçelim.
3. EMD Algoritması
Huang tarafından önerilen algoritma, bir dizinin yerel maksimum ve minimum değerleri ile tanımlanan düzgün zarflar üretilmesine ve ardından bu zarfların ortalamasının ilk diziden çıkarılmasına dayanır. Bu, üst ve alt zarfları üretmek için kübik eğri çizgilerle daha fazla bağlanan tüm yerel ekstremumların tanımlanmasını gerektirir.
Zarfları çizme prosedürü Şekil 1'de gösterilmiştir.
Şek. 1. Zarfları ve ortalamalarını çizme
Şekil 1'de, ince mavi çizgide analiz edilen dizi verilmiştir. Dizinin maksimum ve minimum değerleri sırasıyla kırmızı ve mavi olarak gösterilmiştir. Zarflar, yeşil renkte verilmiştir.
Ortalama, iki zarfa dayalı olarak hesaplanmış ve Şekil 1'de kesik çizgi olarak gösterilmiştir. Bu şekilde hesaplanan ortalama değer, ilk diziden ayrıca çıkarılır.
Yukarıdaki adımlar, ilk yaklaşımda gerekli ampirik fonksiyonun çıkarılmasıyla sonuçlanır. Nihai IMF'yi elde etmek için, yeni maksimum ve minimum değerler yeniden tanımlanacak ve yukarıdaki tüm adımlar tekrarlanacaktır. Bu tekrarlanan süreç, eleme olarak adlandırılır. Eleme süreci, belirli bir durdurma kriteri sağlanana kadar tekrarlanır. Eleme durdurma kriterlerinin seçimi, bir bütün olarak ayrıştırma sonucunu etkileyen kilit noktalardan biridir. Bu konuya ilişkin tartışmaya az sonra döneceğiz.
Eleme süreci başarıyla tamamlanırsa ilk IMF'yi elde edeceğiz. Bir sonraki IMF, daha önce ayıklanan IMF, orijinal sinyalden çıkarılarak ve yukarıda açıklanan prosedür bir kez daha tekrarlanarak elde edilebilir. Bu, tüm IMF'ler ayıklanana kadar devam eder. Eleme süreci, örneğin kalan kısım ikiden fazla ekstremum içermediğinde genellikle durur.
Görüldüğü gibi, açıklanan ampirik mod ayrıştırma prosedürü katı matematiksel hesaplamalara dayanmamakta olup aksine gerçekten ampiriktir; bu nedenle adını tam olarak doğrular. Yukarıdaki algoritmanın Huang tarafından önerildiği gibi basit ve anlaşılır olmasına rağmen, dezavantaj olarak kabul edilebilecek birkaç noktası vardır.
Bu konudaki çeşitli yayınlar, Huang'ın algoritmasını modernleştirmenin yanı sıra zayıf noktalarının ayrıntılı incelemelerini sağlar. Bu makalede, bu yöntemin olası modernizasyonlarına odaklanılmayacaktır; yalnızca yazılım uygulamasını oluşturma girişimi açıklanacaktır. Uygulama özellikleri, aşağıda kısaca özetlenecektir.
4. CEMDecomp Sınıfı
EMD algoritmasını uygulayan CEMDecomp sınıfı, Hilbert-Huang dönüşümüne ve ampirik mod ayrıştırmaya ayrılmış İnternet yayınlarına dayalı olarak oluşturulmuştur. Uygulanan algoritma, başlangıçta Huang tarafından önerilen algoritmaya büyük ölçüde çok benzer olup herhangi bir büyük değişiklik içermemektedir.
Aşağıda, makalenin sonunda CEMDecomp.mqh dosyasında bulunabilecek kaynak kodunun bir parçacığı verilmiştir.
//------------------------------------------------------------------------------------ // The Empirical Mode Decomposition (EMD). //------------------------------------------------------------------------------------ class CEMDecomp:public CObject { public: int N; // Input and output data size double Mean; // Mean of input data int nIMF; // IMF counter int MaxIMF; // Maximum number of IMF int MaxIter; // Maximum number of iterations int FixedIter; // 0-variable number of sifting iterations; // 1-always ten sifting iterations. double IMFResult[]; // Result private: double X[]; double Imf[]; double XMax[]; // x of local maxima double YMax[]; // y of local maxima double XMin[]; // x of local minima double YMin[]; // y of local minima double EnvUpp[]; // Upper envelope double EnvLow[]; // Lower envelope double Eps; // Accuracy comparison of floating-point numbers double Tol; // Accuracy of calculation IMF public: void CEMDecomp(void); int Decomp(double &y[]); // Decomposition void GetIMF(double &x[], int nn); // Get IMF number nn private: int arrayprepare(void); void extrema(double &y[],int &nmax,double &xmax[],double &ymax[], int &nmin,double &xmin[],double &ymin[]); int SplineInterp(double &x[],double &y[],int n,double &x2[], double &y2[],int btype=0); };
Şimdi CEMDecomp sınıfında bildirilen ortak değişkenlere ve yöntemlere bir göz atalım.
N, dizideki öğe sayısıdır. N değişkeninin değeri, Decomp() yöntemi çağrıldıktan sonra oluşturulur ve giriş dizisi uzunluğuna eşittir. Ayıklanan IMF'ler aynı boyuta sahip olacaktır.
Ortalama, giriş dizisinin ortalama değeridir. Değer, Decomp() yöntemi çağrıldıktan sonra oluşturulur.
nIMF, IMF sayacıdır. Decomp()'u çağırdıktan sonra, bu, ayıklanan IMF'lerin sayısını artı iki içerir. Bu nedenle, bu değer GetIMF() yöntemi kullanılarak kaç bileşenin okunabileceğini gösterir. Bununla birlikte, 0 indeksli bir bileşen her zaman ortalama değerinin çıkarıldığı ilk diziyi içerecek, nIMF indeksli bir bileşen ise kalan ayrıştırma kısmını içerecektir.
MaxIMF, izin verilebilir maksimum IMF sayısıdır. Giriş dizisinin ayrı IMF'lere ayrıştırılması, IMF'lerin sayısı MaxIMF değerine ulaştığında duracaktır. Bu değişkenin değeri, Decomp() yöntemi çağrılmadan önce ayarlanabilir. Varsayılan değer, 16'dır.
MaxIter, eleme sürecinde izin verilen maksimum yineleme sayısıdır. Eleme sürecinde yineleme sayısı bu değere ulaşırsa, gerekli doğruluğa ulaşılıp ulaşılmadığına bakılmaksızın eleme duracaktır. Bu değişkenin değeri, Decomp() yöntemi çağrılmadan önce ayarlanabilir. Varsayılan değer, 2000'dir.
FixedIter, elemede bir durdurma kriteri belirleyen bayraktır. FixedIter değeri sıfır ise, verilen doğruluk elde edildiğinde her bir IMF için eleme süreci duracaktır. Farklı IMF'lerin ayıklanması için verilen doğruluğu elde etmek için gereken yineleme sayısı değişebilir. FixedIter bir olarak ayarlanırsa, IMF, her zaman 10 yinelemede bir ayıklanır. Bu değişkenin değeri, Decomp() yöntemi çağrılmadan önce ayarlanabilir. Varsayılan değer, 0'dır.
Decomp(double &y[]) ayrıştırmayı gerçekleştiren ana sınıf yöntemidir. Bu, giriş parametresi olarak giriş verilerini içeren bir diziye referans alır. Başarılı bir şekilde tamamlandığında, N değişkeni giriş dizisi uzunluğuna eşit olacaktır. Ayıklanan IMF'ler aynı boyuta sahip olacaktır. Mean değişkeni giriş dizisinin ortalama değerine eşit olurken, nIMF değişkeni GetIMF() yöntemi kullanılarak okunabilen bileşenlerin sayısına eşit olacaktır.
GetIMF(double &x[], int nn), Decomp() yöntemi kullanılarak elde edilen sonuçlara erişimin sağlanmasına olanak tanır. Giriş parametresi olarak nn ile belirlenen sayıya sahip bileşenin kopyalanacağı dizinin adresi iletilir. Bununla birlikte, 0 indeksli bir bileşen her zaman ortalama değerinin çıkarıldığı ilk diziyi içerecek, nIMF indeksli bir bileşen ise kalan ayrıştırma kısmını içerecektir. Parametre olarak iletilen dizi uzunluğu, ortaya çıkan bileşenlerin uzunluğundan daha küçük olursa, dizi, uzunluğunun izin verdiği kadar doldurulacaktır.
CEMDecomp sınıfının kullanımı aşağıdaki örnekle gösterilebilir:
#include "CEMDecomp.mqh" //------------------------------------------------------------------------------------ // Script program start function //------------------------------------------------------------------------------------ void OnStart() { int n,ret; double yy[],imf2[]; n=400; // Input sequence length ArrayResize(yy,n); // Array of input data ArrayResize(imf2,n); // Array for reading the results CopyOpen(_Symbol,PERIOD_CURRENT,0,n,yy); // Generation of input data CEMDecomp *emd=new CEMDecomp(); // Creation of the CEMDecomp class instance ret=emd.Decomp(yy); // Decomposition of the input sequence if((ret==0)&&(emd.nIMF>3)) // If there is no error and the sufficient // number of components was extracted, emd.GetIMF(imf2,2); // copy component number 2 into // array imf2[]. delete(emd); // Deletion of the CEMDecomp class instance // One of the extracted components in array imf2[]. } //------------------------------------------------------------------------------------
Ayıklanan IMF'leri Web arayüzü aracılığıyla gösteren tam bir ayrıştırma örneği, makalenin sonundaki CEMDecomposition.zip arşivinde bulunabilir. Bu örneği çalıştırmak için, belirtilen arşivi açmalı ve tüm \CEMDecomposition dizinini içeriğiyle birlikte terminalin \Indicators veya \Scripts dizinine yerleştirmelisiniz. Daha sonra, EMDecomp_Test.mq5 script dosyasını derleyip çalıştırabilirsiniz. Terminalde harici kitaplıkların kullanımına izin verilmesi gerektiğini unutmayın.
Şekil 2'de, 100 öğelik dizi uzunluğuna sahip USDJPY Günlük fiyat tekliflerinin ayrıştırılmasını içeren başka bir örnek gösterilmiştir. Bu dizinin ayrışmasının dört IMF'nin ve kalan kısmın ayıklanmasıyla sonuçlandığı görülebilir.
Şek. 2. USDJPY Günlük fiyat teklifleri dizisinin ayrıştırılması; N=100
Şekil 2'deki tüm grafikler, ayıklanan IMF'lerin her birinin yaptığı katkının değerlendirilmesine olanak tanıyarak aynı ölçekte görüntülenir. Ancak bu çizim şekli, IMF'lerin her birinin özelliklerini görmek için yeterince net bir resim veremez. Şekil 3'te, her bir grafik için yalnızca otomatik ölçeklendirme modu kullanılarak aynı sonuçlar gösterilmiştir.
Şek. 3. USDJPY Günlük fiyat teklifleri dizisinin ayrıştırılması; N=100. Otomatik ölçeklendirme modu
Ve Şekil 3, ayrı bileşenlerin genliklerinin gerçek korelasyonunu göstermese de, otomatik ölçeklendirme modunun kullanılması, bunların her birinin daha ayrıntılı bir şekilde görselleştirilmesine olanak tanır.
5. EMD Algoritmasının Önerilen Uygulamasına İlişkin Notlar
Dikkatinizi çekmek istediğim ilk şey, ilk dizinin maksimum ve minimum değerlerini tanımlama yöntemidir. Bu durumda, iki seçenek mevcuttur.
Şekil 4'te, ekstremumların tanımlanması için algoritmanın performans sonuçları gösterilmiştir.
Şek. 4. Ekstremumların tanımlanması. İlk seçenek
Bir işlevin maksimum veya minimum değerlerinin tanımlanması söz konusu olduğunda, en yaygın olarak kullanılan algoritma aşağıdaki gibidir:
- Dizinin mevcut öğesinin değeri, önceki ve sonraki değerlerle karşılaştırılır;
- Mevcut değer, önceki ve sonraki değerden büyükse, bu, işlev maksimumu olarak tanımlanır;
- Mevcut değer, önceki ve sonraki değerden küçükse, bu, işlev minimumu olarak tanımlanır;
Açıkça tanımlanmış ekstremumlara sahip diziler için maksimum ve minimum değerlerin tanımlanması herhangi bir zorluk içermez. Sağlanan algoritma iyi şekilde çalışmaktadır. Bu durum, Şekil 4'te gösterilen grafiğin ilk yarısında gösterilmiştir. Ancak bu algoritma, dizinin en yakın değerlerinin eşit olduğu düz tepelere yanıt vermeyecektir.
Sağlanan algoritma kullanılmış olsaydı, Şekil 4'te gösterilen son maksimum ve son iki minim değer asla tanımlanamazdı. Bir yandan, bu sonuç beklendiği gibi ve doğru olurdu. Ancak diğer yandan, salınımlı süreçlerle paralellik kurarsak, sıfırdan geçişlerin meydana gelmesi halinde, bu ekstremumlar gözden kaçırılmış olurdu. Dikdörtgen bir dizinin düz tepelerinin veya eşit dizi değerlerine sahip bölümlerin ekstremumlar olarak kabul edilip edilemeyeceği tam olarak açık değildir.
Bununla birlikte, EMDecomp sınıfını uygularken ekstremumların tanımlanması için kullanılan algoritma, yukarıda sağlanan algoritmanın geliştirilmiş bir sürümüdür. Performans sonuçları Şekil 4'te görülebilir. Bu algoritma, eşit dizi değerlerine sahip aralıkları ekstremumlar olarak tanımlar ve ekstremum noktalarını bu aralıkların ortasına yerleştirir.
Performans sonuçları Şekil 4'te gösterilen maksimum ve minimum değerlerin tanımlama algoritması, CEMDecomp sınıfında, ayrıştırma döngüsünün durması gereken noktayı belirlerken ekstremum sayısını hesaplamak için kullanılır. Örneğin, ayıklanan bir IMF'nin ekstremumu yoksa, ayrıştırma durur ve söz konusu IMF dışarı atılır.
Zarfları çizerken bu tanımlama algoritmasının kullanılması durumunda, örneğin giriş dizisinin Şek. 4'te gösterilen şekli aldığı durumlarda, ortaya çıkan zarflar iki düz paralel çizgi ile temsil edilecektir. Eleme süreci ayrıca giriş dizisini dönüştürmekte başarısız olacaktır ve bu giriş dizisi, sırayla, bileşenlere ayrıştırılmaya uygun olmayacaktır.
Bu durum için bir çözüm yolu, zarfları çizmek için ekstremumların tanımlanması için biraz farklı bir algoritmanın kullanılmasında bulunabilir.
Şekil 5'te, ekstremumların tanımlanması için bu alternatif algoritma kullanılarak elde edilen sonuçlar gösterilmiştir.
Şek. 5. Ekstremumların tanımlanması. İkinci seçenek
Şekil 5'e daha yakından bakalım. Burada, Şekil 4'ten farklı olarak, yeşil noktaların aynı anda maksimum ve minimum değerler olduğu gösterilmiştir. Zarflar bu ekstremumlara dayalı olarak çizilirse, bunlar artık düz paralel çizgiler olmayacak ve eleme sürecinde daha fazla ayıklama için dikdörtgen dizinin gizli bileşenleri mevcut olacaktır. Makalenin sonunda CEMDecomposition.zip arşivinde bulunan test çalışması, yukarıdakilere iyi bir örnek olabilir.
Ne yazık ki, bu yaklaşım gizli bileşenlerin ayıklanmasıyla ilgili tüm sorunları çözmez. Örneğin, bir üçgen dizi için gizli bileşenler bu şekilde ayıklanamaz. Bu gerçek, EMD algoritmasının bu uygulamasının dezavantajlarından biri olabilir. Bu zor durum, incelemesi bu makalede ele alınmayan, ayrıştırma için CEEMD (Tamamlayıcı Küme Ampirik Mod Ayrıştırma Yöntemi) algoritmasına geçilerek çözülebilir.
Ekstremumların tanımlanması için algoritmaların uygulanmasıyla ilişkili özelliklerin yanı sıra, bu tür algoritmalara özgü son etkiler sorununa da dikkat edilmelidir. Yukarıdakileri detaylandırmak için Şek. 1'e dönelim. Şekil 1'de, maksimum değerlerin üst zarf olarak bir kübik interpolasyonlu eğri işlevi ile bağlandığı açıkça gösterilmiştir.
Bununla birlikte, zarf, hem ilk maksimumun solunda hem de son maksimumun sağında bulunan bölümler için tanımlanmalıdır. Böyle bir zarfın uzatılma şeklinin, uçlarına yakın ayıklanan IMF'lerin doğasını belirlemesi muhtemeldir. Son etki düzeltmesinin yazılım uygulamasına ilişkin çok fazla ayrıntıya girmeden, bu gerçek burada okuyucunun dikkatine sunulmaktadır.
Ayrıca, ayıklanan IMF'lerin yapısının ve sayısının, eleme döngüsünü durdurmak için seçilen yönteme bağlı olabileceğini ve olacağını da belirtmeliyiz. CEMDecomp sınıfı, eleme sürecini durdurmaya hizmet eden ana yöntem olarak, son eleme döngüsü tarafından belirlenen mevcut IMF'deki farkın boyutunu gösteren oranın hesaplamasını kullanır.
Elemenin bilinmeyen bir IMF üzerinde hemen hemen hiçbir etkisi yoksa, eleme süreci durur ve IMF üretilmiş kabul edilir. Sınıf oluşturucusunda, varsayılan olarak IMF ayıklama doğruluğunu belirleyen bir sınırlayıcı değer ayarlanır. Varsayılan sınırlayıcı değer ayarlandıktan sonra, eleme yinelemelerinin sayısı bazen 200'e ve hatta 300'e ulaşabilir. Bu konuyu içeren yayınlarda, birçok yazar, bu kadar çok sayıda eleme yinelemesinin kullanılmasına karşı uyarıda bulunur. Yine de, EMD algoritmasının bu uygulamasında bu varsayılan sınırlayıcı değerin kullanılmasına karar verildi.
EMD algoritmasının bu uygulaması, başka bir durdurma kriterinin kullanılmasına olanak tanır. Bu amaçla, Decomp() yöntemi çağrılmadan önce FixedIter değişkeni 1 olarak ayarlanmalıdır. Bu durumda, tüm IMF'ler her zaman 10 eleme yinelemesinde ayıklanacaktır. Ve bu durdurma kriteri kullanılarak elde edilen ayrıştırma sonuçlarının varsayılan yöntemin sonuçlarından biraz farklı olacağını görmek kolaydır.
6. EMD Algoritmasının Uygulanması
EMD algoritması başlangıçta Hilbert-Huang dönüşümünün bir parçası olduğu için, bir dizinin anlık frekans spektrumunun hesaplanması, bu algoritmanın uygulamasını gösteren bir örnek işlevi görebilir. Bu, Hilbert dönüşümünün EMD kullanılarak ayıklanan IMF bileşenleri üzerindeki performansını içerir. Ancak bu prosedür bu makalede ele alınmamıştır.
Spektrumu hesaplamanın yanı sıra, EMD algoritması dizileri yumuşatmak için kullanılabilir.
Şekil 6'da, bu tür bir yumuşatmanın bir örneği gösterilmiştir.
Şek. 6. Giriş dizisinin yumuşatılması
Yumuşatma için 100 "Açılış" fiyatı değerinden oluşan rastgele bir USDCHF Günlük fiyat teklifi parçası seçilmiştir. Ayrıştırma sürecinde dört IMF ve kalan kısım elde edilmiştir. İlki dışındaki tüm IMF'ler kalan kısma daha da eklendi.
Böylece bulunan en yüksek frekanslı bileşen giriş dizisinden hariç tutulmuştur. Toplarken ilk iki bileşeni göz ardı etseydik, ortaya çıkan eğri daha düzgün olurdu.
EMD uygulamasının başka bir örneği, giriş dizisinden ayıklanan IMF'lere dayalı bir tahminin oluşturulması olabilir. Bir tahmin oluşturmak için, her bir IMF ve kalan kısım için ayrı olarak bir tahminin oluşturulduğu herhangi bir ekstrapolatör kullanabilirsiniz.
Bu şekilde oluşturulan tahminler daha sonra, giriş dizisi için gerekli tahmin sonucunu üretmek üzere toplanır. Ayrı IMF'lerin salınımlı yapısı göz önünde bulundurulduğunda, bir tahmin oluşturmak için tahmin dizilerinin periyodik davranışını hesaba katan ekstrapolatörleri kullanmanın mantıklı olacağını varsayabiliriz.
Bizim durumumuzda, 10 adımlı doğrusal ekstrapolasyon kullanılarak her bir IMF için bir tahminin oluşturulacağı daha basit bir ekstrapolatörün çalışmasına ilişkin bir örneği gözden geçireceğiz. Bu tahminin sonucu Şekil 7'de gösterilmiştir.
Şek. 7. USDCHF, H4 fiyat teklifleri için tahmin oluşturma
Bir tahmin oluşturulurken, bir veya daha fazla en yüksek frekanslı bileşeninin atılabileceğine dikkat edilmelidir. Böylece, yüksek frekanslı gürültünün tahmin üzerindeki etkisi azaltılabilir. İlk IMF'yi hariç tutan tahminin sonucu Şekil 7'de gösterilmiştir. Bu durumda bu yöntemin tahmin edilebilirliği değerlendirilmemiştir. Bu konu bu makalenin kapsamı dışında kaldığı için, ampirik mod ayrıştırmasına dayanan tahmin yöntemlerinin ayrıntılı bir analizi burada sağlanmamıştır.
Trendsizleştirmeden söz etmeden geçemeyiz. EMD kullanılarak ayrı dizi bileşenleri elde edildikten sonra, trendsizleştirme için oldukça esnek bir algoritma geliştirilebilir. Ayrıştırmanın kalan kısmı veya son ayıklanan bir veya daha fazla IMF'ye eklenen kalan kısım bir trend olarak alınabilir. Kalan kısım ile birlikte bir trend çizgisi oluşturmaya dahil olan IMF'lerin sayısı, trendsizleştirmeden sonra dizide kalması gereken düşük frekanslı bileşenlerin sayısına bağlı olarak değişebilir.
Bu nedenle, trendsizleştirme için, son bileşen veya birkaç son bileşen hariç, ayrıştırma sonucunda ayıklanan tüm IMF'leri toplamak yeterlidir. Bu işlem, en yüksek frekanslı bileşenin de bileşenlerin toplanması sürecinden hariç tutulması durumunda, elde edilen sonucun yumuşatılmasıyla kolaylıkla birleştirilebilir. Şekil 8'de, yukarıdaki tekniğin kullanıldığı bir trendsizleştirme örneği gösterilmiştir.
Şek. 8. Yumuşatma ile birleştirilmiş trendsizleştirme
İlk veri olarak EURUSD, Günlük fiyat teklifleri dizisi alınmıştır. Ayrıştırmanın ardından, ayrıştırma kalan kısmı, son ve ilk IMF'ler hariç, ayıklanan tüm bileşenler toplanmıştır. Bu, yalnızca trendsizleştirmeyle değil, aynı zamanda ortaya çıkan eğrinin belirli bir şekilde yumuşatılmasıyla da sonuçlanmıştır.
Ampirik mod ayrıştırma yönteminin uygulama alanı, kesinlikle makalede verilen basit örneklerle sınırlı değildir. Ancak bu makale, EMD yönteminin uygulanmasından ziyade bu şekilde uygulanması konularına odaklandığı için, aşağıda verilen örnekleri ele alalım.
Varsayılan olarak CEMDecomp.mqh içinde ayarlanan parametreler kullanılarak elde edilen ayrıştırma sonucunu gösteren Şekil 9, EMD yönteminin bu uygulamasıyla sunulan işlevselliğin ek bir gösterimi olarak işlev görebilir. Bu örnek, XAUUSD H4 fiyat tekliflerinin kullanımına dayanmaktadır. Dizi uzunluğu 150 öğedir.
Şek. 9. XAUUSD H4 fiyat teklifleri kullanılarak ayrıştırma örneği
Şekil 9'daki bileşenlerin her birine otomatik ölçeklendirme uygulanmıştır.
Sonuç
Ampirik mod ayrıştırma yönteminin yanı sıra Hilbert-Huang dönüşümünün durağan olmayan ve doğrusal olmayan süreçlerden gelen verileri analiz etmeye yönelik olduğunu unutmayın. Bu, bu yaklaşımın doğrusal ve durağan dizilere uygulanamayacağı anlamına gelmez.
Ayrıştırma algoritmalarında kullanılan birkaç yaklaşıma makalenin başında kısaca değinilmiştir. Ve bu algoritmaların çoğunun, bir diziyi, aslında söz konusu diziyi oluşturan ilk süreçleri temsil etmeyen bileşenlere ayrıştırdığından söz edilmiştir.
Bu bileşenler bir şekilde yapaydır; bunların ayıklanması ancak bir giriş dizisinin yapısının daha iyi anlaşılmasına yardımcı olur ve çoğu durumda analizini kolaylaştırmaya olanak tanır. EMD yöntemi bir istisna değildir. Bu yöntem kullanılarak elde edilen bileşenlerin, ilk analiz edilen verilerin orijinal olarak oluşturulduğu gerçek fiziksel süreçleri yansıttığını hiçbir zaman düşünmemelisiniz.
Bu makalede önerilen uygulama, ideal olarak kabul edilemeyeceği için muhtemelen daha fazla test ve iyileştirme gerektirebilir.
Ancak bu makalenin temel amacı, okuyucunun EMD yöntemi ve uygulanmasıyla ilgili bazı özellikler hakkında bilgi sahibi olmasını sağlamaktı.
Birkaç cümleyle özetlemek gerekirse:
- Makalede, ayrıştırma ile ilgili bazı genel konulara çok kısa bir şekilde değinilmiştir;
- Birkaç sözcükle ampirik mod ayrıştırma yönteminin özü açıklanmıştır;
- EMD yönteminin uygulandığı CEMDecomp sınıfı arayüzünün listesi ve kısa bir açıklaması sunulmuştur;
- CEMDecomp sınıfı ile, yöntemlerinin nasıl çağrıldığını da gösteren etkileşim örneği verilmiştir;
- EMD yönteminin önerilen uygulamasının bazı özellikleri özetlenmiştir;
- Veri analizinde EMD yönteminin uygulamasını gösteren birkaç basit örnek verilmiştir;
- Makalenin sonunda, EMD yöntemini uygulayan CEMDecomp.mqh dosyasını ve CEMDecomp sınıfının kullanımını içeren tam test çalışmasının yer aldığı EMDecomposition.zip arşivini bulabilirsiniz.
Referanslar
Ek
Orijinal makale, 28 Haziran 2012'de yayınlanmıştır. Bu ek, 5 Temmuz 2012'de sunulmuştur.
Makaleye ek olarak alternatif bir EMD yöntemi uygulaması sunulmuştur. Bu uygulama CEMD sınıfı olarak görüntülenir ve aşağıda ekli CEMD_2.mqh dosyasına yerleştirilir.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/439
![MetaTrader Mobil Terminalinde MetaQuotes Kimliği](https://c.mql5.com/2/0/MetaQuotes-ID.png)
![Kapsamlı Olmayan İstatistiksel Dağılımların Yapısal Analizine Öz-Koordinatlar Yönteminin Uygulanması](https://c.mql5.com/2/0/Eigencoordinates_Nonextensive_Statistical_Distributions_MQL5.png)
![Standart Kitaplığın Alım Satım Stratejisi Sınıflarını Keşfetme - Stratejileri Özelleştirme](https://c.mql5.com/2/0/sl_article.png)
![Algoritmik ticaret makaleniz için 200 USD kazanın!](https://c.mql5.com/2/0/new_article_system.png)
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz