MetaTrader 5 Platformu yapı 3390: OpenCL ve matematik fonksiyonlarında float, makine öğrenimi için aktivasyon ve kayıp metotları

 

MetaTrader 5 platformu güncellemesi 4 Ağustos 2022 Perşembe günü yayınlanacaktır. Yeni sürüm aşağıdaki değişiklikleri içerir:

  1. Terminal: Bir işlem hesabına ilk bağlantı sırasında öğreticinin otomatik olarak açılması eklendi. Bu, yeni başlayanların ticaretin temellerini öğrenmelerine ve platformun yeteneklerini keşfetmelerine yardımcı olacaktır. Öğretici, her biri belirli bir konu hakkında kısa bilgiler sağlayan birkaç bölüme ayrılmıştır. Öğreticide ilerleme mavi çizgi ile gösterilir.

    Added automatic opening of a tutorial during the first connection to a trading account


  2. Terminal: 'Kârdaki pozisyonları kapat'/'Zarardaki pozisyonları kapat' toplu işlemlerinin çalışması düzeltildi. Öncesinde platform, varsa zıt pozisyonları kullanıyordu. Örneğin, EURUSD’de iki adet zararda olan alış pozisyonuna ve bir adet kârda olan satış pozisyonuna sahip olduğumuzu varsayalım, önceki durumda 'Zarardaki pozisyonları kapat' toplu işlemi sırasında bu üç pozisyonun tamamı kapatılıyordu. Alış ve satış bir 'Close by’ işlemiyle, kalan alış ise normal bir işlemle kapatılıyordu. Ancak artık komutlar düzgün şekilde çalışmaktadır: yalnızca kârda veya zararda olan pozisyonlar kapatılacaktır.

  3. Terminal: Negatif fiyatların bulunduğu fiyat geçmişinin görüntülenmesi düzeltildi. Artık negatif fiyatlar tüm zaman dilimlerinde doğru bir şekilde görüntülenecektir.
  4. Terminal: Terminalin sistem kaynağı tüketimi optimize edilerek önemli ölçüde azaltıldı.
  5. Terminal: Ticaret enstrümanlarının temel verilerinin veri tabanı güncellendi. Borsa enstrümanları için mevcut veri toplayıcılarının sayısı 15'e çıkarıldı. Kullanıcılar, en popüler ekonomik veri toplayıcıları aracılığıyla daha da fazla bilgiye erişebilecekler.


    Updated fundamental database for trading instruments

    Küresel borsa piyasasında yaklaşık 7.000 menkul kıymet ve 2.000'den fazla ETF bulunmaktadır. Ayrıca, vadeli işlemler ve diğer türevler de mevcuttur. MetaTrader 5 platformu, borsa enstrümanlarının temel verilerine erişim sağlayan büyük miktarda veri tabanına sahiptir. İlgili temel verilere erişmek için kullanıcılar, doğrudan Piyasa Gözleminden tek bir tıklamayla toplayıcının web sitesine geçebilirler. Kolaylık sağlamak adına platform, her finansal enstrüman için çeşitli bilgi kaynakları sunar.


  6. Terminal: Yeni emir verme penceresinde Zararı Durdur ve Kârı Al seviyelerinin ayarlanması düzeltildi. Artık FIFO hesapları için durma seviyeleri, aynı enstrümanın mevcut açık pozisyonlarının durma seviyelerine göre otomatik olarak ayarlanacaktır. Bu prosedür FIFO kuralına uyulması için gereklidir.

  7. MQL5: Matematik fonksiyonları artık matrisler ve vektörlerle çalışabilir.

    Algoritmik ticaret ve makine öğrenimi için MetaTrader 5 platformunun yeteneklerini genişletmeye devam ediyoruz. Daha önce, veri işleme için dizileri kullanma gerekliliğini ortadan kaldıran yeni veri türleri ekledik: matrisler ve vektörler. Bu veri türleriyle gerçekleştirilen işlemler için MQL5'e 70'den fazla metot eklendi. Yeni metotlar, tek bir işlemde lineer cebir ve istatistik hesaplamalarının yapılmasına olanak sağlamaktadır. Böylece, çarpma, dönüştürme ve denklem sistemleri, aşırı boyuttaki kod satırları olmadan kolayca uygulanabilmektedir. En son güncelleme matematik fonksiyonlarını içermektedir.

    Matematik fonksiyonları başlangıçta skaler değerler üzerinde matematik işlemleri gerçekleştirmek için tasarlanmıştır. Artık bu fonksiyonların çoğu matrisler ve vektörlerle kullanılabilir. İlgili fonksiyonlar şunlardır: MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, ve MathTanh. Burada, matrisler veya vektörler öğe bazında işlenir. Örnek:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    MathMod ve MathPowiçin ikinci öğe uygun boyutta bir skaler veya matris/vektör olabilir.

    Aşağıdaki örnek, bir vektöre matematik fonksiyonlar uygulayarak standart sapmanın nasıl hesaplanacağını göstermektedir.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Use the initializing function to populate the vector
      vector r(10, ArrayRandom); // Array of random numbers from 0 to 1
    //--- Calculate the average value
      double avr=r.Mean();       // Array mean value
      vector d=r-avr;            // Calculate an array of deviations from the mean
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // Array of squared deviations
      double sum=s2.Sum();       // Sum of squared deviations
    //--- Calculate standard deviation in two ways
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  8. MQL5: Şablon fonksiyonlarında artık matrix, matrixf, vector ve vectorf yerine, karşılık gelen matrix<double>, matrix<float>, vector<double> ve vector<float> yazımları kullanılabilir.

  9. MQL5: float türüyle gerçekleştirilen işlemlerde matematiksel fonksiyonlar geliştirildi. 'float' türündeki matris ve vektörlere matematiksel fonksiyonların uygulamasına olanak sağlayan yeni eklenen yetenek, 'float' türündeki skalerlere uygulanan matematik fonksiyonlarında da gelişme sağladı. Önceden, bu fonksiyonların parametreleri koşulsuz olarak 'double' türüne dönüştürülüyordu, ardından matematiksel fonksiyonun karşılık gelen uygulanmış hali çağrılıyordu, sonrasında da sonuç 'float' türüne geri döndürülüyordu. Artık işlemler ekstra tür dönüştürme yapılmadan uygulanabilmektedir.

    Aşağıdaki örnek, matematiksel sinüs hesaplamalarındaki farkı göstermektedir:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  Array of random numbers from 0 to 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  10. MQL5: Matrisler ve vektörler için aktivasyon metotları ve türev metotlar eklendi:

    AF_ELU               Üstel Lineer Birim (Exponential Linear Unit)
    AF_EXP               Üstel (Exponential)
    AF_GELU              Gauss Hata Lineer Birimi (Gaussian Error Linear Unit)
    AF_HARD_SIGMOID      Sert Sigmoid (Hard Sigmoid)
    AF_LINEAR            Lineer (Linear)
    AF_LRELU             Sızıntılı Düzeltilmiş Lineer Birim (Leaky REctified Linear Unit)
    AF_RELU              Düzeltilmiş Lineer Birim (REctified Linear Unit)
    AF_SELU              Ölçekli Üstel Lineer Birim (Scaled Exponential Linear Unit)
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hiperbolik Tanjant (Hyperbolic Tangent)
    AF_TRELU             Eşikli Düzeltilmiş Lineer Birim (Thresholded REctified Linear Unit)
    Sinir ağı aktivasyon fonksiyonu, girdilerin ağırlıklı toplamının ağ düzeyinde çıktıya nasıl dönüştürüleceğini belirler. Aktivasyon fonksiyonunun seçimi, sinir ağının performansı üzerinde büyük bir etkiye sahiptir. Modelin farklı kısımları farklı aktivasyon fonksiyonlarını kullanabilir. MQL5, yalnızca ilgili tüm aktivasyon fonksiyonlarını değil, aynı zamanda bu aktivasyon fonksiyonlarının türevlerini de sunar. Türev fonksiyonlar, sinir ağı eğitimi sırasında alınan hatalara dayalı olarak düzeltmelerin hızlı bir şekilde hesaplanmasına olanak sağlar.

  11. MQL5: Matrisler ve vektörler için kayıp fonksiyonu eklendi. Şu parametrelere sahiptir:

    LOSS_MSE            Ortalama Karesel Hata (Mean Squared Error)
    LOSS_MAE            Ortalama Mutlak Hata (Mean Absolute Error)
    LOSS_CCE            Kategorik Çapraz Entropi (Categorical Crossentropy)
    LOSS_BCE            İkili Çapraz Entropi (Binary Crossentropy)
    LOSS_MAPE           Ortalama Mutlak Yüzde Hata (Mean Absolute Percentage Error)
    LOSS_MSLE           Ortalama Karesel Logaritmik Hata (Mean Squared Logarithmic Error)
    LOSS_KLD            Kullback-Leibler Diverjansı (Kullback-Leibler Divergence)
    LOSS_COSINE         Kosinüs benzerliği/yakınlığı
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge
    LOSS_SQ_HINGE       Karesel Hinge (Squared Hinge)
    LOSS_CAT_HINGE      Kategorik Hinge (Categorical Hinge)
    LOSS_LOG_COSH       Hiperbolik Kosinüsün Logaritması (Logarithm of the Hyperbolic Cosine)
    LOSS_HUBER          Huber

    Kayıp fonksiyonu, modelin gerçek değerleri ne kadar iyi tahmin ettiğini değerlendirir. Model inşası sırasında her aşamada bu fonksiyon değerinin en aza indirilmesi hedeflenir. Veri türüne bağlı olarak, farklı yaklaşımlar kullanılması gerekir. Ayrıca, kayıp fonksiyonu ağırlık ve sapmaya da bağlı olabilir. Kayıp fonksiyonu tek boyutludur ve sinir ağının bir bütün olarak ne kadar iyi performans gösterdiğini değerlendirdiği için bir vektör değildir.

  12. Matrisler ve vektörler için matrix::CompareByDigits ve vector::CompareByDigits metotları eklendi. Belirtilen hassasiyetle iki matrisin/vektörün öğelerini karşılaştırırlar.

  13. Dizgeler için MathMin ve MathMax fonksiyonlarına destek eklendi. Fonksiyonlar leksikografik karşılaştırma kullanacaktır: harfler alfabetik olarak ve büyük/küçük harfe duyarlı şekilde karşılaştırılır.

  14. MQL5: Maksimum OpenCL nesnesi sayısı 256'dan 65536'ya yükseltildi. MQL5 programında OpenCL nesnesi tanıtıcı değerleri, CLContextCreate, CLBufferCreate ve CLProgramCreate fonksiyonları kullanılarak oluşturulur. Önceki 256 tanıtıcı değer sınırı, makine öğrenimi metotlarının etkili kullanımı için yeterli değildi.

  15. MQL5: OpenCL'i 'double' desteği olmayan grafik kartlarında kullanma yeteneği eklendi. Öncesinde, MQL5 programlarında yalnızca double destekleyen GPU'lara izin veriliyordu. Ancak birçok görev ise float kullanılarak yapılan hesaplamaları mümkün kılmaktadır. float türü, daha az yer kapladığından, paralel hesaplama için yerel olarak kabul edilir. Dolayısıyla, eski gereklilik artık kaldırılmıştır.

    Belirli görevler için double desteği olan GPU'ların zorunlu kullanımını ayarlamak için CLContextCreate çağrısında CL_USE_GPU_DOUBLE_ONLY kullanabilirsiniz.
       int cl_ctx;
    //--- Initializing the OpenCL context
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  16. MQL5: CustomBookAdd fonksiyonunun çalışması düzeltildi. Önceden, MqlBookInfo::volume_real alanında sıfır değeri belirtilmişse, fonksiyon Piyasa Derinliğinin anlık görüntüsünü oluşturamıyordu. Şimdi ise kontrol şu şekilde gerçekleştirilmektedir:
    İletilen veriler doğrulanır: her öğe için tür, fiyat ve hacim verileri belirtilmiş olmalıdır. Ayrıca, MqlBookInfo.volume ve MqlBookInfo.volume_real sıfır veya negatif olmamalıdır. Her iki hacim de negatifse, bu, hata olarak kabul edilecektir. Hacimlerden herhangi birini veya her ikisini belirtebilirsiniz - sistem belirtileni veya pozitif olanı kullanacaktır:

       volume=-1 && volume_real=2 — volume_real=2 kullanılacaktır,

       volume=3 && volume_real=0 — volume=3 kullanılacaktır.

    Artmış hassasiyetli hacim olan MqlBookInfo.volume_real, MqlBookInfo.volume'den daha yüksek önceliğe sahiptir. Bu nedenle, her iki değer de belirtilmiş ve geçerliyse, volume_real kullanılacaktır.

    Piyasa Derinliği öğelerinden herhangi biri yanlış tanımlanırsa, sistem aktarılan durumu tamamen göz ardı edecektir.

  17. MQL5: CalendarValueLast fonksiyonunun çalışması düzeltildi. Bir hata nedeniyle, para birimi filtresini kullanırken Ekonomik Takvimdeki değişikliklerden sonra art arda yapılan fonksiyon çağrıları (çağrıdan sonra 'change' parametresi yeni bir değere ayarlanıyor) bazı olayları atlayabiliyordu.
    CalendarValueLast(change, result, "", "EUR")
  18. MQL5: ArrayBSearch fonksiyonunun davranışı düzeltildi. Birden fazla özdeş öğe bulunuyorsa, önceden olduğu şekilde rastgele bir öğe yerine ilk öğeye olan bağlantı geri döndürülecektir.
  19. MQL5: Sınıf içerisinde şablon fonksiyonu görünürlüğü kontrolleri düzeltildi. Bir hata nedeniyle, private/protected olarak bildirilen sınıf şablonu fonksiyonları publicolarak görünmekteydi.
  20. MetaEditor: MetaAssist'in hataları ve belirsiz davranışı düzeltildi.
  21. MetaEditor: Terminalin kurulu olduğu klasörün yolu anlamına gelen %terminal% makroları için destek eklendi. Örneğin, %terminal%\MQL5\Experts. 



    Added support for the %terminal% macros which indicates the path to the terminal installation directory

  22. MetaEditor: Hata ayıklayıcıda dizilerin görüntülenmesi iyileştirildi.
  23. MetaEditor: Hata ayıklayıcıdan değerleri kopyalamak için olan arabellek artırıldı.
  24. MetaEditor: Hata ipuçları iyileştirildi.
  25. MetaEditor: *.mproj proje dosyasına göreli yolların belirtilmesi eklendi. Önceden, mutlak yollar kullanılıyordu, bu da projenin taşınması durumunda derleme hatalarına neden oluyordu.
  26. MetaEditor: BMP kaynaklarının projelere otomatik olarak evrensel 32-bit bitmap dizileri şeklinde yerleştirilmesi eklendi. Bu, grafik kaynağını okumak için koddaki ResourceReadImage'ı çağırma ihtiyacını ortadan kaldırır.
    'levels.bmp' as 'uint levels[18990]'
    
  27. MetaEditor: BMP dosya formatlarının okunması iyileştirildi.
  28. MetaEditor: Kullanıcı arayüzü çevirileri güncellendi.
  29. Çökme kayıtlarında bildirilen hatalar düzeltildi.


Güncelleme, Live Update sistemi aracılığıyla sunulacaktır.