Benim yaklaşımım. Çekirdek - Motor. - sayfa 147
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
Genel olarak, görev neredeyse tanımlanmıştır.
Diyelim ki, motor altıncı ile çalışıyorsa, 5 danışmanın tüm iş paketlerini iletmesi kafamı karıştırıyor. Diğer beşinin iş bilgilerini iletmesini bir süre yasaklamak gerekiyor. Bırakın "havayı dinlesinler".
Kabul ediyorum. Makul.
Bu, normal çalışacakları, ancak kaynağa mesaj yazmayacakları anlamına gelir. Yalnızca çekirdek parametrelerinin bir kopyasında. Ve bağlandıklarında, parametre çekirdeğini kaynağa yazacaklar ve Motor onu yükleyecektir. Bağlandıktan sonra EA, Motor için mesaj kaynağına mesajlar yazmaya başlayacaktır.
Bağlantı sorunu.
Motor, tüm Uzman Danışmanlar için küçük bir adres dizesi sunar. EA'daki aynı tanıma adresine sahip çekirdek geri çağrılır ve motor-EA'nın standart çalışması otomatik olarak başlar. Motorda başka bir Expert Advisor'a geçiş yapılırken, motor çalıştığı Expert Advisor'ın çekirdeğini o anki diğer Expert Advisor'lar gibi adres bekleme durumuna sokar. Böyle bir anda, tüm danışmanlar çözülür ve motorun ihtiyaç duyduğu başka bir danışman için motorun başka bir adres belirlemesini bekler.
Yeni Expert Advisor'ın özü, yanıt verir ve standart çalışma durumuna geçer. Hattın motor tarafından bir sonraki mesajına kadar işin bitimi ve bekleme durumuna geçiş. Sadece, Uzman Danışmanlar, standart değişime ek olarak, içindeki iş hattının sonu görünümü için akışı sürekli olarak analiz etmelidir. Değişim paketlerinin başında, motordan iletilen paketin kime adreslendiğini gösteren bir satır olmalıdır. Daha sonra çekirdek kontrol paketini alır ve belirli bir frekansta kendi durumunun paketlerini göndermeye başlar.
Geri kalanlar, her danışman için benzersiz bir tanımlama dizisi aracılığıyla iletişime geçilmeyi bekliyor. Geçiş yaparken, motor iş sonu dizisini mevcut EA'ya gönderir. EA herhangi bir şey göndermeyi durdurur ve aynı zamanda motorla alış-verişin standart çalışmasının başlangıcı olan kendi tanıma dizesini tanıma durumuna geçer.
Bağlantı sorunu.
Motor, tüm Uzman Danışmanlar için küçük bir adres dizesi sunar. EA'daki aynı tanıma adresine sahip çekirdek geri çağrılır ve motor-EA'nın standart çalışması otomatik olarak başlar. Motorda başka bir Expert Advisor'a geçiş yapılırken, motor çalıştığı Expert Advisor'ın çekirdeğini o anki diğer Expert Advisor'lar gibi adres bekleme durumuna sokar. Böyle bir anda, tüm danışmanlar çözülür ve motorun ihtiyaç duyduğu başka bir danışman için motorun başka bir adres belirlemesini bekler.
Yeni Expert Advisor'ın özü, yanıt verir ve standart çalışma durumuna geçer. Hattın motor tarafından bir sonraki mesajına kadar işin bitimi ve bekleme durumuna geçiş. Sadece, Uzman Danışmanlar, standart değişime ek olarak, içindeki iş hattının sonu görünümü için akışı sürekli olarak analiz etmelidir. Değişim paketlerinin başında, motordan iletilen paketin kime adreslendiğini gösteren bir satır olmalıdır. Daha sonra çekirdek kontrol paketini alır ve belirli bir frekansta kendi durumunun paketlerini göndermeye başlar.
Geri kalanlar, her danışman için benzersiz bir tanımlama dizisi aracılığıyla iletişime geçilmeyi bekliyor. Geçiş yaparken, motor iş sonu dizisini mevcut EA'ya gönderir. EA herhangi bir şey göndermeyi durdurur ve aynı zamanda motorla alış-verişin standart çalışmasının başlangıcı olan kendi tanıma dizesini tanıma durumuna geçer.
Kaynaklar biraz daha kolay. Orada bir adrese ihtiyacınız yok, sadece kaynağın adına ihtiyacınız var. Karmaşık bir modeliniz var. Her şey daha kolay.
Çekirdek sadece bir değerler dizisidir. Her Uzman Danışman, GUI öğelerinin parametrelerinin değerlerini kendisine yazar. Gerektiğinde, EA'lar parametre çekirdeğinin bir kopyasını bir kaynağa kaydedecek ve motor bunu okuyacak ve GUI'yi yeniden çizecektir.
Prensip olarak, bu basit bir iştir, ancak birçok küçük nüansı vardır. Örneğin, danışmanla iletişimin başlaması ve sona ermesiyle ilgili mesajlar. Sadece bir format bulmanız gerekiyor.
Bu arada, iletişimi hızlandırmayı ve frenlemeyi azaltmayı başardım. Ama frenlemenin sebebi sonuna kadar henüz anlaşılamadı. Yeniden çizerken ortaya çıkıyor, ancak garip olan şey, yeniden çizmenin kendisinin yavaşlamamasıdır. Ve bir kaynak aracılığıyla iletişim kurarken yeniden çizim yavaşlar. Nedeni henüz belli değil.
Zaman maliyetlerinin biraz izlenmesini koyun. Nerede yavaşladığını görmek için. Ve etrafta nasıl dolaşılır.
Belki biraz fazla karmaşıklaştırdım. Motorun içinde nasıl organize ettiğinizi bilmiyorum. Ben sadece mantığı kullandım.
Zaman maliyetlerinin biraz izlenmesini koyun. Nerede yavaşladığını görmek için. Ve etrafta nasıl dolaşılır.
Belki biraz fazla karmaşıklaştırdım. Motorun içinde nasıl organize ettiğinizi bilmiyorum. Ben sadece mantığı kullandım.
Mantık sizi konuya yaklaştırdı ve genel olarak doğru anlıyorsunuz.
Bugün frenlemenin nedenlerini bulmaya çalışacağım. Aşağıdakiler açıktır - yeniden çizmenin kendisi yavaşlamaz. Bir kaynak yazmak ve okumak da. Ve birlikte, - frenleme çıkıyor.
İzleme var mı, hangi operasyon ne kadar sürüyor? Sırayla gerçekleştirilmelidirler. Danışmanda, veri kaldırma ve motora gönderme, örneğin 30 ms'lik bir frekansla gerçekleştirilir. Motora bir akış gönderildiğinde, kabul etmeye hazır mı? Ya da ne yapıyor?
Şimdi her şeyi kontrol ediyorum.
Motor, 30 ms'lik bir frekansta, Uzman Danışmandan gelen mesajların kaynağını okur ve Uzman Danışman, aynı frekansta, Motordan gelen mesajların kaynağını okur. Aynı frekansta ikisi de birbirlerine (kaydedilecek bir şey varsa) mesajlarını kaydederler. Bütün bunlar yavaşlamıyor. Ayrıca, yeniden çizim kendi başına gecikmeye neden olmaz.
Ancak, Motor tarafında kaynağı yeniden çizme ve yazma/okuma birleştirilirse gecikme görünür. Nedeni hala belirsiz. Öğrendim.
Şimdi her şeyi kontrol ediyorum.
Motor, 30 ms'lik bir frekansta, Uzman Danışmandan gelen mesajların kaynağını okur ve Uzman Danışman, aynı frekansta, Motordan gelen mesajların kaynağını okur. Aynı frekansta ikisi de birbirlerine (kaydedilecek bir şey varsa) mesajlarını kaydederler. Bütün bunlar yavaşlamıyor. Ayrıca, yeniden çizim kendi başına gecikmeye neden olmaz.
Ancak, Motor tarafında kaynağı yeniden çizme ve yazma/okuma birleştirilirse gecikme görünür. Nedeni hala belirsiz. Öğrendim.
Bir uyumsuzluk olabilir: hem danışman hem de motor, 1- her ikisi de birbirine iletir, 2 - ikisi de alır, OnTimer döngüleri senkronize değildir. Normal çalışmanın rastgele senkronizasyon anını bekleyin. Belki bu yüzden?