Hangi mantık bozulur?
Zaman çerçevesini değiştirirken, önceki kopya hakkında hiçbir şey bilmeyen göstergenin yeni bir kopyası oluşturulur. Bir süredir (çok kısa) göstergenin her iki kopyası da paralel olarak mevcuttur. Ardından önceki kopya kaldırılır.
Belgeleri okuyun https://www.mql5.com/ru/docs/runtime/running

- www.mql5.com
Hangi mantık bozulur?
Zaman çerçevesini değiştirirken, önceki kopya hakkında hiçbir şey bilmeyen göstergenin yeni bir kopyası oluşturulur. Bir süredir (çok kısa) göstergenin her iki kopyası da paralel olarak mevcuttur. Ardından önceki kopya kaldırılır.
Belgeleri okuyun https://www.mql5.com/ru/docs/runtime/running
Cevap için teşekkürler
"Mantık bozuyor" hakkında
Ana grafiği (şamdanlar) kendi çizim tipi DRAW_CANDLES ile değiştiren bir gösterge yazdım.
Amaç, ana fiyat tablosunu kaldırmak ve sadece benimkini göstermek.
- Inita ile ana tablonun rengini şeffaf olarak ayarladım.
Programımı çiziyorum (parametrelerime göre)
Çünkü göstergemi çıkardıktan sonra ana grafiğin rengini eski haline getirmek istiyorum
- DeInit'te ana grafiğin rengini geri yüklerim
TF'yi değiştirirken , önce DeInit'i (renk restorasyonu) ve ardından Init'i (Yine şeffaf) kastediyorum.
Bu nedenle, komutların yürütülmesi, TF değiştirilirken periyodik olarak sıralı değildir.
göstergemdeki ana grafiği (geri yüklenen renkte) kaplayın.
İşte bir "mantık yozlaşması" örneği.
Not: (((Belgeleri okuyun https://www.mql5.com/ru/docs/runtime/running )))
Expert Advisor'ın eklendiği çizelgenin sembolü veya zaman çerçevesi değiştirilirken Expert Advisor'ın yükü boşaltılmaz veya yüklenmez . Aynı zamanda eski sembol/zaman çerçevesi üzerindeki OnDeinit() ve yeni sembol/zaman çerçevesi (varsa) üzerindeki OnInit( ) işleyicileri sırayla çağrılır, global değişkenlerin ve statik değişkenlerin değerleri sıfırlanmaz. Başlatma ( OnInit() işlevinin) tamamlanmasından önce Expert Advisor için alınan tüm olaylar atlanır.

- www.mql5.com
Hakkında
"göstergenin önceki kopya hakkında hiçbir şey bilmeyen yeni bir kopyası oluşturulur"
Öyleyse, DeInit'te yeni Init'in bir kopyasında oluşturulan nesneler neden silinir? Eğer sadece bir kopyaysa.
Zaman çerçevesini değiştirirken, OnInit her seferinde çağrılır ve bazı rahatsızlıklar yaratır.
OnInit her seferinde ne anlama geliyor?
OnInit nedir - tüm değişkenleri ve parametreleri bir kez başlatmak için
örneğin
Mevcut TF'nin ne olduğunu yazacağım grafikte bir metin etiketi oluşturacak bir gösterge yazmak istiyorum.
Göstergeyi silerken bu metin etiketini grafikten kaldırdım.
Ve TF'yi değiştirirken, içeriğini yenisine güncelledi (eskisini silip yenisini oluşturarak)
Ne olacak
TF'yi birkaç kez değiştirdi ve metin etiketi kayboldu. (Önce OnInit çalıştığı ve ardından DeInit - bu etiketi kaldırdığı için)
Sonra TF'yi birkaç kez daha değiştirdiler ve ortaya çıktılar.
Bu yanlış.
bunlar grafik nesnelerse, sohbete aittirler ve bu sohbette çalışan herhangi bir program tarafından kullanılabilirler.
bunlar grafik nesnelerse, sohbete aittirler ve bu sohbette çalışan herhangi bir program tarafından kullanılabilirler.
Peki bu sorun nasıl çözülebilir? (Bunu yapan var mı???)
Ya da olduğu gibi kabul edin. Hesaplamaları hızlandırmak için komutları sırayla değil de yürütmek mümkündür.
Belgelerle çelişen nedir
Expert Advisor'ın eklendiği çizelgenin sembolü veya zaman çerçevesi değiştirilirken Expert Advisor'ın yükü boşaltılmaz veya yüklenmez . nerede
art arda
işleyiciler OnDeinit() eski sembol/zaman çerçevesinde ve OnInit() yeni sembol/zaman çerçevesinde (varsa) çağrılır
Peki bu sorun nasıl çözülebilir? (Bunu yapan var mı???)
Bu konunun yazarına katılıyorum. Soru aslında boşta değil. Ve çok spesifik.
Bu özelliği uzun zaman önce keşfettim. Bu konunun yazarınınkine kesinlikle benzer bir örnekle Haziran 2016'da hizmet masasıyla iletişime geçtim. Yoksayıldı - açık konu hala asılı:
Tabii ki, teflerle, TF'yi değiştirirken göstergedeki parametrelerin transferini yaptım, üzerinde çok zaman harcadım. Ancak teflerle basit bir iş yapmak istemezsiniz.
Tabii ki, çoklu iş parçacığının çok gerekli ve çok karmaşık bir şey olduğunu anlıyorum ve senkronizasyon ile her şey o kadar basit değil.Ancak geliştiriciler, lütfen değiştirirken yeniden başlatılmayan özel türdeki göstergelerde global değişkenler oluşturma yeteneğini uygulayın. zaman aralığı. Uzman Danışmanlarda, TF değiştirilirken yeniden başlatma yoktur, ancak göstergede gerçekleşir. Göstergelerdeki bazı değişkenleri ve dizileri yeniden başlatmamak mümkün olsaydı, OnInit ve OnDeinit'in senkronizasyonu konusu ortaya çıkmaz ve programcılar için yeni ilginç olasılıklar açılırdı. Değişkenlerin yeniden başlatılamaması olasılığının varlığının bir şekilde programların güvenliğini etkileyeceğini düşünmüyorum.
Bu ne için ?
Evet, birçok durum.
Örneğin:
-Gösterge başlatıldığında, zaman dilimlerine bağlı olmayan değişkenler, indeks dizileri, veri dizileri hesaplamalarım var ve bunlar oldukça büyük ve uzun olabilir. Soru, TF'yi değiştirirken bunu neden her zaman yapmalıyım?
- veya gösterge parametrelerini parametreler penceresinden değil, kolaylık ve netlik için doğrudan fare ile grafikten değiştiririm ( bu göstergeyi , bunun teflerle uygulandığı bir örnek olarak görebilir ve kullanabilirsiniz). Ve böylece TF'yi her değiştirdiğinizde ayarlar yanlış gitmez.
Bu sorun 2 parmak gibi çözüldü...
OnDeinit'te nesneyi silmeden önce başlatmadan arındırma nedeninin koşulunu ayarlamak gerekir... Dönem değişikliği DEĞİLSE, nesneyi silin. VE HERŞEY...
Bu neden kodunu (REASON_CHARTCHANGE) sonuna kadar denedim ve kullandım. Ve tüm değişkenler yeniden orijinal durumlarına sıfırlanırsa ve OnDeinit, yeni bir TF'nin OnInit'inden sonra çalıştırılabilirse, bunun anlamı nedir?

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Merhaba !
Böyle bir sorunla karşılaşan
Bir gösterge veya Uzman Danışman yazılmıştır.
Birkaç Init() ve DeInit() işlevi vardır.
TF'yi (zaman çerçevesi) değiştirirken bu işlevlerin yürütme sırası nedir ???
Bir gösterge başlatırken veya eklerken Init()' in çalışması gerektiğini anlıyorum.
Grafikten kaldırıldığında DeInit() çalışmalıdır.
TF'yi değiştirirken, önce mevcut TF'den DeInit() çalışacak ve ardından yeni TF'nin Init() çalışması gerekir.
Ancak, her zaman bu sırayla yürütülmez, bu da bir program yazmanın mantığını büyük ölçüde bozar.
Gösterge ve günlüklerin bir örneği eklendi.
Bana birinin bu sorunu çözdüğünü veya sadece puan verdiğini söyle !!!