Yeni MetaTrader 5 yapısı 3620: Web Terminali iyileştirmeleri ve MQL5'te hızlı matris çarpımı ve ONNX desteği

Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Güncellenen MetaTrader 5 platformunun yeni sürümü 10 Mart 2023 Cuma günü yayınlanacaktır.
Bu güncellemeyle Web Terminalinde bazı iyileştirmeler yapıldı. Web Terminali arayüzü için farklı renk şablonları eklendi ve sembol özellikleri penceresi geliştirildi.
Ayrıca, MQL5 artık genel matris çarpımı (General Matrix Multiplication, GeMM) algoritmasını da desteklemektedir. Bu algoritma, hesaplamaların çoğu işlemcide önemli ölçüde hızlandırılmasına olanak sağlar. Yeni algoritma şu anda matrix::GeMM metodunda desteklenmektedir.
Ek olarak, MQL5'e ONNX modelleriyle çalışmak için de destek eklendi. Bu, Uzman Danışmanlarda sinir ağlarının kullanımını büyük ölçüde kolaylaştıracaktır.
Yeni sürüm aşağıdaki değişiklikleri içermektedir:
MetaTrader 5 Müşteri Terminali yapı 3620
ONNX, makine öğrenimi modelleri için açık kaynaklı bir formattır. Bu format, Chainer, Caffee2 ve PyTorch gibi birçok platform tarafından desteklenmektedir. Özel araçları kullanarak bir ONNX modeli oluşturun, MQL5 uygulamanıza entegre edin ve ticaret kararları vermek için kullanın.
Desteklenen tüm fonksiyonların açıklamaları dokümantasyonda mevcuttur. Bir ONNX modeli örneği, MetaEditor'daki herkese açık projelerde bulunmaktadır. Araç Kutusu \ Herkese Açık Projeler içerisinden ONNX.Price.Prediction projesini bulun ve içerik menüsünden Katılı seçin. Proje bilgisayarınıza indirilecek ve Kılavuzda görünecektir:
Sonucu görmek için projeyi derleyin ve EURUSD H1 üzerinde çalıştırın.
Model ve onu çalıştıran MQL5 koduna ek olarak, proje PricePredictionTraining.py Python komut dosyasını da içermektedir. Bu komut dosyası, kendi başınıza bir ONNX modelini nasıl oluşturacağınızı göstermektedir. Komut dosyasını çalıştırmak için bilgisayarınıza Python’ı ve komut satırından gerekli modülleri yükleyin:
python -m pip install --upgrade tensorflow
python -m pip install --upgrade pandas
python -m pip install --upgrade scikit-learn
python -m pip install --upgrade matplotlib
python -m pip install --upgrade tqdm
python -m pip install --upgrade metatrader5
python -m pip install --upgrade onnx==1.12
python -m pip install --upgrade tf2onnx
Yeni algoritma şu anda matrix::GeMM metodunda desteklenmektedir. İşlemciniz AVX ve FMA teknolojilerini destekliyorsa (2013'ten sonra piyasaya sürülen çoğu işlemci bu teknolojileri desteklemektedir), algoritma otomatik olarak etkinleştirilecektir.
Matrisler ve vektörler DLL'e arabellek işaretçisi olarak aktarılır. Örneğin, float türünde bir matrisin aktarılması için, DLL'den dışa aktarılan fonksiyonun ilgili parametresinin float türünde arabellek işaretçisi alması gerekir. Örneğin:
MQL5
#import "mmlib.dll" bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta); #import
C++extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
Matrislerin ve vektörlerin düzgün bir şekilde işlenmesi adına, arabelleklere ek olarak büyüklüklerinin de aktarılması gerekir.MQL5: Senkronize zaman serilerini MqlRates'ten farklı dizilere kopyalamak için yeni CopySeries fonksiyonu eklendi.
CopySeries fonksiyonu, tek bir çağrıyla yalnızca gerekli zaman serilerinin farklı dizilere alınmasına olanak sağlar ve bu sırada zaman serilerinin tamamı senkronize edilir. Bu, belirli bir N indeksi için elde edilen dizilerdeki tüm değerlerin belirtilen sembol / zaman dilimindeki aynı çubuğa ait olacağı anlamına gelir. Bu nedenle, programcının alınan zaman serilerini ayrıca çubuk açılış zamanına göre senkronize etmesine gerek yoktur.
Zaman serilerinin tamamını bir MqlRates dizisi olarak geri döndüren CopyRates'in aksine, CopySeries fonksiyonu yalnızca gerekli zaman serilerinin farklı diziler halinde alınmasını mümkün kılar. Bu, istenen zaman serilerini belirtmek üzere bayrak kombinasyonu ayarlanarak yapılır. Fonksiyona iletilen dizilerin sırası, MqlRates yapısındaki alanların sırasıyla eşleşmelidir:
struct MqlRates { datetime time; // açılış zamanı double open; // açılış fiyatı double high; // yüksek fiyatı double low; // düşük fiyatı double close; // kapanış fiyatı long tick_volume; // tik hacmi int spread; // spread long real_volume; // gerçek hacim }
Örneğin, mevcut sembol / zaman diliminde son 100 çubuk için time, close ve real_volume zaman serilerinin değerleri alınması gerekiyorsa, çağrı aşağıdaki gibi olmalıdır:
datetime time[]; double close[]; long volume[]; CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
Burada, time, close ve volume dizilerinin sırası önemlidir: MqlRates yapısındaki alanların sırasına karşılık gelmelidir. Ancak rates_mask içerisindeki değerlerin sırası önemli değildir. Maske şu şekilde olabilir:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE
Örnek
//--- girdi parametreleri input datetime InpDateFrom=D'2022.01.01 00:00:00'; input datetime InpDateTo =D'2023.01.01 00:00:00'; input uint InpCount =20; //+------------------------------------------------------------------+ //| Komut dosyası başlatma fonksiyonu | //+------------------------------------------------------------------+ void OnStart(void) { //--- MqlRates yapısından zaman serileri almak için diziler double open[]; double close[]; float closef[]; datetime time1[], time2[]; //--- double türünde diziye kapanış fiyatlarını talep et ResetLastError(); int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount, COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close); PrintFormat("1. CopySeries %d değer geri döndürdü. Hata kodu=%d", res1, GetLastError()); ArrayPrint(close); //--- açılış fiyatlarını da talep et ve kapanış fiyatları için float türünü kullan ResetLastError(); int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount, COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef); PrintFormat("2. CopySeries %d değer geri döndürdü. Hata kodu=%d", res2, GetLastError()); ArrayPrint(closef); //--- alınan verileri karşılaştır if((res1==res2) && (time1[0]==time2[0])) { Print(" | Time | Open | Close double | Close float |"); for(int i=0; i<10; i++) { PrintFormat("%d | %s | %.5f | %.5f | %.5f |", i, TimeToString(time1[i]), open[i], close[i], closef[i]); } } /* Sonuç 1. CopySeries 20 değer geri döndürdü. Hata kodu:0 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247 2. CopySeries 20 değer geri döndürdü. Hata kodu:0 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247 | Time | Open | Close double | Close float | 0 | 2023.03.01 17:00 | 1.06660 | 1.06722 | 1.06722 | 1 | 2023.03.01 18:00 | 1.06722 | 1.06733 | 1.06733 | 2 | 2023.03.01 19:00 | 1.06734 | 1.06653 | 1.06653 | 3 | 2023.03.01 20:00 | 1.06654 | 1.06520 | 1.06520 | 4 | 2023.03.01 21:00 | 1.06520 | 1.06573 | 1.06573 | 5 | 2023.03.01 22:00 | 1.06572 | 1.06649 | 1.06649 | 6 | 2023.03.01 23:00 | 1.06649 | 1.06694 | 1.06694 | 7 | 2023.03.02 00:00 | 1.06683 | 1.06675 | 1.06675 | 8 | 2023.03.02 01:00 | 1.06675 | 1.06684 | 1.06684 | 9 | 2023.03.02 02:00 | 1.06687 | 1.06604 | 1.06604 | */ }
MetaTrader 5 Web Terminali yapı 3620
Güncelleme, Live Update sistemi aracılığıyla sunulacaktır.