Sevgili geliştiriciler, multithreading konusundaki aramayı karıştırırken, MQL5'te thread oluşturmak ve yönetmek için fonksiyonlar eklemeyeceğinizi söylediğiniz ifadeyi buldum. Bu bir buçuk yıl önce söylendi. O zamandan beri görüşleriniz değişti mi bilmek isterim?
Ve yine de bununla uğraşmak istemiyorsanız, o zaman kullanıcılara bunu kendileri uygulama fırsatı verebilir misiniz? Bunun için bir fonksiyon işaretçisine ihtiyacımız var. Bu özelliği eklemeye ne dersiniz? Onlar. GetPointer(işlevim)
Ayrıca, zor değilse, lütfen MQL5'te neden çoklu iş parçacığı uygulamadığınızı açıklayın, hangi özel zorlukları gördünüz? Yoksa bu sadece bir prensip meselesi mi?
2000 yılının artık ortalıkta olmadığını ve çok çekirdekli işlemcilerin uzun zamandır herkes için norm haline geldiğini, çekirdek sayısının her yıl artacağını hatırlatmak isterim. Şimdi 4, birkaç yıl içinde zaten 6-8, vb. Ve kullanıcıların çalıştırılabilir program tarafından normal olarak işlemciyi kullanmasına izin vermiyorsunuz.
Yalnızca bir iş parçacığındaki işi karşılaştırıyorsanız, MQL ve C++ arasındaki sabit hız karşılaştırmalarınızın anlamı nedir? Sonuçta, performansın birçok kez artırılabilmesi sayesinde, emrinde birkaç işlemci olduğunda, aklı başında hiçbir C++ programcısı tek bir iş parçacığında yoğun kaynak gerektiren bir görev üstlenmez. Dolayısıyla tüm bu testlerinizin gerçek hayatla pek alakası yok. Birkaç yıl içinde işlemci çekirdeği 10'a çıkacak, ancak yine de tek iş parçacıklı MQL testlerinizle gurur duyacak mısınız?
OpenCL kullanımına gelince, bu zaten şamanizmdir, özellikle burada uygulandığı şekliyle - bir metin dizisi aracılığıyla. Onlar. kodu başka bir yerde ayıklayın, ardından MQL5'e kopyalayıp yapıştırın... Ne sirk! Tüm bunları bir DLL'de hemen uygulamak ve içe aktarmak daha kolaydır. Ayrıca, birkaç kişi birkaç dilde bir program yazmak istiyor.
MQL5'te çoklu iş parçacığı hala mevcuttur, ancak C++'tan farklı olarak, grafik adı verilen sanal bir yürütme ortamı olarak uygulanır.
Her grafik ayrı bir iş parçacığında çalışır, bu, aynı kullanıcının iş parçacığı senkronizasyonu, veri erişimi ve iş parçacıkları ile iletişim kurarken ortaya çıkan diğer sorunlarla uğraşmaması için yapılır.
Krivenko mu? evet, ancak (dilin karmaşıklığından zaten şikayet eden) kitlesel kullanıcılar için bu kadar.
OpenCL tamamen ayrı bir konudur. Platformun geliştirme planlarında bile yoktu. En başından beri, ileri düzey forum kullanıcıları bu konuya geliştiricilerin ilgisini çekti, ancak resmi cevap "hayır ve olmayacak" oldu. Ama sonra MQ yönetimi öfkelerini merhamete çevirdi ( İlyaz sayesinde ).
Dll Hakkında : MQ onları potansiyel olarak tehlikeli görür, bu yüzden onlarsız mümkün olan her yerde, özellikle kamu hizmetleri için uygulamaya çalışır. Ama aynı zamanda, onları hiç yasaklamıyor, çünkü programcılar sadece halk için değil, aynı zamanda kaballar için de yazıyor.
Genel olarak, saf teorik ifadeler gibi görünüyor.
Terminalde çoklu iş parçacığı ve işlemcilerin tam kullanımı ile her şey yolunda. Terminalde kaç tane iş parçacığı çalıştığını ve bu iş parçacıklarının sayısının zaman içinde nasıl değiştiğini görün. Terminalin çok kanallı çalışma prensipleri defalarca anlatılmış ve gösterilmiştir. Örneğin, göstergelerin, sembollerin yeniden hesaplanması, grafik verilerinin yüklenmesi, tüm Uzman Danışmanların ve komut dosyalarının bağımsız çalışması için bağımsız akışların nasıl çalıştığı.
Bir şeyin hesaplamalarını paralelleştirmek için, önce matematiğin sadece küçük bir bölümünün paralelleştirilebileceğini anlamak gerekir.
Çok çekirdekli test cihazı, MQL5 Cloud Network ve OpenCL'ye bakın. Özellikle bulut bilişimde uzun süredir lokomotifin önünde koşuyoruz. Şu anda test cihazında MQL5 Cloud Network'ü açın ve size yardımcı olması için 14.000'e kadar CPU alın:
Görünüşe göre OpenCL'i de bilmiyorlar. Program kodunu OpenCL derleyicisine göndermek için kaynak biçiminde temsil etmek, olağan ve standart çalışma şeklidir. Lütfen farklı OpenCL işleyicilerinin (Ndivia, AMD, Intel, vb.) kodu alması ve kendileri için yeniden çalışması gerektiğini unutmayın.
- cloud.mql5.com
MetaTrader 5'te çoklu kullanım nedir:
Teste tıkladım, anında 5.743 aracı/CPU'yu çalıştırdım ve optimize edicide 6 dakikada 381.468 geçiş gerçekleştirdim. Her geçişin işlenmesi 1 ila 2 saniye sürdü. Testi 6 dakika yerine 8 çekirdekli bilgisayarımda çalıştırsaydım 800 ila 1600 dakika (381468 / 8 = 47683 saniye = 794 dakika) harcardım.
Ve "Başlat" düğmesine basmaktan başka bir şey yapmam gerekmiyordu. Belli bir skynet kalktı, çizelgelerin tüm gerekli geçmişini bağımsız olarak senkronize etti, görevi dünya çapındaki binlerce bilgisayar arasında dağıttı ve toplu olarak çalıştı.
Gerçekliğe hoşgeldin...
Renat,
bir MQL5 Expert Advisor içinde ileti dizileri oluşturma hakkında bir soru.
Renat,
bir MQL5 Expert Advisor içinde ileti dizileri oluşturma hakkında bir soru.
Biliyorum.
Uygulamalı bir hesaplama dilinde neden çoklu kullanım olmadığını anlamayan bir kişinin çoklu kullanım hakkında konuşmamasının daha iyi olduğu hakkında yazmadım. Terminalin tüm altyapı çoklu kullanımı tarafımızca tam ve verimli bir şekilde uygulanmaktadır.
Gerçekten paralel görevler yapabileceğiniz yerlerde gerçek çoklu kullanım gereklidir. Bu bir test cihazıdır. Ve bu yer, birçok kişinin yapılan işin kalitesini, kontrolünü ve hacmini anlamaktan uzak olacak şekilde uyguladık.
Bulut örneğim, görev detaylandırma kalitesinin ve düzeyinin basit bir kanıtıdır.
Evet Renat, yazımı dikkatsizce okudun. Bu, MT5 çoklu kullanımla ilgili değil, MQL5 çoklu kullanımla ilgili. Yürütülebilir programda bu konuları bağımsız olarak oluşturamayız. Ve yeni bir grafiğin bir göstergeyle programatik olarak açılması, gördüğünüz gibi, bir tef ile dans etmek bir çözüm değil.
Sonuçta, en şaşırtıcı olanı, kitle kullanıcısını hesaba katarsanız, MQL5'te çok fazla gereksiz şeyi yığmış olmanızdır. Sonuçta, anladığım kadarıyla, yetkin programcılara değil, esas olarak aptallara odaklanıyorsunuz. Bu nedenle birçok kısıtlama, doğrudan bellekle çalışamama vb. Ve böylece sorulur, örneğin aptallar için sınıflar için ne gereklidir?
Ürününüzü yalnızca aptallar için konumlandırmıyorsanız, neden deneyimli programcılara sistem kaynaklarını verimli kullanma fırsatı vermiyorsunuz?
Sonuçta, çoklu iş parçacığı eksikliği herhangi bir sınıf tarafından telafi edilemez. Program ne kadar zarif görünürse görünsün, ancak sistem kaynaklarını verimsiz kullanıyorsa, tüm bunlar değersizdir. Görünüşe göre, yenilik peşinde koşarken, MQL dilinin öncelikle ticaret ve analitik programlar yazmaya yönelik olduğunu ve programlama uğruna programlamaya yönelik olmadığını unutmuşsunuzdur. Bu nedenle, ilk etapta kod yazma hızı değil, programın hızı ve verimliliği olmalıdır. Sonuçta, a priori, büyük miktarda veriyle çalışması gerekiyor.
Kullanıcıların çoğunluğu için MQL4'ün yeteneklerinin oldukça yeterli olduğunu düşünüyorum. Tam mutluluk için, yalnızca yapılar için destek, değişkenler için işaretçiler ve işlevler için işaretçiler (iyi veya geri arama işlevleri için yerleşik destek) eksikti. Ve bu kadar. Bu cephaneye sahip olarak, çok verimli çalışan herhangi bir program oluşturabilir, gerekli sayıda iş parçacığı, geri arama vb. Kendiniz oluşturabilirsiniz.
et, rahatsız olmayın, ancak anaokulundaki sorunları bu kadar iyi anlayın.
Her şeyi dikkatlice okudum, ancak tam kapsamlı bir eğitim programı yürütme fırsatım yok. MQL/MQL2/MQL4/MQL5 dilleri üzerinde 11 yıllık çalışma deneyimim var.
Bu, MT5 çoklu kullanımla ilgili değil, MQL5 çoklu kullanımla ilgili. Yürütülebilir programda bu konuları bağımsız olarak oluşturamayız. Ve bir gösterge ile yeni bir haritanın yazılımla açılması, gördüğünüz gibi, bir tef ile dans etmek bir çözüm değil.
Sonuçta, en şaşırtıcı olanı, kitle kullanıcısını hesaba katarsanız, MQL5'te çok fazla gereksiz şeyi yığmış olmanızdır.
Tek bir kullanıcı alırsak, çok fazla gereksiz olabilir. Ve ufkunuzu genişletmeye başladığınızda ve ek fırsatlara ihtiyaç duyduğunuzda, tam tersine, bir şeylerin zaten orada olduğu, ancak bir şeylerin eksik olduğu ortaya çıkıyor.
MQL5 hala geliştirilme aşamasındadır. Yavaş yavaş yeni bir şey eklenir. Tabii ki dezavantajları da olsa da, örneğin kendi olaylarınızı yaratmanız imkansız olsa da, istisna işleyicileri ve çoklu iş parçacığı yoktur. Umarım tüm bunlar bir gün ortaya çıkar? Ancak tüm bunların yarın uygulanacağından şüpheliyim.
Gerçekten istiyorsanız, test etme ajanlarının OpenCL'de çoklu kullanımları da vardır. Çok uygun değil, ama yine de orada ve görevleri paralel hale getirebilirsiniz.
et, rahatsız olmayın, ancak anaokulundaki sorunları bu kadar iyi anlayın.
Kurumsal standartlardan mı bahsediyorsunuz?
Sorular sorulursa, cevaplar yüzeyde değildir ...
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Ve yine de bununla uğraşmak istemiyorsanız, o zaman kullanıcılara bunu kendileri uygulama fırsatı verebilir misiniz? Bunun için bir fonksiyon işaretçisine ihtiyacımız var. Bu özelliği eklemeye ne dersiniz? Onlar. GetPointer(işlevim)
Ayrıca, zor değilse, lütfen MQL5'te neden çoklu iş parçacığı uygulamadığınızı açıklayın, hangi özel zorlukları gördünüz? Yoksa bu sadece bir prensip meselesi mi?
2000 yılının artık ortalıkta olmadığını ve çok çekirdekli işlemcilerin uzun zamandır herkes için norm haline geldiğini, çekirdek sayısının her yıl artacağını hatırlatmak isterim. Şimdi 4, birkaç yıl içinde zaten 6-8, vb. Ve kullanıcıların çalıştırılabilir program tarafından normal olarak işlemciyi kullanmasına izin vermiyorsunuz.
Yalnızca bir iş parçacığındaki işi karşılaştırıyorsanız, MQL ve C++ arasındaki sabit hız karşılaştırmalarınızın anlamı nedir? Sonuçta, performansın birçok kez artırılabilmesi sayesinde, emrinde birkaç işlemci varken, aklı başında hiçbir C++ programcısı tek bir iş parçacığında yoğun kaynak gerektiren bir görev üstlenmez. Dolayısıyla tüm bu testlerinizin gerçek hayatla pek alakası yok. Birkaç yıl içinde işlemci çekirdeği 10'a çıkacak, ancak yine de tek iş parçacıklı MQL testlerinizle gurur duyacak mısınız?
OpenCL kullanımına gelince, bu zaten şamanizmdir, özellikle burada uygulandığı şekliyle - bir metin dizisi aracılığıyla. Onlar. kodu başka bir yerde ayıklayın, ardından MQL5'e kopyalayıp yapıştırın... Ne sirk! Tüm bunları bir DLL'de hemen uygulamak ve içe aktarmak daha kolaydır. Ayrıca, birkaç kişi birkaç dilde bir program yazmak istiyor.