MQL'de asenkron ve çok iş parçacıklı programlama

 
Asenkron veya çok iş parçacıklı modda mql kodu yazmaya ihtiyaç vardır.
Python'dan eşzamansız ve çok iş parçacıklı kodlama, modulo asyncio'ya aşinayım.

Bildiğiniz gibi, mql'deki tüm uzmanlar ve betikler, her biri bir iş parçacığında yürütülür.
Bununla bağlantılı olarak, bu konuda bazı yanlış anlamalar var.
Mql diline taşınan WinAPI kitaplığında, WinAPI üzerinden akışlarla çalışmak için işlevler vardır.
Bu çoklu kullanım işlevlerini mql kodunda kullanırsanız, mql'ye aktarılan işlevler de çok iş parçacıklı olarak mı yürütülür?
Ve EA/komut dosyasının varsayılan olarak tek iş parçacıklı olarak yürütülmesi, WinAPI çoklu iş parçacığı kullanımına müdahale etmez mi?

WinAPI multithreading'i mql programlarında kullanmak mümkünse, lütfen bana bu WinAPI thread'leri ile mql'de nasıl çalışılacağına dair bir kılavuz veya makaleler söyleyin.
Temel ilke asyncio'dan bana açık, ancak mql için yeterli görsel örnek yok.
Microsoft yardımının farkındayım, ancak henüz WinAPI akışını mql'de kullanma mantığı ve yardımda tam olarak ne aranması gerektiği konusunda net bir fikir olmadığı için henüz çalışmadım.
Doğru yönde, mql için örnekler veya makaleler varsa, genellikle muhteşem olacaktır.
 

Peki, o zaman ne tahmin edeceğini dene. İşlevlere yönelik işaretçiler tam teşekküllüyse, belki bir şeyler ortaya çıkacaktır. Bir soru daha düşündünüz mü - yeni bir iş parçacığı için standart µl kitaplığı nasıl başlatılır?

Örnekler google için kolaydır - "winapi multithreading". Genel olarak, anlamanız gerekir (belki de bensiz bilirsiniz) - çok iş parçacıklı programlama farklı bir seviyedir, bacaksız kalabilirsiniz. Python'un (python 0'da olmama rağmen) bu dersin tüm yönlerini ortaya çıkarabileceğinden şüpheliyim. İyi bir çok iş parçacıklı tanrı olmayan kodun rastgele ortaya çıkması pek olası değildir.

 
Vict :

Bir soru daha düşündünüz mü - yeni bir iş parçacığı için standart µl kitaplığı nasıl başlatılır?

Evet, WinAPI standart kitaplığının standart dll'ler aracılığıyla etkileşime giren Windows API'sinden taşındığını düşündüm.
Buna göre, standart dll'leri başlatmanız gerekir ve bunun için WinAPI'nin portlu işlevleri de vardır.
Ancak bununla aynı şekilde, bir dll'nin nasıl başlatılacağı ve sıfırlanacağı gibi, anladığım kadarıyla, dll başlatma ile ilgili C++ örnekleri mql'de de çalışmalıdır.
Başlatma işlevleri Windows API'sinden aynı olduğundan, asıl şey doğru eski olmayan örnekleri bulmaktır ve sorun budur. Google araması her zaman istenen sonucu döndürmez.
Forumda pek çok profesyonel programcı var ve onlar bunun nasıl doğru bir şekilde yapılacağını bir parça kod gösterebilirler. Başlatma, bellek ayırma, başlatmadan kaldırma vb.
Ve sonra akışlarla çalışın. "Makaleler" bölümünde bu konuda hala bir makale olmaması çok garip.

kurban :

Genel olarak, anlamanız gerekir (belki de bensiz bilirsiniz) - çok iş parçacıklı programlama farklı bir seviyedir, bacaksız kalabilirsiniz.
Python'un (python 0'da olmama rağmen) bu dersin tüm yönlerini ortaya çıkarabileceğinden şüpheliyim. İyi bir çok iş parçacıklı tanrı olmayan kodun rastgele ortaya çıkması pek olası değildir.

"Gevşek bacaklar" ile ne demek istiyorsun?
Akışlarla çalışmak doğruysa veya uyumsuzluk varsa, herhangi bir engel olmamalıdır.
Görev, Windows API akışlarını mql veya eşzamansız olarak nasıl doğru şekilde kullanacağınızı öğrenmektir.
Python'da, esas olarak eşzamansızlıkla çalıştım, her şey yolunda gidiyor, Python'da GIL nedeniyle iş parçacıklarıyla ilgili sorunlar var. Bu nedenle, Python'da akışları kullanmamak daha iyidir.

 
Roman :
Asenkron veya çok iş parçacıklı modda mql kodu yazmaya ihtiyaç vardır.
Python'dan eşzamansız ve çok iş parçacıklı kodlama, modulo asyncio'ya aşinayım.

Bildiğiniz gibi, mql'deki tüm uzmanlar ve betikler, her biri bir iş parçacığında yürütülür.
Bununla bağlantılı olarak, bu konuda bazı yanlış anlamalar var.
Mql diline taşınan WinAPI kitaplığında, WinAPI üzerinden akışlarla çalışmak için işlevler vardır.
Bu çoklu kullanım işlevlerini mql kodunda kullanırsanız, mql'ye aktarılan işlevler de çok iş parçacıklı olarak mı yürütülür?
Ve EA/komut dosyasının varsayılan olarak tek iş parçacıklı olarak yürütülmesi, WinAPI çoklu iş parçacığı kullanımına müdahale etmez mi?

WinAPI multithreading'i mql programlarında kullanmak mümkünse, lütfen bana bu WinAPI thread'leri ile mql'de nasıl çalışılacağına dair bir kılavuz veya makaleler söyleyin.
Temel ilke asyncio'dan bana açık, ancak mql için yeterli görsel örnek yok.
Microsoft yardımının farkındayım, ancak henüz WinAPI akışını mql'de kullanmanın mantığı ve yardımda tam olarak ne aranması gerektiği konusunda net bir fikir olmadığı için henüz çalışmadım.
Doğru yönde, mql için örnekler veya makaleler varsa, genellikle muhteşem olacaktır.
MT5, çoklu kullanım için openCL'ye sahiptir. Bu konuyla ilgili makaleleri burada arayın.
 

MQL işlevleri bir DLL'den çağrılamaz.

Ancak, ortamlarında MQL5'ten bağımsız olarak çalışabilmeleri için DLL çağrıları yoluyla birden çok iş parçacığı başlatmak mümkündür.

Örneğin, veriler MQL'den hazırlandı, bir yere yerleştirildi veya bir DLL kitaplığına aktarıldı, bu da görevi birden çok iş parçacığında tamamlayacak ve sonucu ek bir işlev aracılığıyla döndürecek.

 
Roman :

Evet, WinAPI standart kitaplığının standart dll'ler aracılığıyla etkileşime giren Windows API'sinden taşındığını düşündüm.
Buna göre, standart dll'leri başlatmanız gerekir ve bunun için WinAPI'nin portlu işlevleri de vardır.

Hayır, özellikle µl standart kütüphanesinden bahsediyordum (örneğin, alım satım fonksiyonları var ve diğerleri). Orada kesinlikle küresel veriler var ve her iş parçacığının kendi kopyası olmalı, CreateTrade() aracılığıyla yeni iş parçacığınız düzgün şekilde başlatılmamış olarak kalacaktır.

"Gevşek bacaklar" ile ne demek istiyorsun?

Orada çok ganimet var. Ancak https://en.cppreference.com/w/cpp/atomic/memory_order gibi materyalleri okumakta sorun yaşamıyorsanız, hazırsınız demektir.
 
MetaQuotes Software Corp. :

Ancak, ortamlarında MQL5'ten bağımsız olarak çalışabilmeleri için DLL çağrıları yoluyla birden çok iş parçacığı başlatmak mümkündür.

Bahsettiğimiz şey bu, standart portlu WinAPI kitaplığını kullanın, bu sadece standart Windows dll'leri ile çalışmak anlamına gelir.

kurban :

Hayır, özellikle µl standart kütüphanesinden bahsediyordum (örneğin, alım satım fonksiyonları var ve diğerleri). Orada kesinlikle küresel veriler var ve her iş parçacığının kendi kopyası olmalı, CreateTrade() aracılığıyla yeni iş parçacığınız düzgün şekilde başlatılmamış olarak kalacaktır.

Orada çok ganimet var. Ancak https://en.cppreference.com/w/cpp/atomic/memory_order gibi materyalleri okumakta sorun yaşamıyorsanız, hazırsınız demektir.

Bildiğim kadarıyla, bir dll'yi başlatırken, mql programında dll'den çağrılacak dışa aktarılan işlevleri de başlatabilirsiniz.
Bu nedenle, asıl sorun bu değil, sorun nasıl yapılır? Yukarıda yazdığım gibi, belki de C++ örnekleri mql'de çalışacaktır, ancak mql'deki kod örnekleriyle yardımcı olabileceklerini düşündüm.
Söylemek gerekirse, taşınabilirlik konusunda kafa karıştırmamak için, belki birileri WinAPI ile daha önce çalışmış ve bunu söyleyebilecektir.

ps
ahh, ne demek istediğini anlıyorum, ama biz taşınmış bir WinAPI'den bahsediyoruz, mql işlevlerinden değil,
belki mql işlevleri nesneler aracılığıyla başlatılabilir veya dll'nize doldurulabilir ve yukarıda açıklandığı gibi başlatılabilir.

 

Birbirimizi anlamadığımız bir şey.

Ama zahmet etmeyin - µl içinde CreateThread() aracılığıyla bir iş parçacığı oluşturmayacaksınız, bir işleve (iş parçacığının başlayacağı) bir işaretçi iletmeniz gerekir, ancak yukarıda belirtildiği gibi - bir çerez.

 

MT geliştirme şirketinin bir temsilcisinin size daha önce verdiği yanıtı tercüme ediyorum:

MQL'den akışlar oluşturamazsınız. WinAPI ile bile.

Bunu ancak kendi DLL'nizi yazarak yapabilirsiniz.


 
Roman :
Asenkron veya çok iş parçacıklı modda mql kodu yazmaya ihtiyaç vardır.

tabi ki ihtiyacın olan şey değil, ama çizebilirsin

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
 
Vict :

Birbirimizi anlamadığımız bir şey.

Ama zahmet etmeyin - µl içinde CreateThread() aracılığıyla bir iş parçacığı oluşturmayacaksınız, bir işleve (iş parçacığının başlayacağı) bir işaretçi iletmeniz gerekir, ancak yukarıda belirtildiği gibi - bir çerez.

O zaman bu cevap ne olacak?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL'de asenkron ve çok iş parçacıklı programlama

MetaQuotes Yazılım A.Ş. , 2019.07.24 16:31

Ancak, ortamlarında MQL5'ten bağımsız olarak çalışabilmeleri için DLL çağrıları aracılığıyla birden çok iş parçacığı başlatmak mümkündür.  

Vict, belki de tanımladığınız gibi, mql içindeki iş parçacıklarının çalışmasında bir sorun var, ama anladığım kadarıyla, CreateTrade() kullanarak WinAPI'den işlevleri çağırmak bir sorun olmamalı.
Daha sonra mql işlevleriyle değil, WinAPI işlevleriyle çok iş parçacıklı etkileşime ihtiyacım var.