Init() ve DeInit() yürütme sırası - sayfa 5

 
Nikolai Semko :


Evet, her şey açık. Yürütme sırası mantığını sordum. Olay bu, o yok. Bazen ilk OnDeinit tarafından (layenin mantığına göre olması gerektiği gibi) ve bazen de ilk OnInit tarafından yürütülür.

Cevabın " Bir süredir (çok kısa) göstergenin her iki kopyası da paralel olarak var" sözlerinde yattığını anlıyorum. Ama bu soru bu farkındalıktan net değil.

Programda ilk önce OnInit işlevinin yürütüleceği varsayılır.

OnInit -> OnDeinit dizisinin her zaman yürütülmediği duruma bir örnek verebilir misiniz?

 
Andrey Dik :

Programda ilk önce OnInit işlevinin yürütüleceği varsayılır.

OnInit -> OnDeinit dizisinin her zaman yürütülmediği duruma bir örnek verebilir misiniz?


Yazarın başta verdiği ERROR.mq5 teması örneğini kullanabilirsiniz . TF'yi değiştir. ve Uzmanlar sekmesinde neler olduğunu görün.

 
Nikolai Semko :


Başlıkta verdiği ERROR.mq5 tema yazarı örneğini kullanabilirsiniz.

Gündüzleri şarkı söylüyorum. Ve kişisel olarak zaten poyuzali?
 
Andrey Dik :
Gündüzleri şarkı söylüyorum. Ve kişisel olarak zaten poyuzali?

Tabii ki, hala 9 ay önce kullandım. Bu konudaki 8 numaralı yorumumu okuyabilirsiniz.
 
Stanislav Korotky :

Eh, hayır, o kadar basit değil. Göstergeler başka bir varlığın içine oturur - bir çizelge / çizelge ve ona tabidir (karmaşık bire çok ilişkilerinin farkındayım, ancak bu özü değiştirmiyor). Grafik, göstergelerin yaşam döngüsünün sınırları olan bazı iç olaylar init ve deinit dahil olmak üzere kendi yaşam döngüsüne sahiptir. Başka bir deyişle, gösterge grafiğinde hayatta kalamaz. Grafik tanımlama, tüm göstergelerin tanımlama veya tanımlama zaman aşımını beklemelidir. Ancak o zaman yeni zaman çerçevesi için grafik başlatılabilir ve bundan iç içe göstergelerin başlangıcı çağrılabilir.

Grafikler aynı göstergelerdir . Göstergeler çizelgelerinden "daha uzun yaşayabilir".

Göstergenin/EA'nın OnInit'inden önce, global nesnelerin oluşturucuları yürütülür. OnDeinit'ten sonra - yıkıcılar. Bu nedenle OnInit ve OnDeinit herhangi bir göstergeden kaldırılabilir.

Tek sorun, göstergeler hakkındaki fikirlerinin gerçeklikle çakışması değildir. Muhtemelen, bu davranış, bir çözüm yazamayan bazı serbest çalışanlar için kritik öneme sahiptir.

Geliştiricilerden bu konu hakkında bir adım atmasını memnuniyetle karşılarım. Ama burada birbirini tam olarak anlayan iki bakış açısı olması gerektiği gibi kendi mantığıyla çatıştı. Hiçbiri diğerinden daha kötü değil. Sadece bazı insanlar bu şekilde doğru olduğunu düşünüyor, diğerleri - bu şekilde.

 

TF'yi değiştirmeden önce , terminal tüm göstergelerin eski TF'den boşaltılmasını beklerse ve ancak bundan sonra yenisini oluşturup başlatırsa, çizelgelerin nasıl yavaşlayacağını hayal edin.

Hangi durumlarda, grafikle basit çalışma dışında. nesneler (başlıkta TF'nin adı olmadan), DeInit - Init dizisi önemli mi?

 
Andrey Khatimlianskii :

TF'yi değiştirmeden önce , terminal tüm göstergelerin eski TF'den boşaltılmasını beklerse ve ancak bundan sonra yenisini oluşturup başlatırsa, çizelgelerin nasıl yavaşlayacağını hayal edin.

Hangi durumlarda, grafikle basit çalışma dışında. nesneler (adında TF'nin adı olmadan), DeInit - Init dizisi önemli mi?


+
 

Bir kez daha tekrarlıyorum. Zaman çerçevesini veya sembolü değiştirirken, grafik için göstergenin yeni bir kopyası oluşturulur. yeni .

Göstergelerin hesaplanan kısımlarının geçmiş önbelleklerinde yaşamasının nedeni budur. Her zaman diliminin kendi çubuk önbelleği vardır. Zaman çerçevesini değiştirirken EURUSD,M1 diyelim EURUSD,H1, M1 önbelleğindeki indikatöre sebep 3 (grafik değişikliği) ile Deinit olayı gönderilir ve bir süre sonra bu indikatör kaldırılır. Aniden bu göstergenin 3. nedenle Deinit'i işlemek için zamanı olmadıysa, boşaltma sırasında zaten 1. neden ile başlatmadan arındırma olacaktır (grafik kapalı). H1 önbelleği şimdiye kadar mevcut değilse, oluşturulur. Bundan sonra, göstergenin YENİ bir kopyası, Init olayının gönderildiği H1 önbelleğine yüklenir. Göstergenin yeni kopyası, ölmek üzere olan önceki kopya hakkında hiçbir şey bilmiyor. Göstergenin yeni kopyasında, tüm değişkenler temiz, yeni doğmuş.

Bir sembol içinde bir zaman çerçevesi değişikliği varsa, o zaman başlatma-başlatmadan kaldırma sırası temelde tahmin edilebilir. En son yapı 1580'i indirin - orada bir şeyi düzelttik, şimdi göstergeler en son kaldırıldı, bu nedenle erken bir tanımlama olmamalıdır. Ancak sembolü değiştirirseniz, iplikler arası yarışlar saf formlarında elde edilir ve başlatma-başlatmadan kaldırma sırasını açık bir şekilde tahmin etmek artık mümkün değildir. Farklı karakterler farklı iş parçacıklarında işlendiğinden

Bu nedenle bir konu başlatıcı için tavsiye. Başlatmama nedenine odaklanın. 3'e eşitse, renk şemasını grafiğe döndürmeyin.

 
Zaman dilimlerini değiştirirken tüm Deinit'leri beklemek ve ancak o zaman göstergeleri başlatmak ve içlerinde Init'i yürütmek mümkün müdür?
 
Andrey Khatimlianskii :

TF'yi değiştirmeden önce , terminal tüm göstergelerin eski TF'den boşaltılmasını beklerse ve ancak bundan sonra yenisini oluşturup başlatırsa, çizelgelerin nasıl yavaşlayacağını hayal edin.

Hangi durumlarda, grafikle basit çalışma dışında. nesneler (adında TF'nin adı olmadan), DeInit - Init dizisi önemli mi?


Neden yavaşlayacaklar? Gösterge çarpık yazılmadığı sürece. Normal yazılmış bir gösterge için DeInit biraz zaman alır. Ayrıca, TF'yi değiştirmek çok sık yapılan bir işlem değildir. Bazı özellikle ciddi durumlarda ("yanlış" göstergeler için), TF'yi değiştirirken bir veya iki saniye bekleyebilirsiniz.

Bu nedenle, TF'yi değiştirirken fren yapma konusundaki argüman şüpheliden daha fazlasıdır. Ayrıca henüz kurulmamış bir TF'ye geçildiğinde de oldukça fark edilir bir zaman gecikmesi algılanıyor. Ve kimse terminalin frenleri için ağlamaz.