Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Facebook ü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
I build robust trading tools for MetaTrader. Browse my free articles to learn, get the premium EAs/indicators on the Market, or hire me for custom coding.
| Turkish English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Görüntülemeler:
58
Derecelendirme:
(6)
Yayınlandı:
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ı 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 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 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

  1. 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.
  2. FFD.mq5 dosyasını MQL5\Indicators\Downloads\ klasörüne kopyalayın (CodeBase indirilirken 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 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

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.

Session Boxes 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 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.