Fan sayfamıza katılın
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
- Görüntülemeler:
- 451
- Derecelendirme:
- Yayınlandı:
- 2022.03.21 09:38
- Güncellendi:
- 2023.09.12 10:32
-
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.
Not: Uzman Danışman, MetaTrader 4 yapı 555 ve üzerinde çalışır.
Arşiv şuraya açılmalıdır: terminal_veri_klasörüKütüphanenin kodları şu klasörde bulunur: terminal_veri_klasörü\Math\Alglib\
Test komut dosyaları örnekleriyse şu klasörde bulunur: terminal_veri_klasörü\MQL4\Scripts\Alglib\
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 3.6.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.mq4 ve testinterfaces.mq4 test senaryoları komut dosyaları, basit bir usealglib.mq4 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. \MQL4\Scripts\Alglib\Testcases\ klasörüne yerleştirilmelidirler.
Not: testclasses.mq4 komut dosyasının yürütülmesi oldukça uzun zaman alır (yaklaşık 30 dakika).
ALGLIB'in MQL4'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 MQL4'te yerleşik olmayan sınıflar ve fonksiyonlar:
|
complex.mqh | Karmaşık sayılarla çalışmak için complex yapıları tanımlar. |
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.mq4 fonksiyon komut dosyasının kaynak kodu verilmiştir:
//+------------------------------------------------------------------+ //| UseAlglib.mq4 | //| 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" #property strict //+------------------------------------------------------------------+ //| kütüphaneleri dahil et | //+------------------------------------------------------------------+ #include <Math\Alglib\alglib.mqh> #include <Arrays\ArrayDouble.mqh> //+------------------------------------------------------------------+ //| Komut Dosyası başlatma fonksiyonu | //+------------------------------------------------------------------+ void OnStart() { //--- 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 //--- toplam emir sayısını al int orders_total=OrdersHistoryTotal(); //--- kâr ve bakiye verilerini al for(int i=0;i<orders_total;i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Geçmiş veritabanına erişim hatası (",GetLastError(),")"); return; } int order_type=OrderType(); //--- başlangıç bakiyesi if(order_type==6) // OP_BALANCE=6 { if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0) if(balance==0.0) balance=OrderProfit(); } //--- kâr ve bakiye if(order_type==OP_BUY || order_type==OP_SELL) { double order_profit=OrderProfit()+OrderSwap()+OrderCommission(); profit.Add(NormalizeDouble(order_profit,2)); balance_total.Add(balance); balance=balance+NormalizeDouble(order_profit,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/11077
![OBJ_EDIT_Example](https://c.mql5.com/i/code/expert.png)
OBJ_EDIT grafik nesnesiyle çalışma örneği.
![OBJ_Label_Example](https://c.mql5.com/i/code/expert.png)
OBJ_LABEL grafik nesnesiyle çalışma örneği.
![Zigzag R](https://c.mql5.com/i/code/indicator.png)
2005'te MT4 ile (ve MT3.83'te) gelen Zigzag göstergesinin optimize edilmiş versiyonudur.
![SignalsDemo](https://c.mql5.com/i/code/expert.png)
Bu Uzman Danışman, sinyallerin özelliklerini görüntüler, sinyal kopyalama ayarlarının yönetilmesine ve seçilen ticaret sinyaline abone olunmasına veya aboneliğin iptal edilmesine olanak sağlar.