Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Telegram üzerinde bulun!
Fan sayfamıza katılın
Kodu ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Kodu beğendiniz mi? MetaTrader 5 terminalinde deneyin
Göstergeler

Fixed-Width Fractional Differencing (FFD) - MetaTrader 5 için gösterge

Patrick Murimi Njoroge
Patrick Murimi Njoroge
Quantitative researcher building production-grade ML pipelines for MetaTrader 5.
Author of the "MetaTrader 5 Machine Learning Blueprint" (20+ parts) and
"Feature Engineering for ML" series on MQL5 Community — the most comprehensive
| Turkish English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Görüntülemeler:
76
Derecelendirme:
(6)
Yayınlandı:
Güncellendi:
FFD.mq5 (3.38 KB) görüntüle
\MQL5\Include\
MQL5 Freelance 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ı fark alma yöntemi, 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 sunum, söz konusu yöntemin üretim seviyesinde bir MQL5 uygulamasını sunmaktadır.

FFD göstergesi: ham fiyat (üstte) ile sabit FFD serisi (altta) karşılaştırması

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.mqhCFFDEngine 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.mq5CFFDEngine'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 dengesini kontrol eder: 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 fark alma derecesi. Tipik aralık: 0,1–0,9. 0,5'in üzerindeki değerler, tamsayıya yakın fark alma sonuçları verir; 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

  1. FFDEngine.mqh dosyasını MQL5\Include\ klasörünüze (veya CodeBase indirimi sırasında belirtilen alt klasöre — aşağıdaki dosya konumlarına bakın) kopyalayın.
  2. FFD.mq5 dosyasını MQL5\Indicators\Downloads\ klasörüne kopyalayın (CodeBase indirimi sırasında bu klasöre otomatik olarak yerleştirilir).
  3. Her iki dosyayı da MetaEditor'da derleyin. Gösterge, #property strict altında herhangi bir uyarı vermeden derlenmelidir.
  4. 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 Init() işlevini bir kez ç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 ayarlanan 5.000 çubukluk EURUSD H1 verisinde, maksimum mutlak fark 1e-12'nin altındadır.

Performans Notları

  • Ağırlık vektörü tahsisi: OnInit() içinde bir kez yapılır. Tick yolunda tahsis yapılmaz.
  • Ç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 tikte yalnızca mevcut tamamlanmamış çubuk yeniden hesaplanır.

Kaynakça ve İlgili Makale

MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/72499

Uzun Vadeli Trend TRIX Osilatörü 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) 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.

Gold FVG Bulucu 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.

Close Profit Positions Close Profit Positions

Kârlı Pozisyonları Kapat