Yeni MetaTrader 5 platformu yapısı 3490: Mobil Web Terminali sürümü ve MQL5'te yeni matris metotları
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
MetaTrader 5 platformu güncellemesi 4 Kasım 2022 Cuma günü yayınlanacaktır.
Güncelleme, mobil cihazlar için tam desteğe sahip yeni Web Terminalini içerir. Artık Web Terminalinin arayüzü, kullanıcının ekran boyutuna otomatik olarak uyum sağlamaktadır.
Ek olarak, tüketilen kaynakların daha doğru bir şekilde izlenmesi adına görev yöneticisini geliştirdik ve mevcut cihazların yönetilmesi için de OpenCL yöneticisi ekledik. Yeni OpenCL yöneticisi, daha hızlı hesaplamalar amacıyla kullanılacak cihazların açıkça belirtilmesine olanak sağlar.
MQL5’te matrisler ve vektörlerle çalışma konusunda platformun yeteneklerini genişletmeye de devam ediyoruz. Fiyat tikleriyle çalışma ve matrisler ve vektörler arasında veri alışverişi için yeni fonksiyonlar eklendi. Atama metotlarının yetenekleri de genişletildi.
Ek olarak, tüm platform bileşenlerine birçok düzeltme ve iyileştirme de uyguladık. Tüm yeni özellikler, düzeltmeler ve performans iyileştirmeleri aşağıda ayrıntılı olarak açıklanmaktadır.
Web platformunun mobil versiyonu
Yeni Web Terminali, mobil cihazlar için tam destek sağlar. Artık Web Terminalinin arayüzü, ekran boyutuna otomatik olarak uyum sağlayarak, iOS ve Android telefonlar ve tabletlerde platform üzerinde rahatça çalışılmasına olanak tanır:
Ayrıca, Web Terminaline birçok düzeltme ve iyileştirme de uygulandı.
Yeni MetaTrader 5 Web Terminali, yatırımcıların ihtiyaç duyduğu tüm özellikleri destekler. Aşağıdakilerin gerçekleştirilmesini mümkün kılar:
MetaTrader 5 müşteri terminali yapı 3490
FIFO kuralı, her enstrüman için pozisyonların sadece açıldıkları sırayla kapatılabileceğini ifade eder. Durma seviyeleriyle pozisyonların kapatılmasının her zaman FIFO kuralına uygun olmasını sağlamak için, müşteri terminali tarafında aşağıdaki mantık uygulanır:
Aynı enstrüman için birden fazla pozisyon varsa, pozisyonlardan herhangi biri için durma seviyelerinin yerleştirilmesi, diğer tüm pozisyonlar için de aynı seviyelerin yerleştirilmesine neden olur. Eğer bir durma seviyesi tetiklenirse, tüm pozisyonlar FIFO kuralına uygun sırayla kapatılacaktır.
Artık, açık pozisyonları olan bir enstrüman için Piyasa Derinliği açıldığında, ilgili pozisyonların varsa durma seviyeleri, Zararı Durdur ve Kârı Al alanlarında otomatik olarak belirtilecektir.
bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count); bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count); bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc); bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
Kopyalanacak verilerin türü, ENUM_COPY_RATES numaralandırması kullanılarak flags parametresinde belirtilir. Şu değerler kullanılabilir:COPY_TICKS_INFO = 1, // Alış ve/veya Satış fiyatı değişikliklerinden kaynaklanan tikler COPY_TICKS_TRADE = 2, // Son fiyatı ve hacim değişikliklerinden kaynaklanan tikler COPY_TICKS_ALL = 3, // tüm tikler COPY_TICKS_TIME_MS = 1<<8, // milisaniye cinsinden zaman COPY_TICKS_BID = 1<<9, // Satış fiyatı COPY_TICKS_ASK = 1<<10, // Alış fiyatı COPY_TICKS_LAST = 1<<11, // Son fiyatı COPY_TICKS_VOLUME = 1<<12, // hacim COPY_TICKS_FLAGS = 1<<13, // tik bayrakları
Birden fazla veri türü seçildiğinde (yalnızca matrisler için kullanılabilir), matristeki satırların sırası, numaralandırmadaki değerlerin sırasıyla eşleşecektir.Artık matrise tek boyutlu bir dizi veya vektör atanabilir:
bool matrix::Assign(const vector &vec);
Sonuç, tek satırlı bir matris olacaktır.Ayrıca, artık vektöre bir matris de atanabilir (matris yumuşatma gerçekleştirilecektir):
bool vector::Assign(const matrix &mat);
bool vector::Swap(vector &vec); bool vector::Swap(matrix &vec); bool vector::Swap(double &arr[]); bool matrix::Swap(vector &vec); bool matrix::Swap(matrix &vec); bool matrix::Swap(double &arr[]);
Her dizi, vektör veya matris, o nesnenin öğelerini içeren bir bellek arabelleğine başvurur. Swap metodu aslında öğeleri belleğe yazmadan işaretçileri bu arabelleklere değiştirir. Dolayısıyla, matris matris olarak kalır ve vektör de vektör olarak kalır. Matris ve vektörün değiştirilmesi, düz temsilde, vektör öğelerine sahip tek satırlı bir matris ve matris öğelerine sahip bir vektör ile sonuçlanacaktır (daha fazla ayrıntı için Flat metodu bölümüne bakabilirsiniz).//+------------------------------------------------------------------+ //| Komut dosyasını başlatma fonksiyonu | //+------------------------------------------------------------------+ void OnStart() { //--- matrix a= {{1, 2, 3}, {4, 5, 6}}; Print("Değiştirme öncesi a: \n", a); matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}}; Print("Değiştirme öncesi b: \n", b); //--- işaretçileri değiştir a.Swap(b); Print("Değiştirme sonrası a: \n", a); Print("Değiştirme sonrası b: \n", b); /* Değiştirme öncesi a: [[1,2,3] [4,5,6]] Değiştirme öncesi b: [[5,10,15,20] [25,30,35,40] [45,50,55,60]] Değiştirme sonrası a: [[5,10,15,20] [25,30,35,40] [45,50,55,60]] Değiştirme sonrası b: [[1,2,3] [4,5,6]] */ vector v=vector::Full(10, 7); Print("Değiştirme öncesi v: \n", v); Print("Değiştirme öncesi b: \n", b); v.Swap(b); Print("Değiştirme sonrası v: \n", v); Print("Değiştirme sonrası b: \n", b); /* Değiştirme öncesi v: [7,7,7,7,7,7,7,7,7,7] Değiştirme öncesi b: [[1,2,3] [4,5,6]] Değiştirme sonrası v: [1,2,3,4,5,6] Değiştirme sonrası b: [[7,7,7,7,7,7,7,7,7,7]] */ }
Swap metodu ayrıca dinamik dizilerle çalışılmasına da olanak sağlar (statik dizilerin geçişi parametre olarak yapılamaz). Dizi herhangi bir büyüklükte olabilir, ancak bu büyüklük kararlaştırılmış olmalıdır. Yani, matrisin veya vektörün toplam büyüklüğü dizinin sıfır boyutunun bir katı olması gerekir. Dizinin sıfır boyutu, ilk indekste bulunan öğe sayısıdır. Örneğin, dinamik bir üç boyutlu dizi 'double array[][2][3]' için sıfır boyutu, ikinci ve üçüncü boyutların büyüklüklerinin çarpımıdır: 2x3=6. Bu, böyle bir dizinin Swap metodunda yalnızca toplam büyüklüğü 6'nın katı olan matrisler ve vektörlerle kullanılabileceği anlamına gelir: 6, 12, 18, 24, vb.Bunu aşağıdaki örnekte görebilirsiniz:
//+------------------------------------------------------------------+ //| Komut dosyasını başlatma fonksiyonu | //+------------------------------------------------------------------+ void OnStart() { //--- 1x10 matrisini 7.0 değeriyle doldur matrix m= matrix::Full(1, 10, 7.0); Print("Değiştirme öncesi matris:\n", m); //--- matris ve diziyi değiştirmeyi dene double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}; Print("Değiştirme öncesi array_small:"); ArrayPrint(array_small); if(m.Swap(array_small)) { Print("Değiştirme sonrası array_small:"); ArrayPrint(array_small); Print("Değiştirme sonrası matris: \n", m); } else // matrisin büyüklüğü, dizinin sıfır boyutunun bir katı değildir { Print("m.Swap(array_small) başarısız oldu. Hata: ", GetLastError()); } /* Değiştirme öncesi matris: [[7,7,7,7,7,7,7,7,7,7]] Değiştirme öncesi array_small: [,0] [,1] [,2] [,3] [,4] [0,] 1.00000 2.00000 3.00000 4.00000 5.00000 [1,] 6.00000 7.00000 8.00000 9.00000 10.00000 m.Swap(array_small) başarısız oldu. Hata: 4006 */ //--- daha büyük bir matris kullan ve değiştirme işlemini yeniden dene double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}, {3, 6, 9, 12, 15, 18, 21, 24, 27, 30} }; Print("Değiştirme öncesi array_static:"); ArrayPrint(array_static); if(m.Swap(array_static)) { Print("Değiştirme sonrası array_static:"); ArrayPrint(array_static); Print("Değiştirme sonrası matris: \n", m); } else // statik bir dizi, matrisle değiştirme için kullanılamaz { Print("m.Swap(array_static) başarısız oldu. Hata: ", GetLastError()); } /* Değiştirme öncesi array_static: [,0] [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [0,] 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.00000 [1,] 2.00000 4.00000 6.00000 8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000 [2,] 3.00000 6.00000 9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000 m.Swap(array_static) başarısız oldu. Hata: 4006 */ //--- diziyi ve matrisi değiştirmek için başka bir girişim double array_dynamic[][10]; // dinamik dizi ArrayResize(array_dynamic, 3); // birinci boyutun büyüklüğünü ayarla ArrayCopy(array_dynamic, array_static); //--- şimdi değiştirme için dinamik bir dizi kullan if(m.Swap(array_dynamic)) { Print("Değiştirme sonrası array_dynamic:"); ArrayPrint(array_dynamic); Print("Değiştirme sonrası matris: \n", m); } else // hata yok { Print("m.Swap(array_dynamic) başarısız oldu. Hata: ", GetLastError()); } /* Değiştirme sonrası array_dynamic: [,0] [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 Değiştirme sonrası matris: [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]] */ }
vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const; matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
CREATE TABLE sanatçı( sanatçıkimliği INTEGER PRIMARY KEY, sanatçıadı TEXT ); CREATE TABLE parça( parçakimliği INTEGER, parçaadı TEXT, parçasanatçı INTEGER, FOREIGN KEY(parçasanatçı) REFERENCES sanatçı(sanatçıkimliği) );
Güncelleme, Live Update sistemi aracılığıyla sunulacaktır.