Fan sayfamıza katılın
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
ALGLIB - Sayısal Analiz Kütüphanesi - MetaTrader 5 için kütüphane
- Yayınlayan:
- MetaQuotes
- Görüntülemeler:
- 600
- Derecelendirme:
- Yayınlandı:
- 2022.03.21 09:24
- Güncellendi:
- 2023.09.08 17:30
- Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
Gerçek yazar
Sergey Bochkanov. ALGLIB projesinin web sitesi - http://www.alglib.net/. Kütüphanenin geçmişi 1999 yılına kadar uzanmaktadır.
ALGLIB, en büyük ve en eksiksiz matematik kütüphanelerinden biridir
Bir hızlı Fourier dönüşümü yapmanız veya bir diferansiyel denklem sistemini çözmeniz mi gerekiyor? Kaynak kodu olarak tüm metotları tek bir yerde toplamaya çalışan karmaşık bir veri analizi mi yapıyorsunuz? O halde ALGLIB sayısal metotlar kütüphanesi tam size göre!
ALGLIB, şu anda birkaç programlama dilinde yazılmış en iyi algoritma kütüphanelerinden biridir. ALGLIB'in resmi web sitesinde belirtilen özellikleri:
ALGLIB, platformlar arası bir sayısal analiz ve veri işleme kütüphanesidir. Birkaç programlama dilini (C++, C#, Pascal, VBA) ve birkaç işletim sistemini (Windows, Linux, Solaris) destekler. ALGLIB şu özelliklere sahiptir:
- Lineer cebir (doğrudan algoritmalar, EVD/SVD)
- Denklem sistemlerini çözme (doğrusal ve doğrusal olmayan)
- İnterpolasyon
- Optimizasyon
- Hızlı Fourier dönüşümleri
- Sayısal entegrasyon
- Lineer ve lineer olmayan en küçük kareler yöntemiyle yaklaşım
- Adi diferansiyel denklemler
- Özel fonksiyonlar
- İstatistikler (tanımlayıcı istatistikler, hipotez testi)
- Veri analizi (sinir ağları dahil sınıflandırma/regresyon)
- Lineer cebir, interpolasyon, optimizasyon ve diğer algoritmaların çoklu hassas versiyonları (kayan nokta hesaplamaları için MPFR kullanarak)
Neden ALGLIB'yi seçmelisiniz? Çünkü:
- portable. Hemen hemen her derleyici kullanılarak hemen hemen her platformda derlenebilir (daha fazla bilgi için uyumluluk tablosuna bakın).
- kullanımı kolay. Birçok programlama dilini destekler. Tek bir dil kullanıyorsanız, harici bir kütüphaneyi derlemek ve bağlamak için başka bir dil (örneğin FORTRAN) öğrenmeniz gerekmez.
- açık kaynak. GPL 2+ koşulları altında ücretsiz olarak kullanılabilir.
- ticari kullanıcılar için de uygundur. ALGLIB'i ticari uygulamalarda kullanmak isteyenler ticari lisans satın alabilirler.
ALGLIB kütüphanesi sürekli olarak geliştirilmekte, yeni fonksiyonlar eklenmekte ve kullanıcıların yorumlarına göre düzenli olarak iyileştirmeler yapılmaktadır. En son sürüm 4.0'dır.
Ayrıca kütüphane, sunulan metotların işlevselliğini en üst düzeyde kapsayan çok sayıda test senaryosu da içerir. Bu, bağımsız olarak testler gerçekleştirmenize ve hataları projenin yazarlarına bildirmenize olanak tanır.
Kütüphaneyle çalışmak için CAlglib sınıfının statik fonksiyonlarının kullanılması gerekir - kolaylık sağlanması adına kütüphanenin tüm fonksiyonları statik fonksiyonlar olarak CAlgib sistem sınıfına taşınmıştır.
testclasses.mq5 ve testinterfaces.mq5 test senaryoları komut dosyaları, basit bir usealglib.mq5 demo komut dosyası ile birlikte dahil edilmiştir. Test senaryolarını başlatmak için aynı ada sahip dosyalar (testclasses.mqh ve testinterfaces.mqh) kullanılır. \MQL5\Scripts\Alglib\Testcases\ klasörüne yerleştirilmelidirler.
Not: testclasses.mq5 komut dosyasının yürütülmesi oldukça uzun zaman alır (yaklaşık 8 dakika).
ALGLIB'in MQL5'e port edilen kütüphane paketleri hakkında daha detaylı bilgiler aşağıdadır:
Paketler | Açıklama |
---|---|
alglib.mqh | Kütüphanenin ana paketidir ve özel fonksiyonları içerir.Kütüphaneyle çalışmak için çağrılması gerekenler bu fonksiyonlardır. |
alglibinternal.mqh | Kütüphanenin diğer paketlerinin çalışması için gerekli olan yardımcı sınıflardır. |
alglibmisc.mqh | Paket şu sınıfları içerir:
|
ap.mqh | Bu paket de ayrıca kütüphanenin diğer paketlerinin çalışması için gerekli olan yardımcı sınıfları içerir. |
bitconvert.mqh | C++'da temel olan ancak MQL5'te yerleşik olmayan sınıflar ve fonksiyonlar:
|
dataanalysis.mqh | Veri analizi sınıfları:
|
delegatefunctions.mqh | Paket, temsilciler için yedek olarak oluşturulan sınıfları içerir. Bu sınıfların nesneleri, çeşitli kütüphane metotlarından optimize edilmiş fonksiyonlardır. |
diffequations.mqh | Adi diferansiyel denklemleri çözme sınıfı:
|
fasttransforms.mqh | Hızlı dönüşüm sınıfları:
|
integration.mqh | Sayısal entegrasyon sınıfları:
|
interpolation.mqh | İnterpolasyon, yaklaşım ve sayısal türevleme sınıfları:
|
linalg.mqh | Bazı lineer cebir işlemlerinin hesaplanması için sınıflar:
|
matrix.mqh | Matris sınıfları: tam sayı, sürekli ve karmaşık. |
optimization.mqh | Tek boyutlu ve çok boyutlu optimizasyon sınıfları:
|
solvers.mqh | Lineer ve lineer olmayan denklem sistemlerini çözme sınıfları:
|
specialfunctions.mqh | Dağılım fonksiyonlarının, integrallerin ve polinomların sınıfları:
|
statistics.mqh | İstatistiksel veri analizi sınıfları:
|
Kod:
Kütüphane fonksiyonları, kullanımları hakkında ayrıntılı yorumlara sahiptir.
//+------------------------------------------------------------------+ //| Dağılım momentlerinin hesaplanması: ortalama, varyans, | //| çarpıklık, basıklık. | //| GİRDİ PARAMETRELERİ: | //| X - örneklem | //| N - N>=0, örneklem büyüklüğü | //| * sağlanırsa, X'in yalnızca öncü N elamanları | //| işlenir | //| * sağlanmazsa, X'in büyüklüğünden | //| otomatik olarak belirlenir | //| ÇIKTI PARAMETRELERİ | //| Mean - ortalama. | //| Variance- varyans. | //| Skewness- çarpıklık (eğer varyans<>0; aksi takdirde sıfır).| //| Kurtosis- basıklık (eğer varyans<>0; aksi takdirde sıfır). | //+------------------------------------------------------------------+ static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean, double &variance,double &skewness,double &kurtosis) { //--- kontrol et if(!CAp::Assert(n>=0,__FUNCTION__+": hata değişkeni")) return(false); //--- kontrol et if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": büyüklük(x)<n")) return(false); //--- kontrol et if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x sonlu vektör değil")) return(false); //--- değişkenleri kontrol et double v=0; double v1=0; double v2=0; double stddev=0; //--- başlat, özel durum 'N=0' mean=0; variance=0; skewness=0; kurtosis=0; //--- kontrol et if(n<=0) return(true); //--- ortalama for(int i=0;i<n;i++) mean+=cx[i]; mean/=n; //--- varyans (düzeltilmiş iki geçişli algoritma kullanılarak) if(n!=1) { //--- hesapla for(int i=0;i<n;i++) v1+=CMath::Sqr(cx[i]-mean); for(int i=0;i<n;i++) v2+=cx[i]-mean; v2=CMath::Sqr(v2)/n; variance=(v1-v2)/(n-1); //--- hesapla stddev=MathSqrt(variance); } else variance=EMPTY_VALUE; //--- çarpıklık ve basıklık if(stddev!=0) { //--- hesapla for(int i=0;i<n;i++) { v=(cx[i]-mean)/stddev; v2=CMath::Sqr(v); skewness+=v2*v; kurtosis+=CMath::Sqr(v2); } //--- değerleri hesapla skewness=skewness/n; kurtosis=kurtosis/n-3; } //--- başarılı yürütme return(true); }
Kütüphaneyle çalışmak için CAlglib sınıfının statik fonksiyonları kullanılmalıdır. Aşağıda, bazı istatistiksel ticaret parametrelerinin hesaplanması için olan usealglib.mq5 fonksiyon komut dosyasının kaynak kodu verilmiştir:
//+------------------------------------------------------------------+ //| UseAlglib.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| kütüphaneleri dahil et | //+------------------------------------------------------------------+ #include <Math\Alglib\alglib.mqh> #include <Trade\DealInfo.mqh> #include <Arrays\ArrayDouble.mqh> //+------------------------------------------------------------------+ //| Komut Dosyası başlatma fonksiyonu | //+------------------------------------------------------------------+ void OnStart() { //--- işlemlerle ilgili verilere erişmek için nesnesi CDealInfo deal; //--- her emrin kâr/zarar verilerinin saklanması için nesne CArrayDouble *profit=new CArrayDouble; //--- bakiye verisinin saklanması için nesne CArrayDouble *balance_total=new CArrayDouble; //--- başlangıç bakiyesi double balance=0; //--- geçmiş verileri iste HistorySelect(0,TimeCurrent()); //--- toplam emir sayısını al int deals_total=HistoryDealsTotal(); //--- kâr ve bakiye verilerini al for(int i=0;i<deals_total;i++) { //--- i indeksindeki işleme geç deal.SelectByIndex(i); //--- başlangıç bakiyesi if(deal.DealType()==DEAL_TYPE_BALANCE) { if(NormalizeDouble(deal.Profit()+deal.Swap(),2)>=0.0) if(balance==0.0) balance=deal.Profit(); } //--- kâr ve bakiye if(deal.DealType()==DEAL_TYPE_BUY || deal.DealType()==DEAL_TYPE_SELL) if(deal.Entry()==DEAL_ENTRY_OUT || deal.Entry()==DEAL_ENTRY_INOUT) { profit.Add(NormalizeDouble(deal.Profit()+deal.Swap()+deal.Commission(),2)); balance_total.Add(balance); balance=balance+NormalizeDouble(deal.Profit()+deal.Swap()+deal.Commission(),2); } } balance_total.Add(balance_total.At(balance_total.Total()-1)+profit.At(balance_total.Total()-1)); //--- bakiye verilerini double türü diziye kopyala double arr_balance[]; ArrayResize(arr_balance,balance_total.Total()); for(int i=0;i<balance_total.Total();i++) arr_balance[i]=balance_total.At(i); //--- kâr verilerini double türü diziye kopyala double arr_profit[]; ArrayResize(arr_profit,profit.Total()); for(int i=0;i<profit.Total();i++) arr_profit[i]=profit.At(i); //--- lineer regresyon //--- bağımsız değişken sayısı int nvars=1; //--- örneklem büyüklüğü int npoints=balance_total.Total(); //--- lineer regresyon için parametre matrisi oluştur CMatrixDouble xy(npoints,nvars+1); for(int i=0;i<npoints;i++) { xy[i].Set(0,i); xy[i].Set(1,arr_balance[i]); } //--- hesaplama sonucunu tespit etmek için değişken (başarılı, başarısız) int info; //--- hesaplamalarla ilgili verileri saklamak için gereken sınıf nesneleri CLinearModelShell lm; CLRReportShell ar; //--- regresyon sonuçlarını saklamak için diziler double lr_coeff[]; double lr_values[]; ArrayResize(lr_values,npoints); //--- lineer regresyon katsayılarını hesapla CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar); //--- lineer regresyon katsayılarını al CAlglib::LRUnpack(lm,lr_coeff,nvars); //--- yeniden yapılandırılmış lineer regresyon değerlerini al for(int i=0;i<npoints;i++) lr_values[i]=lr_coeff[0]*i+lr_coeff[1]; //--- Beklenen Getiriyi hesapla double exp_payoff,tmp1,tmp2,tmp3; CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3); //--- HPR dizisini hesapla double HPR[]; ArrayResize(HPR,balance_total.Total()-1); for(int i=0;i<balance_total.Total()-1;i++) HPR[i]=balance_total.At(i+1)/balance_total.At(i); //--- HPR'ın standart sapmasını ve ortalamasını hesapla double AHPR,SD; CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3); SD=MathSqrt(SD); //--- LR Korelasyonunu hesapla double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values); //--- LR Standart Hatasını hesapla double lr_stand_err=0; for(int i=0;i<npoints;i++) { double delta=MathAbs(arr_balance[i]-lr_values[i]); lr_stand_err=lr_stand_err+delta*delta; } lr_stand_err=MathSqrt(lr_stand_err/(npoints-2)); //--- Sharpe Oranını hesapla double sharpe_ratio=(AHPR-1)/SD; //--- yazdır PrintFormat("-----------------------------------------------"); PrintFormat("Lineer regresyon: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]); //--- parametreler PrintFormat("Beklenen Getiri = %.2f",exp_payoff); PrintFormat("AHPR = %.4f",AHPR); PrintFormat("Sharpe Oranı = %.2f",sharpe_ratio); PrintFormat("LR Korelasyonu = %.2f",lr_corr); PrintFormat("LR Standart Hatası = %.2f",lr_stand_err); PrintFormat("-----------------------------------------------"); //--- nesneleri sil delete profit; delete balance_total; } //+------------------------------------------------------------------+
Aşağıdaki sonucu elde ederiz (ticaretinizin sonuçlarına bağlı olarak):
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/1146
Bu Uzman Danışman, girdi parametrelerinin sayısı, türleri ve değerleri hakkında bilgi almak için IndicatorParameters() fonksiyonun kullanımını gösterir.
Optimizasyon Sonuçlarının Gerçek Zamanlı Olarak GörselleştirilmesiOptimizasyon sonuçlarının gerçek zamanlı olarak görselleştirilmesinin bir örneği (bakiye hareketleri ve Uzman Danışmanın istatistiksel parametreleri).
Moving Average Uzman Danışmanı, fiyatın MA'yı çaprazlamasıyla işlem gerçekleştirir.
MACD SampleMACD Sample Uzman Danışmanı, MACD'nin ana ve sinyal çizgilerinin çaprazlamasıyla işlem gerçekleştirir. Bu Uzman Danışman, Uzman Danışman geliştirmede nesne yönelimli yaklaşımın bir örneğidir.