Ticaret robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Twitter üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Kütüphaneler

Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane - MetaTrader 5 için kütüphane

Yayınlayan:
MetaQuotes
Görüntülemeler:
438
Derecelendirme:
(34)
Yayınlandı:
2022.03.21 09:39
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Gerçek yazar

Dmitry Kalyuzhny. FuzzyNet projesinin web sitesi - http://sourceforge.net/projects/fuzzynet/

Arşivi terminal_veri_klasörü klasörüne çıkarın
Kütüphanenin kodları şu klasörde bulunur: terminal_veri_klasörü\MQL5\Include\Math\FuzzyNet\
Test komut dosyaları örnekleriyse şu klasörde bulunur: terminal_veri_klasörü\MQL5\Scripts\FuzzyNet\

FuzzyNet, bulanık modeller oluşturmak için en popüler matematik kütüphanelerinden biridir

Fuzzy Logic Library Microsoft.Net (FuzzyNet), Mamdani ve Sugeno türü bulanık çıkarım sistemlerini uygulayan, kullanımı kolay bir bulanık mantık kütüphanesidir.

FuzzyNet şunları içerir:

  • 5 üyelik fonksiyonu.
  • Bulanık sistem kuralları geliştirmek için esnek form.
  • Mamdani türü bulanık çıkarım sistemi.
  • Sugeno türü bulanık çıkarım sistemi.
  • Mamdani türü sistemler için bir durulaştırma metodu.
  • Sınırsız sayıda girdi ve çıktı değişkeni.

Kütüphaneyi MQL5'e port ederken şu eklemeler yapılmıştır:

  • 8 yeni üyelik fonksiyonu.
  • Mamdani türü sistemler için 4 yeni durulaştırma metodu.

Kütüphaneyi kullanma

  1. Görevinize bağlı olarak, boş bir bulanık Mamdani veya Sugeno türü sistem oluşturun.
  2. Ardından, bulanık girdi ve çıktı değişkenlerini oluşturun.
  3. Her bulanık değişkene uygun terimler eklenir. Öncesinde, terime bir ad ve bir üyelik fonksiyonu atanır.
  4. Değişkenler sisteme eklenir.
  5. Kural kümesi oluşturulur.
  6. Kurallar sisteme eklenir.
  7. Girdi verileri sisteme gönderilir.
  8. Sistem hesaplama fonksiyonu çağrılır.

Not: Mamdani türü çıkarım sistemi, oluşturulduktan sonra sistem hesaplama fonksiyonu çağrılmadan önce herhangi bir aşamada yapılandırılabilir. Sistemin oluşturulmasından sonra parametreleri değiştirilmediyse, sistem varsayılan parametrelerle çalışır:

  • Çıkarım, Min operatörü kullanılarak, yani çıktı bulanık kümesinin kesilmesiyle gerçekleştirilir.
  • Toplama, Max operatörü kullanılarak, yani çıkarımdan sonra elde edilen çıktı üyelik fonksiyonlarının maksimum değerlerinin elde edilmesiyle gerçekleştirilir.
  • Durulaştırma, ağırlık merkezi yöntemi kullanılarak gerçekleştirilir.

FuzzyNet kütüphanesinin (v. 1.2.0) port edilmesi aşağıda gösterilmiştir.

Kütüphaneyle çalışmak için, oluşturduğunuz sisteme bağlı olarak MamdaniFuzzySystem.mqh veya SugenoFuzzySystem.mqh dosyasını ekleyin.

FuzzyNet'in port edilen kütüphane paketleri hakkında daha detaylı bilgiler aşağıdadır:
Paketler
Açıklama
Dictionary.mqh
Bu paket, kütüphanenin diğer paketlerinin çalışması için gerekli olan yardımcı sınıfları içerir.
FuzzyRule.mqh
Bulanık kurallar oluşturmak için sınıflar:
  1. GenericFuzzyRule - bulanık olmayan kural koşulu oluşturmak için sınıf.
  2. MamdaniFuzzyRule - Mamdani türü bulanık kural sonucu oluşturmak için sınıf.
  3. SugenoFuzzyRule - Sugeno türü bulanık kural sonucu oluşturmak için sınıf.

Paket ayrıca bulanık kuralların uygulanması için yardımcı sınıflar da içerir.

FuzzyTerm.mqh Bulanık terimler oluşturmak için paket.
FuzzyVariable.mqh Bulanık değişkenler oluşturmak için paket.
GenericFuzzySystem.mqh Mamdani ve Sugeno türü sistemler için ortak işlevselliği uygulayan sınıf.
Helper.mqh Bu paket, kütüphanenin diğer paketlerinin çalışması için gerekli olan yardımcı sınıfları içerir.
InferenceMethod.mqh Bu paket, kütüphanenin diğer paketlerinin çalışması için gerekli olan yardımcı sınıfları içerir.
MamdaniFuzzySystem.mqh Mamdani türü bulanık sistem yaratmak için sınıf.
MembershipFunction.mqh Üyelik fonksiyonlarının sınıfları:
  1. Gauss üyelik fonksiyonu.
  2. İki yönlü Gauss üyelik fonksiyonu.
  3. Genelleştirilmiş çan eğrili üyelik fonksiyonu.
  4. S eğrili üyelik fonksiyonu.
  5. Z eğrili üyelik fonksiyonu.
  6. Pi eğrili üyelik fonksiyonu.
  7. Sigmoid üyelik fonksiyonu.
  8. İki sigmoid üyelik fonksiyonunun çarpımı.
  9. İki sigmoid üyelik fonksiyonunun farkı şeklinde üyelik fonksiyonu.
  10. Yamuk üyelik fonksiyonu.
  11. Üçgen üyelik fonksiyonu.
  12. Bir sabit olarak belirtilen üyelik fonksiyonu.
  13. Üyelik fonksiyonlarının bir bileşimi olarak üyelik fonksiyonu.
RuleParser.mqh Bulanık kuralları analiz etmek için sınıf.
SugenoFuzzySystem.mqh Sugeno türü bulanık sistem yaratmak için sınıfı.
SugenoVariable.mqh Paket şu sınıfları içerir:
  1. LinearSugenoFuction - lineer fonksiyonlar oluşturmak için sınıf.
  2. SugenoVariable - Sugeno türü bulanık değişken oluşturmak için sınıf.

Sugeno türü bulanık değişkenler, Sugeno sistemi için kurallar geliştirirken kullanılır.

 

MQL5'te FuzzyNet Kütüphanesini Kullanma

Bir bulanık sistem yazmadan önce, aşağıdakiler de dahil olmak üzere elemanları hakkında net bir fikre sahip olmalısınız:

  1. Bulanık değişkenler tarafından yeniden düzenlenecek girdi ve çıktı değerlerinin sayısı.
  2. Her bulanık değişken için terim ve üyelik fonksiyonu sayısı.
  3. Görevinize bağlı olarak bulanık sistemin türü.
  4. Seçilen sisteme karşılık gelen bulanık kuralların sayısı ve içeriği.
  5. Sistemin spesifik parametreleri ve özellikleri.

Sistem geliştirme ve hesaplama:

  1. Boş bir sistem oluşturun.

    Mamdani türü bir sistem için:

    MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();
    Sugeno türü bir sistem için:
    SugenoFuzzySystem *fuzzy_system=new SugenoFuzzySystem();
  2. Sistemden ayrı olarak, tüm bulanık girdi değişkenlerini oluşturun ve bunlara parametre olarak ad ve maksimum/minimum değerler atayın:
    FuzzyVariable *fuzzy_variable=new FuzzyVariable(const string name,const double min,const double max);
  3. Bulanık terimlerin fonksiyonlarını oluşturun, bulanık terimlerin kendilerini oluşturun ve bunlara parametre olarak adlarını ve üyelik fonksiyonlarını atayın. Bundan sonra, terimleri karşılık gelen değişkenlere ekleyin. Program kodunu kısaltmak için bu işlem şu şekilde yazılabilir:
    fuzzy_variable.Terms().Add(new FuzzyTerm(const string name,new IMembershipFunction());
  4. Sonrasında, girdi değişkenlerini sisteme girin:
    fuzzy_system.Input().Add(FuzzyVariable fuzzy_variable);
  5. Sisteminizin türüne dikkat ederek çıktı değişkenlerini oluşturun. Mamdani türü bir sistem için oluşturma, 2. ve 3. adımlara benzerdir. Sugeno tipi bir model içinse, özel bulanık değişkenler oluşturmak gerekir ve parametre olarak yalnızca ad değişkenini alırlar:
    SugenoVariable *sugeno_variable=new SugenoVariable(const string name);
    Girdi değerlerinin lineer kombinasyonunu yorumlayan lineer fonksiyonlar, bulanık terimler yerine Sugeno türü bulanık değişkene eklenir. Lineer fonksiyon parametreleri olarak bir ad ve bir katsayı dizisi kullanılır. Bu diziye dayalı olarak bir lineer denklem oluşturulur, bu nedenle dizideki elemanların sırasına uymak önemlidir. Katsayı dizisinin uzunluğu, girdi değerlerinin sayısına eşit veya bir kat fazla olmalıdır. Uzunluklar eşitse, denklemin mutlak terimi sıfıra eşit olacaktır. Dizinin uzunluğu bir kat fazlaysa, mutlak terim son elemanın değerine eşit olacaktır. Dizinin diğer tüm elemanlarına, ilkinden başlayarak sisteme girildikleri sıraya göre bir bulanık girdi değişkeni atanır.
    sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(const string name, const double &coeffs[]));
  6. 4. adıma benzer şekilde, çıktı değişkenleri de sisteme eklenmelidir:

    Mamdani türü bir sistem için:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);

    Sugeno türü bir sistem için:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
  7. Sisteme uygun olarak bir kural kümesi düzenleyin. Kurallar, ortak bir dizge olarak ayarlanır ve anahtar kelimelere göre otomatik olarak analiz edilir. Anahtar kelimeler "if", "then", "is", "and", "or", "not", "(" , ")", "slightly", "somewhat", "very" and "extremely" ve sisteminizde bulunan tüm değişkenlerin, terimlerin ve fonksiyonların adlarıdır.

    Mamdani türü bir sistem için:

    MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);

    Sugeno türü bir sistem için:

    SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
  8. Tüm kuralları sisteme girin:

    Mamdani türü bir sistem için:

    fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);

    Sugeno türü bir sistem için:

    fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
  9. Hesaplama için değişkenlerin girdi değerlerini sisteme iletin. Bunu yapmak için tanımlanmaları gerekir. Girdi olarak sistem, Dictionary_Obj_Double sınıf nesnesini içeren değer listesini kabul eder. Bu sınıf, Dictionary.mqh dosyasında açıklanmıştır.
    Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;
    Sınıf, bir bulanık değişken ve bir sayısal değer olmak üzere iki parametreyi kabul eden SetAll(CObject *key, const double value) metodunu uygular. Bu eleman sistemin girdi değişkenidir.
    p_od_in.SetAll(FuzzyVariable fuzzy_variable,const double value);
    Diğer tüm girdi değerleri de aynı şekilde doldurulur. Liste oluşturun ve tüm değerleri listeye ekleyin:
    CList *in=new CList;
    in.Add(p_od_in);
  10. Çıktı değerleri de belirtilmelidir:
    Dictionary_Obj_Double *p_od_out=new Dictionary_Obj_Double;   
    CList *out=new CList;
  11. Sistem için, sistem hesaplama sonuçlarının listesini geri döndüren Calculate(CList *&list) fonksiyonunu çağırın:
    out=fuzzy_system.Calculate(in);
    out listesi, hesaplanan tüm çıktı değerlerini sisteme girildikleri sıraya göre saklar. Sadece onların alınması gerekir:
    p_od_out=out.GetNodeAtIndex(int index);
    double result=p_od_out.Value();
    Artık result değişkeni, sisteme girilen çıktı değeri için sistem hesaplama sonucunu indexte belirtilen sayı altında saklar.

Örnek Komut Dosyaları

Tips Sample (Mamdani)

Tips_Sample_Mamdani.mq5, hizmet ve yemek kalitesine bağlı olarak kuruluşa bırakılacak bahşiş yüzdesini hesaplar.

Girdi parametrelerini girin:

Girdi parametreleri

Hesaplama sonuçları:

Hesaplama sonuçları

Cruise Control Sample (Sugeno)

Cruise_Control_Sample_Sugeno.mq5 örnek komut dosyası, bir bulanık düzenleyici örneğidir. Mevcut sapma ve bu sapmanın değişim hızına ilişkin verileri kullanarak, aracın belirli bir hıza ulaşması için gerekli ivmeyi hesaplayan bir araç hız kontrol sistemidir.

Girdi parametrelerini girin:

Girdi parametreleri

Hesaplama sonuçları:

Hesaplama sonuçları

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/13697

WebRequest() ile Otomatik Mesaj Yayınlama WebRequest() ile Otomatik Mesaj Yayınlama

WebRequest() fonksiyonunu kullanarak MQL5.com web sitesinde görüntü içeren bir mesaj yayınlama örneği. Bu, kullanıcı adı ve şifre kullanarak nasıl yetki verileceğine ve metin mesajına nasıl görüntü ekleneceğine dair bir örnektir.

QuotesDemo QuotesDemo

Google Finance'ten dünya endekslerinin fiyatlarını alma örneği.

Düzenli İfadelerle Çalışmak İçin MQL5'te RegularExpressions Düzenli İfadelerle Çalışmak İçin MQL5'te RegularExpressions

Düzenli ifadeler, metinlerin hızlı ve esnek bir şekilde işlenmesi için resmi bir dil sağlar. Her normal ifade, normal ifade motorunun kaynak metinde eşleşmeler bulmaya çalıştığı bir kalıptır (maske). Bir kalıp, tek veya çok karakterli değişmez değerlerden oluşur.

Percentage of price movement per candle - Simple and Crucial Percentage of price movement per candle - Simple and Crucial

This indicator displays the percentage of price movement per candle, as an average of the latest candles.