"MetaTrader 5’te Paralel Hesaplamalar" makalesi için tartışma

 

Yeni makale MetaTrader 5’te Paralel Hesaplamalar yayınlandı:

İnsanlık tarihi boyunca zaman büyük bir değer olmuştur ve bunu gereksiz şekilde israf etmemeye çalışıyoruz. Bu makale, bilgisayarınız çok çekirdekli bir işlemciye sahipse Uzman Danışmanınızın (EA) çalışmasını nasıl hızlandıracağınızı açıklayacaktır. Ayrıca, önerilen yöntemin uygulaması MQL5 dışında başka hiçbir dilin bilinmesini gerektirmez.

Tüm bilgisayar kullanıcıları (ve hatta tüm acemi programcılar) bunun nasıl çalıştığını anlamaz. Bu nedenle, biri kesinlikle şu soruyu soracaktır: Daha önce bile (tek çekirdekle) bilgisayar çok sayıda programı eş zamanlı çalıştırabilirken ve tümü çalışırken neden bu kadar çok çekirdekli işlemciye ihtiyacımız var? Güvenin, bu böyle değildir. Aşağıdaki diyagrama bakalım.

Şekil 1. Uygulamaların paralel yürütülmesi

Şekil 1. Uygulamaların paralel yürütülmesi

Yazar: ds2

 

Yazara teşekkürler, ilgili bir makale. Ben de bu konu üzerinde düşünüyordum ama makaleye ulaşamadım.

Yazar, hangi enstrümanların neyi çalıştırdığını dikkatlice izlemeniz gerektiği konusunda uyarıyor. Herhangi bir çift üzerinde çalıştırılabilen Uzman Danışmanlar yazmanın ışığında, bu biraz zor. EA'nın hangi çift üzerinde çalıştığını takip etmeniz ve paralel akış çiftlerini ayarlamanız gerekecektir.

Bu bağlamda, bir soru (yazara değil, daha çok MQ geliştiricilerine): özel araçlar tanıtmak mümkün mü?

Bu şekilde, paralelleştirilmiş hesaplamalar için boş grafikleri oluşturmaktan başlayıp kendi oluşturduğumuz tik grafiklerini oluşturmaya kadar birçok görevi çözebiliriz.

Veri aktarım tamponuna gelince, size global bir yapı oluşturmanızı ve farklı veri türlerini yapıya göre aktarmanızı tavsiye edebilirim. Deneyimlerimden biliyorum ki, hesaplamaların sonucunu bir dizi şeklinde döndürmek her zaman uygun değildir, genellikle bazı sayaçları izlemeniz gerekir ve isimleri karıştırmamak için her şeyi bir yapı olarak aktarmak ve değişkenlere yapının üyeleri olarak atıfta bulunmak daha kolaydır. Bu arada, aynı yapı dizileri de içerebilir.
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Urain:

Bu bağlamda, bir soru (yazara değil, daha çok MQ geliştiricilerine): özel araçlar tanıtmak mümkün mü?

Hmm, bu fikri sevdim.
 

Belki de burada özel araçlar hakkında daha önce ifade edilen fikri tekrarlayacağım, ancak eklemek istiyorum....

Şimdi bir Uzman Danışman (gösterge, komut dosyası) yalnızca belirli bir sembol üzerinde başlatılır. Diğer sembollerin mevcut verilerine erişimi vardır, ancak OnTick olayı yalnızca Uzman Danışmanın grafiğinde başlatıldığı ana sembol için oluşturulur.

Belki de bir eklenti gibi kendi"özel aracınızı" oluşturma olasılığını tanıtmak mantıklı olacaktır. Uzman Danışmanlar üzerinde bir üst yapı gibidir ve birkaç sembolden tik alma ve işleme yeteneğine sahiptir, sonuçları kendi iş parçacığında belirli bir sembolle çalışan programlara (programın bölümleri veya Uzman Danışmanlar, göstergeler) aktarır. Bu, "çoklu para biriminin" yaratılmasını büyük ölçüde kolaylaştırdı ve teşvik etti. Ve nesne programlama kavramının kendisi buna iter. Birkaç sembolle çalışıyorsanız neden bir Uzman Danışmanı belirli bir sembole bağlayasınız?

Not: Ya da SymbolInf... fonksiyonlarına "bu sembol için yeni bir tik geldi" olayı gibi bir şey eklemek iyi olurdu.

 
lav888:

Artık Uzman Danışman (gösterge, komut dosyası) yalnızca belirli bir sembol üzerinde başlatılır. Diğer sembollerin mevcut verilerine erişimi vardır, ancak OnTick olayı yalnızca grafiğinde Uzman Danışmanın başlatıldığı ana sembol için oluşturulur.

Geliştiricilerin koltuk değneğini neden tekrarladığını anlamak zor. Sonuçta, MQL5 mimarisi geliştirilirken, onTick 'in herhangi bir imzalı sembolün herhangi bir kenesi için tetiklendiği çok güçlü bir API zaten vardı.

Genel olarak, neden böyle bir mimari seçtiklerini ve mimari açısından çok yetkin olan mevcut API'den bu kadar az şey aldıklarını anlamıyorum.

MQL5 geliştiricileri sanki tekerleği yeniden icat ediyorlarmış gibi davranıyorlar: "bu özelliği düşüneceğiz", "evet, haklısınız, ekleyeceğiz", vb.

Mimari üzerinde çalışmak için bir yıldan fazla zaman harcandığından birkaç kez bahsedilmişti. Yani neden başka türlü değil de bu şekilde yapmaya karar verdiklerine dair bazı argümanlar var.

Not: Belki de bunun nedeni, MetaTrader geliştiricilerinin aracılık ve ticaret konusunda çok az deneyime sahip olmaları, ancak platform yazma konusunda büyük bir deneyime sahip olmaları gerçeğinde yatmaktadır. Aksine, diğer geliştiriciler gerçek aracılık ve piyasa ticaretinde büyük deneyime sahipti.

Not: Spekülasyonları değil, düşüncelerimi yazdım. Eleştirmek her zaman yaratmaktan daha kolaydır. Geliştiriciler, bariz hatalarına rağmen, Saygıyı hak ediyorlar.

 
lav888:

Belki de Uzman Danışmanlar üzerinde bir eklenti gibi olan ve birkaç sembolden tik alma ve işleme yeteneğine sahip, sonuçları programlara (programın bölümleri veya Uzman Danışmanlar, belirli bir sembolle çalışan göstergeler) aktaran kendi"özel aracınızı" oluşturma olasılığını tanıtmak mantıklı olacaktır. EA'lar üzerinde bir üst yapı gibidir ve birkaç sembolden tik alma ve işleme yeteneğine sahiptir, sonuçları kendi iş parçacığında belirli bir sembolle çalışan programlara (programın bölümleri veya EA'lar, göstergeler) aktarır. Bu, "çoklu para biriminin" yaratılmasını büyük ölçüde kolaylaştırmış ve teşvik etmiştir. Ve nesne programlama kavramının kendisi buna iter. Birkaç sembolle çalışıyorsanız neden bir Uzman Danışmanı belirli bir sembole bağlayasınız?

Not: SymbolInf... fonksiyonlarına "bu sembol için yeni bir tik geldi" olayı gibi bir şey eklemek iyi olurdu.

Böyle bir "eklenti" standart MQL5 araçları kullanılarak uygulanabilir: Çoklu para birimi tik işleyicisi OnTickMarketWatch
 
Lizar:
Bu "eklenti" MQL5 standart araçları kullanılarak uygulanabilir: Multicurrency tick handler OnTickMarketWatch

Teşekkür ederim. Beni yukarıdaki sonuçlara iten bu makaleydi. Ancak bu makalede sizin de fark ettiğiniz gibi:

Kullanım için ipuçları:

1. Çoklu para birimi tik işleyicisinin bu çeşidi oldukça yoğun kaynak kullanır. Gecikme değişkenini kullanarak koddaki tik alma süresinin gecikmesini artırarak işlemci üzerindeki yükü hafifletebilirsiniz. Ancak aynı zamanda bazı tik sayılarını atlayabilirsiniz.


Gecikme süresini 1 saniyeye kadar artırırsanız, OnTimer() kullanarak aynı etkiyi elde edebilirsiniz. Ne yazık ki aynı dezavantajlarla birlikte.

Aynı zamanda, terminal sürekli olarak "Piyasa Penceresi "nden sembollere göre tikleri alır ve işler. Bu tiklere erişimimiz var, ancak bu verilerin güncellendiğine dair bir sinyalimiz yok. Bu yüzden kontrolü yapay olarak yapmak zorundayız. MQL5'in avantajı bunun yapılabilmesidir. Ancak terminal işlevlerine gömülü bir çözüme sahip olmanın çok daha zarif olacağı konusunda hemfikiriz. OnTrade() gibi ayrı bir olay olsun ve geliştirici bunu kendi takdirine bağlı olarak kullanabilsin (ya da kullanmasın).

Ve uzmanlar üzerinde "özel araçlar" veya üstyapı hakkında.... Bunun bir tür "hayal" olduğunun ve tasarım aşamasında düşünülmesi gerektiğinin farkındayım... Yazık!

 
lav888:

Teşekkür ederim. Beni yukarıdaki sonuçlara iten bu makaleydi. Ancak sizin de bu makalede belirttiğiniz gibi:

Kullanım için ipuçları:

1. Çoklu para birimi tik işleyicisinin bu çeşidi oldukça yoğun kaynak kullanır. Gecikme değişkenini kullanarak koddaki tik alma süresinin gecikmesini artırarak işlemci üzerindeki yükü hafifletebilirsiniz. Ancak aynı zamanda belirli sayıda keneyi atlayabilirsiniz.


Gecikme süresini 1 saniyeye kadar artırırsanız, OnTimer() kullanarak aynı etkiyi elde edebilirsiniz. Ne yazık ki aynı dezavantajlara sahip.

Aynı zamanda, terminal sürekli olarak "Piyasa Penceresi "nden sembollere göre tikleri alır ve işler. Bu tiklere erişimimiz var, ancak bu verilerin güncellendiğine dair bir sinyalimiz yok. Bu yüzden kontrolü yapay olarak yapmak zorundayız. MQL5'in avantajı bunun yapılabilmesidir. Ancak terminal işlevlerine gömülü bir çözüme sahip olmanın çok daha zarif olacağı konusunda hemfikiriz. OnTrade() gibi ayrı bir olay olsun ve geliştirici bunu kendi takdirine göre kullanabilir (veya kullanmayabilir).

Ve uzmanlar üzerinde "özel araçlar" veya üstyapı hakkında.... Bunun sadece bir "hayal" olduğunun ve tasarım aşamasında düşünülmesi gerektiğinin farkındayım... Yazık!

Evet, genel olarak katılıyorum. Hayal kurmaya gelince, şu anda sahip olduğumuz her şey bir zamanlar birilerinin hayaliydi. Eğer güçlü argümanlar varsa, o zaman"kullanıcı araçları" ortaya çıkacaktır.
 

Tamam! Tamam! Şimdi geriye geliştiricilerin bizi duyması kalıyor. Bu eklenti bir kerede iş parçacığı yönetimi işlevlerini içerebilirse iyi olur.

Her işlemi kendi iş parçacığında çalıştırmak mümkün olurdu. Belki de mevcut tik ile çalışırken yeni bir tikin işlenmesine izin verebilir.

 

Faydalı bir makale. Yeni ufuklar açtı.

Bir sorum var: OnTick () işlevi, OnTick (EURUSD) gibi parametreli bir işleve dönüştürülebilir mi, böylece farklı enstrümanlardan gelen keneler tek bir Uzman Danışman'da paralel olarak işlenebilir mi? Elbette, tek parametreli bir işlevin her bir örneğinin ayrı bir iş parçacığında (ayrı bir çekirdekte) işlenmesiyle.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Harika bir makale. Paylaşım için teşekkürler.