Fan sayfamıza katılın
- Görüntülemeler:
- 58
- Derecelendirme:
- Yayınlandı:
-
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
Ham döviz ve vadeli işlem fiyatları durağan değildir: bu verilerle eğitilen standart regresyon ve sınıflandırma modelleri, ciddi bir ileriye dönük önyargı ve sahte korelasyonlarla karşı karşıyadır. Basit çözüm olan tamsayı farklaştırma, durağan olmama durumunu ortadan kaldırır ancak bu süreçte tüm fiyat hafızasını yok eder ve tahmin modelinin ihtiyaç duyduğu otokorelasyon yapısını ortadan kaldırır.
Advances in Financial Machine Learning (López de Prado, 2018) kitabının 5. bölümünde tanıtılan sabit genişlikli kesirli fark alma (FFD) yöntemi, bu sorunu, maksimum hafızayı korurken durağanlık için yeterli olan tamsayı olmayan bir d ∈ (0, 1) mertebesinde fark alma işlemiyle çözer. Bu çalışma, söz konusu yöntemin üretim düzeyinde bir MQL5 uygulamasını sunmaktadır.

FFD çıktısının iki panelli gösterimi: durağan olmayan ham fiyat (a) ve durağan FFD serisi (b); geriye dönük pencere
Bileşenler
- FFDEngine.mqh — CFFDEngine sınıfını içeren, yalnızca başlık içeren kütüphane. Init(), Compute() (tek çubuk) ve ComputeBuffer() ( prev_calculated optimizasyonuna sahip tam gösterge tamponu) işlevlerini sağlar. OnInit() sonrasında dinamik bellek tahsisi yapılmaz.
- FFD.mq5 — CFFDEngine'i saran özel gösterge. FFD serisini ayrı bir grafik penceresinde çizer. Tüm ENUM_APPLIED_PRICE değerlerini destekler.
Algoritmanın Çalışma Şekli
Ağırlık vektörü, yineleme ile tanımlanır (AFML denklem 5.4):
w[0] = 1 w[k] = -w[k-1] * (d - k + 1) / k, k = 1, 2, ...
|w[k]| < eşik değeri olduğunda yineleme durur. Ardından vektör tersine çevrilir, böylece geriye dönük pencerede en eski fiyat en küçük ağırlığı, en yeni fiyat ise 1,0'ı alır. i numaralı çubuktaki FFD değeri, tersine çevrilmiş ağırlık vektörünün logaritmik fiyat penceresi [i−genişlik, …, i] ile iç çarpımıdır.
d = 0,4 ve eşik = 1e-5 olduğunda, pencere genişliği 1 457 çubuktur. Eşik = 1e-3 olduğunda ise 54 çubuktur. Eşik, durağanlık-hafıza dengesi üzerinde kontrol sağlar: daha küçük değerler, daha geniş bir geriye dönük inceleme gereksinimi pahasına daha fazla hafıza korur.
Giriş Parametreleri
| Parametre | Varsayılan | Açıklama |
|---|---|---|
| InpD | 0,4 | Kesirli farklaştırma derecesi. Tipik aralık: 0,1–0,9. 0,5'in üzerindeki değerler tamsayıya yakın farklaştırma sağlar; 0,1'in altındaki değerler ise ham fiyatlara yakın sonuçlar verir. Optimal d değeri, seçilen anlamlılık düzeyinde ADF testini geçen en küçük değerdir — Python arama prosedürü için ilgili makaleye bakınız. |
| InpThreshold | 1e-5 | Ağırlık kesme değeri τ. |w[k]| < τ olduğunda yineleme durur. Daha küçük değerler daha geniş bir pencere ve daha iyi bellek tasarrufu sağlar, ancak ilk geçerli çıktının elde edilmesi için daha fazla geçmiş çubuk gerektirir. Önerilen aralık: 1e-4 ile 1e-5 arası. |
| InpUseLog | true | Fark alma işleminden önce ln(fiyat) uygulanır. Ham fiyat serileri (kapanış, açılış, en yüksek, en düşük) için önerilir. Yalnızca girdi zaten bir getiri veya log-getiri serisi ise false olarak ayarlayın. |
| InpPrice | PRICE_CLOSE | Uygulanan fiyat türü. Herhangi bir ENUM_APPLIED_PRICE değerini kabul eder: PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_CLOSE, PRICE_MEDIAN, PRICE_TYPICAL, PRICE_WEIGHTED. |
Kurulum
- FFDEngine.mqh dosyasını MQL5\Include\ klasörüne (veya CodeBase indirimi sırasında belirtilen alt klasöre — aşağıdaki dosya konumlarına bakın) kopyalayın.
- FFD.mq5 dosyasını MQL5\Indicators\Downloads\ klasörüne kopyalayın (CodeBase indirilirken bu klasöre otomatik olarak yerleştirilir).
- Her iki dosyayı da MetaEditor'da derleyin. Gösterge, #property strict altında herhangi bir uyarı vermeden derlenmelidir.
- FFD'yi herhangi bir grafiğe ekleyin. Geriye dönük pencere (genişlik + 1 çubuk) doldurulduktan sonra gösterge penceresi ana grafiğin altında görünecektir.
Kendi EA'nızda veya Göstergenizde CFFDEngine'i Kullanma
FFDEngine.mqh, yalnızca başlık içeren bir kütüphanedir. Bunu dahil edin ve OnInit() içinde bir kez Init() işlevini çağırın:
#include <FFDEngine.mqh> //--- Sabit Genişlikli Kesirli Farklandırma motorunun genel örneği CFFDEngine g_engine; //+------------------------------------------------------------------+ //| Uzman başlatma işlevi | //+------------------------------------------------------------------+ int OnInit() { //--- FFD motorunu d=0,4, eşik=1e-5 ve Log Dönüşümü etkin olarak başlat //--- Bu yapılandırma, EA başlatma aşamasında statik bir bellek ağırlık penceresi oluşturur if(!g_engine.Init(0.4, 1 e-5, true)) { Print("FFD engine init failed"); return(INIT_FAILED); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Uzman vuruş fonksiyonu | //+------------------------------------------------------------------+ void OnTick() { //--- Tam olarak kaç adet geçmiş çubuğun gerekli olduğunu öğrenmek için motora sorgu gönder //--- eşik değerine göre geçerli bir FFD değeri hesaplamak için int need = g_engine.GetMinBars(); double close[]; //--- Gerekli derinlikteki geçmiş fiyat verilerini al. //--- Geçmiş henüz senkronize edilmemişse veya yetersizse, hataları önlemek için yürütmeyi atlayın. if(CopyClose(_Symbol, _Period, 0, need, close) < need) return; //--- Dizi indekslemesinin kronolojik sırayla uyumlu olduğundan emin olun (en eski çubuk 0 indeksinde) //--- tersine çevrilmiş FFD ağırlık vektörü matris dönüşümleriyle doğru şekilde hizalanması için ArraySetAsSeries(close, false); //--- Mevcut canlı çubuk için sabit, kesirli farklı çıktı değerini hesapla double ffd_value = g_engine.Compute(close, need); //--- ffd_value değerini modeliniz için bir özellik olarak kullanın. }
Python ile Çapraz Doğrulama
Eşlik eden FFDValidation.mq5 dosyası (makale indirme bölümünde mevcuttur), FFD değerlerini bir CSV dosyasına aktarır. ffd_cross_validate.py adlı Python betiği, afml kütüphanesini kullanarak aynı değerleri yeniden hesaplar ve çubuk bazında karşılaştırma yapar. d = 0,4 ve eşik değeri = 1e-5 olarak ayarlandığında, EURUSD H1'in 5.000 çubuğunda maksimum mutlak fark 1e-12'nin altındadır.
Performans Notları
- Ağırlık vektörü tahsisi: OnInit() içinde bir kez. Tick yolunda sıfır tahsis.
- Çubuk başına hesaplama: O(genişlik) nokta çarpımı. Modern donanımlarda, 1.457 eleman üzerinden yapılan bir nokta çarpımı 50 μs'nin altında tamamlanır.
- ComputeBuffer(), prev_calculated argümanını kullanarak önceden hesaplanmış çubukları atlar — her tick'te yalnızca mevcut tamamlanmamış çubuk yeniden hesaplanır.
Kaynakça ve İlgili Makale
- López de Prado, M. (2018). Finansal Makine Öğrenimindeki Gelişmeler, Bölüm 5 (Kesirli Türev), s. 76–95. Wiley.
- Tam teori, Python uygulaması ve ADF tabanlı parametre arama: Makine Öğrenimi için Özellik Mühendisliği — Bölüm 2: MQL5'te Sabit Genişlikli Kesirli Türevlemenin Uygulanması, Patrick M. Njoroge.
- Eşlik eden doğrulama araçları: FFDValidation.mq5 ve ffd_cross_validate.py — makale indirme paketinde yer almaktadır.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/72499
Uzun Vadeli Trend TRIX Osilatörü
Çift TRIX ve LWMA filtrelemesine dayalı uzun vadeli momentum ve trend osilatörü.
Institutional Kinematic Price Physics (Velocity and Acceleration)
Fiyat hareketlerine diferansiyel hesabı uygulayan, gerçek Piyasa Hızı (1. Türev) ve Piyasa İvmesi (2. Türev) değerlerini ortaya çıkararak trendin tükenmesini gerçekleşmeden önce öngören nicel bir fizik motoru.
Session Boxes
Session Boxes is a custom indicator for MetaTrader 5 that draws color-coded rectangular boxes on the chart representing the high-low range of the Asia, London, and New York trading sessions. The indicator uses H1 data internally and supports configurable session hours in GMT along with a broker server offset parameter
Gold FVG Bulucu
Bu gösterge, grafikte dengesizlik bölgelerini (Fair Value Gap) tespit eder ve fiyat bu bölgelere geri döndüğünde bir okla sinyal verir. Altın, Forex ve M5 ile H4 arasındaki zaman dilimlerinde işlem gören tüm likit enstrümanlar için uygundur.