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

ALGLIB - Sayısal Analiz Kütüphanesi - MetaTrader 4 için kütüphane

Görüntülemeler:
323
Derecelendirme:
(53)
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:

  1. CHighQualityRand - yüksek kaliteli rastgele sayı oluşturucu.
  2. CNearestNeighbor - KD-ağaçları oluşturma ve çözme.
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:
  1. BitConverter - int ve double türündeki rakamları bit dizisine dönüştüren (bunun tersi de geçerlidir) sınıf.
  2. CInfOrNaN - NaN'lar ve artı/eksi sonsuzların doğrulanması ve oluşturulması için sınıf.
  3. ArrayReverse - dizi elemanlarını tersine çevirme fonksiyonu.
  4. GetSelectionString - char türündeki dizi elemanlarından oluşan dizge elde etme fonksiyonu.
  5. MathSign - sayının işaretini hesaplamak için fonksiyon.
  6. MathSinh - hiperbolik sinüs hesaplama fonksiyonu.
  7. MathCosh - hiperbolik kosinüs hesaplama fonksiyonu.
  8. MathTanh - hiperbolik tanjant hesaplama fonksiyonu.
complex.mqh Karmaşık sayılarla çalışmak için complex yapıları tanımlar.
dataanalysis.mqh Veri analizi sınıfları:
  1. CBdSS - hata fonksiyonlarının hesaplanması.
  2. CDForest - karar ağacı ormanlarıyla çalışma.
  3. CKMeans - k-means++ algoritmasını kullanarak kümeleme.
  4. CLDA - lineer diskriminant analizi.
  5. CLinReg - lineer regresyon.
  6. CMLPBase - çok katmanlı algılayıcı (sinir ağları).
  7. CLogit - multinom logit regresyonu.
  8. CMarkovCPD - popülasyon verileri için Markov zincirleri.
  9. CMLPTrain - çok katmanlı algılayıcı eğitimi.
  10. CMLPE - sinir ağları toplulukları.
  11. CPCAnalysis - ana bileşenler metodu.
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ı:
  1. CODESolver - adi diferansiyel denklemleri çözme.
fasttransforms.mqh Hızlı dönüşüm sınıfları:
  1. CFastFourierTransform - hızlı Fourier dönüşümü.
  2. CConv - konvolüsyon.
  3. CCorr - çapraz korelasyon.
  4. CFastHartleyTransform - hızlı Hartley dönüşümü.
integration.mqh Sayısal entegrasyon sınıfları:
  1. CGaussQ - Gauss kareleme formülleri
  2. CGaussKronrodQ - Gauss-Kronrod kareleme formülleri.
  3. CAutoGK - adaptif entegratör.
interpolation.mqh İnterpolasyon, yaklaşım ve sayısal türevleme sınıfları:
  1. CIDWInt - ters ağırlıklı ortalama mesafe ile interpolasyon ve yaklaşım.
  2. CRatInt - rasyonel interpolasyon.
  3. CPolInt - polinom interpolasyonu.
  4. CSpline1D - tek boyutlu spline interpolasyonu.
  5. CLSFit - lineer veya lineer olmayan en küçük kareler yöntemiyle yaklaşım.
  6. CPSpline - parametrik spline interpolasyonu.
  7. CSpline2D - iki boyutlu spline interpolasyonu.
linalg.mqh Bazı lineer cebir işlemlerinin hesaplanması için sınıflar:
  1. COrtFac - QR/LQ ayrışmaları, Hessenberg ayrışmaları ve iki ve üç köşegenli matrislerin ayrışmaları.
  2. CEigenVDetect - özdeğerleri ve özvektörleri bulma.
  3. CMatGen - rastgele matris oluşturma.
  4. CTrFac - LU ve Cholesky ayrışmaları.
  5. CRCond - matris bağımlılık değeri hesaplama.
  6. CMatInv - matrisin tersini alma.
  7. CBdSingValueDecompose - iki köşegenli matrisin tekil değer ayrışması.
  8. CSingValueDecompose - matrisin tekil değer ayrışması.
  9. CFbls - hızlı temel lineer çözümler.
  10. CMatDet - matris determinantının hesaplanması.
  11. CSpdGEVD - genelleştirilmiş simetrik matrislerde özdeğerleri ve özvektörleri bulma.
  12. CInverseUpdate - matrislerin tersini alma ve güncelleme.
  13. CSchur - Issai Schur ayrışması.
matrix.mqh Matris sınıfları: tam sayı, sürekli ve karmaşık.
optimization.mqh Tek boyutlu ve çok boyutlu optimizasyon sınıfları:
  1. CMinCG - eşlenik gradyan yöntemi kullanılarak optimizasyon.
  2. CMinBLEIC - denklemler ve eşitsizlikler şeklinde lineer kısıtlamalarla optimizasyon.
  3. CMinLBFGS - ikinci dereceden fonksiyon modelinin ardışık oluşturulması ve sınıflandırılması yoluyla optimizasyon.
  4. CMinQP - denklemler ve eşitsizlikler şeklinde lineer kısıtlamalar ile ikinci dereceden programlama.
  5. CMinLM - Levenberg-Marquardt algoritmasını kullanarak optimizasyon.
  6. CMinComp - geriye dönük uyumluluk fonksiyonları.
solvers.mqh Lineer ve lineer olmayan denklem sistemlerini çözme sınıfları:
  1. CDenseSolver - lineer denklem sistemlerini çözme.
  2. CNlEq - lineer olmayan denklem sistemlerini çözme.
specialfunctions.mqh Dağılım fonksiyonlarının, integrallerin ve polinomların sınıfları:
  1. CGammaFunc - gama fonksiyonu.
  2. CIncGammaF - tamamlanmamış gama fonksiyonu.
  3. CBetaF - beta fonksiyonu.
  4. CIncBetaF - tamamlanmamış beta fonksiyonu.
  5. CPsiF - psi fonksiyonu.
  6. CAiryF - Airy fonksiyonu.
  7. CBessel - integral düzeninin Bessel fonksiyonları.
  8. CJacobianElliptic - Jacobi eliptik fonksiyonları.
  9. CDawson - Dawson integrali.
  10. CTrigIntegrals - trigonometrik integraller.
  11. CElliptic - birinci ve ikinci türden eliptik integraller.
  12. CExpIntegrals - üstel integraller.
  13. CFresnel - Fresnel integralleri.
  14. CHermite - Hermite polinomları.
  15. CChebyshev - Chebyshev polinomları.
  16. CLaguerre - Laguerre polinomları.
  17. CLegendre - Legendre polinomları.
  18. CChiSquareDistr - ki-kare dağılımı.
  19. CBinomialDistr - binom dağılımı.
  20. CNormalDistr - normal dağılım.
  21. CPoissonDistr - Poisson dağılımı.
  22. CStudenttDistr - Student t dağılımı.
  23. CFDistr - F dağılımı.
statistics.mqh İstatistiksel veri analizi sınıfları:
  1. CBaseStat - temel istatistiksel yöntemler.
  2. CCorrTests - korelasyon oranı anlamlılık testi.
  3. CJarqueBera - JarqueBera kriteri.
  4. CMannWhitneyU - Mann-Whitney U kriteri.
  5. CSignTest - işaret testi.
  6. CStudentTests - Student t testi.
  7. CVarianceTests - F testi ve ki-kare testi.
  8. CWilcoxonSignedRank - Wilcoxon W kriteri.


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):

UseAlglib.mq4 komut dosyasının sonucu



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

OBJ_EDIT_Example OBJ_EDIT_Example

OBJ_EDIT grafik nesnesiyle çalışma örneği.

OBJ_Label_Example OBJ_Label_Example

OBJ_LABEL grafik nesnesiyle çalışma örneği.

Zigzag R Zigzag R

2005'te MT4 ile (ve MT3.83'te) gelen Zigzag göstergesinin optimize edilmiş versiyonudur.

SignalsDemo SignalsDemo

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.