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

 
Vladimir Simakov :
Senkronizasyon programcının işidir, nasıl olduğunu bilmiyorsunuz, multithreading kullanmıyorsunuz. Yaratıcıların görevi bir araç vermektir ve zaten her kötü Pinokyo kendisinde vardır. Aynı a la mutex'in kendisi, uygulanması için bir sorun değildir.

Maalesef durum böyle değil, MQL'nin hedef kitlesi kim? (IMHO, programlamanın temellerini bilen uygulama programcıları)

ve biz yine de MQL5 hakkında konuşacağız (geliştiriciler tekrar tekrar MQL4 güncellemesi olmayacağını söylediler)

MQL5'in kendisi zaten başlangıçta eşzamansız modda çalışır - örneğin geçmiş verileri talep eder (ya veri döndürür veya arka planda sayfalamaya başlar ve bir hata döndürür) ve terminal ile MQL arasındaki veri alışverişinde olduğu gibi her şey bu şekilde çalışır program,

ve şimdi bu anlar zaten şaşkınlığa neden oluyor, çünkü değerleri döndürmek yerine, verilerin hazır olup olmadığını sürekli olarak kontrol etmeniz gerekiyor ve bu nedenle her seferinde .... MQL4'ten geçiş yaparken bu korkunç, ne kadar uygunsuz


ve işte başka bir konu, şimdi bir MQL programının basit bir yapısını alacağımızı ve asenkron olarak farklı olaylar gireceğimizi söylüyorlar .... kime yönelik olacak? - bu gerekli özelliklerin son kullanıcısı kim?

;)

 
Andrey Barinov :

GUI, ana Uzman Danışmanda ve diğer her şey ayrı bir Uzman Danışmanda çalışmalıdır. Bu ayrı bağımlı EA, görünmez bir OBJ_CHART üzerine yerleştirilir ve ana EventSendCustom() yolu ile etkileşime girer.

Şimdi nasıl olduğunu bilmiyorum. Daha önce, OBJ_CHART üzerinde yalnızca komut dosyaları çalıştırıldığı görülüyor. Giriş parametreleriyle ilgili başka bir özellik daha vardı.

Market Watch'taki tüm sembollerden çubuk talep etmeye çalıştım. Tüm yüklenenlerin geçmişi. Onlarca saniye bir döngü geçişi! Hafifçe söylemek gerekirse, MT5'i memnun etmedim.
 
fxsaber :

Şimdi nasıl olduğunu bilmiyorum. Daha önce, OBJ_CHART üzerinde yalnızca komut dosyaları çalıştırıldığı görülüyor. Giriş parametreleriyle ilgili başka bir özellik daha vardı.

Market Watch'taki tüm sembollerden çubuk talep etmeye çalıştım. Tüm yüklenenlerin geçmişi. Onlarca saniye bir döngü geçişi! Hafifçe söylemek gerekirse, MT5'i memnun etmedim.

Uzman Danışmanlar başlatılır, ancak orada ne işaretler ne de zamanlayıcı çalışır. Her şeyi yalnızca OnChartEvent ile başlatabilirsiniz (ve orada ana Uzman Danışmandan keneler ve zamanlayıcı yayınlayabilirsiniz).

Başka bir kısıtlama fark etmedim. Her şey çalışıyor.

Ama bunu aynı prensipte normal bir çizelgede yapabilirsiniz. (MT4'te benim için böyle çünkü orada OBJ_CHART yok)
 
Andrey Barinov :

Uzman Danışmanlar başlatılır, ancak orada ne işaretler ne de zamanlayıcı çalışır. Her şeyi yalnızca OnChartEvent ile başlatabilirsiniz (ve orada ana Expert Advisor'dan tikler ve zamanlayıcı yayınlayabilirsiniz).

Başka bir kısıtlama fark etmedim. Her şey çalışıyor.

Güzel. Bu olasılığı bilmiyordum. Neden gui'yi göstergeye koymuyorsunuz ve kaynaklar aracılığıyla etkileşime girmiyorsunuz? Ben de öyle. EventChartCustom() , bir seferde bir double ve uzun olmak üzere 128 karaktere kadar aktarır ve OnChartEvent() üzerinde kuyruğa alınır ve birleşimler aracılığıyla istediğiniz kadar karakter ve her türden değeri kaynaklara koyabilirsiniz. Ve sıraya girme. İhtiyacın olduğunda al.
 
Реter Konow :
Güzel. Bu olasılığı bilmiyordum. Neden gui'yi göstergeye koymuyorsunuz ve kaynaklar aracılığıyla etkileşime girmiyorsunuz? Ben de öyle. EventChartCustom(), bir seferde bir double ve uzun olmak üzere 128 karaktere kadar aktarır ve OnChartEvent() üzerinde kuyruğa alınır ve birleşimler aracılığıyla istediğiniz kadar karakter ve her türden değeri kaynaklara koyabilirsiniz. Ve sıraya girme. İhtiyacın olduğunda al.

Teşekkürler, OnChartEvent'i bilmiyordum. Senkronizasyon özel etkinlikler aracılığıyla mı yapılıyor? Veri değişimi?

 
Реter Konow :
Güzel. Bu olasılığı bilmiyordum. Neden gui'yi göstergeye koymuyorsunuz ve kaynaklar aracılığıyla etkileşime girmiyorsunuz? Ben de öyle. EventChartCustom(), bir seferde bir double ve uzun olmak üzere 128 karaktere kadar aktarır ve OnChartEvent() üzerinde kuyruğa alınır ve birleşimler aracılığıyla istediğiniz kadar karakter ve her türden değeri kaynaklara koyabilirsiniz. Ve sıraya girme. İhtiyacın olduğunda al.

OnChartEvent aracılığıyla veri göndermiyorum. Yalnızca etkinlikler. Aksi takdirde, temsilci danışmanında tek bir olay yoktur, aksi takdirde ONTIMER_BEAT ve ONTICK_BEAT alır .

Ve veriler, göreve bağlı olarak bir dosya veya kaynaklar aracılığıyla değiş tokuş edilebilir. Dosyaları daha sık kullanıyorum çünkü ayrıca terminali yeniden başlattıktan sonra GUI'yi ve diğer her şeyi geri yüklemek için kullanılırlar.

GUI'niz, terminali yeniden başlattıktan sonra görünümünü hatırlayabiliyor ve geri yükleyebiliyor mu?

 
fxsaber :

Teşekkürler, OnChartEvent'i bilmiyordum. Senkronizasyon özel etkinlikler aracılığıyla mı yapılıyor? Veri değişimi?

Her bir taraftan gelen her mesajın bir seri numarası vardır. A tarafı B tarafına bir mesaj gönderdiğinde, önce bir önceki mesajın okunup okunmadığına bakar. Değilse, yenisi gönderilmez. B tarafı, A tarafına bir mesaj gönderdiğinde, bir önceki mesajın okunup okunmadığına da bakar.
 
Andrey Barinov :

OnChartEvent aracılığıyla veri göndermiyorum. Yalnızca etkinlikler. Aksi takdirde, temsilci danışmanında tek bir olay yoktur, aksi takdirde ONTIMER_BEAT ve ONTICK_BEAT alır.

Ve veriler, göreve bağlı olarak bir dosya veya kaynaklar aracılığıyla değiş tokuş edilebilir. Dosyaları daha sık kullanıyorum çünkü ayrıca terminali yeniden başlattıktan sonra GUI'yi ve diğer her şeyi geri yüklemek için kullanılırlar.

GUI'niz, terminali yeniden başlattıktan sonra görünümünü hatırlayabiliyor ve geri yükleyebiliyor mu?

EventChartCustom()'u tam olarak, bazen frenlemeye neden olabilen kuyruk nedeniyle tamamen terk etmenizi öneririm. Zamanlayıcının frekansında iki yönlü isteklerde bulunarak kaynaklar aracılığıyla etkileşim kurun. Örneğin, A tarafı yoğun bir şekilde yüklenmiş OnChartEvent()'e sahipse ve B tarafı bir İptal düğmesi tıklama olayı gönderirse, A tarafı, onu yükleyen bazı saçmalıklar nedeniyle bu olayı geç alabilir.

Evet, çekirdeği bir dosyaya kaydedip bir dosyadan yüklüyorum. Bu durumda, yeniden başlatmanın ardından tüm ayarlar ve görünüm son görünüme dönecektir. Ancak genellikle yeniden başlatmanın ardından başlatma ayarlarına ihtiyaç duyulur, bu yüzden bu işlevi kullanmıyorum.

 
Реter Konow :

EventChartCustom()'u tam olarak, bazen frenlemeye neden olabilen kuyruk nedeniyle tamamen terk etmenizi öneririm. Zamanlayıcının frekansında iki yönlü isteklerde bulunarak kaynaklar aracılığıyla etkileşim kurun. Örneğin, A tarafı yoğun bir şekilde yüklenmiş OnChartEvent()'e sahipse ve B tarafı bir İptal düğmesi tıklama olayı gönderirse, A tarafı, onu yükleyen bazı saçmalıklar nedeniyle bu olayı geç alabilir.

OBJ_CHART üzerinde bulunan EA'da zamanlayıcı çalışmıyor. Orada HİÇBİR ETKİNLİK YOKTUR (OnChartEvent Hariç). Bu nedenle, tüm olaylar (OnTick, OnTimer vb.) ana EA'dan oraya gönderilmelidir.

Ayrıca tuş basmalarını ileri geri göndermiyorum. Bu faydasız.
 
Andrey Barinov :

OBJ_CHART üzerinde bulunan EA'da zamanlayıcı çalışmıyor. Orada HİÇBİR ETKİNLİK YOKTUR (OnChartEvent Hariç). Bu nedenle, tüm olaylar (OnTick, OnTimer vb.) ana EA'dan oraya gönderilmelidir.

Ayrıca tuş basmalarını ileri geri göndermiyorum. Bu faydasız.

GUI taşıyıcısı olarak bir gösterge ve bir danışmanla iletişim kurmak için kaynaklar kullanmayı öneriyorum. Ek olarak, MT4'te, paneli kullanarak test uzmanının danışmanını normal bir çizelgeden yönetebilirsiniz. Sadece düğmeler değil, tüm kontroller çalışacaktır. Test edilen danışmana metin ve genel olarak herhangi bir şey gönderebileceksiniz. Ben zaten kontrol ettim. Her şey çalışıyor.

not. ve test edilen Uzman Danışman, normal bir çizelgeye farklı veriler gönderecektir.

Neden: