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

 
Nikolai Semko :
Tabii ki kod için teşekkürler. Yalnızca Uzman Danışmanlarla ve bu nedenle her şey yolundadır, çünkü TF değiştirilirken değişkenler yeniden başlatılmaz, göstergelerde bu gerçekleşir . Gerçekten tavsiye vermek istiyorsanız , lütfen daha az aceleyle "koşun".

Nikolai, konunun üzerinden geçtim ve hatta ilk yazıyı yazarken bile. Aynı zamanda, TF'yi değiştirme durumunda danışmanın davranışı hakkında bir tartışma bulamadım, Evet - konu esas olarak göstergelerle ilgilidir, ancak yazar yazısında " Bir gösterge veya danışman yazılmıştır. "

Kontrol ettiğim bir örnek verdi ve işe yarıyor - bir danışman çerçevesinde. Beni dikkatsizliğim için kınıyorsun, sonra konuyu tekrar okumam için gönderiyorsun, sonra neyin mantıklı olup olmadığını tartışıyorsun. Ayrıca ilk sayfayı kendiniz okuyun.

orada hiç net değil - yazınızda açıkça yazılmamış olanlar da dahil olmak üzere bir danışman veya gösterge hakkında - bunun bir gösterge ile ilgili olduğu.

YAYINIZDAN ÖRNEK:

Nikolay Semko :
Ve HER ŞEY nedir!?
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?

Söylenenlerden, değişkenlerin göstergedeki ilk durumlarına ayarlandığı açık mı?

Ve uzmanda kolayca uygulanır. Gönderinizi okuyan biri, aynı saçmalığın bir Uzman Danışmanda da olduğunu düşünebilir.

----

Bu sorunun cevabı! " zaman dilimlerini değiştirirken, değişkenler göstergelerdeyken yeniden başlatılmaz, ."

Andrey Dik :
değişkenlerin değerlerini bir yerde saklayabilirsiniz, örneğin globallerde, ...

VEYA DİSK'E DOSYA VE GÖSTERGE YENİDEN BAŞLATILMASINDAN sonra, OnInit'te okuyun ve geri yükleyin.

------------

Yalnızca bir gösterge için özel olarak zaman dilimlerini değiştirme sorunuyla ilgileniyorsanız, bu, benim de dahil olmak üzere başkalarının bir danışman için zaman dilimlerini değiştirme seçeneğiyle ilgilenmediği anlamına gelmez.

Yardım tavsiyesi, göstergeyle, ne yazık ki yapamam çünkü. Pratikte nasıl uygulanacağını bilmiyorum ama önerilen çözümleri ilgiyle izleyeceğim.

En azından geliştiricilerin bu konuyu okuduğunu anladım ve hatta 1580'de bile bir şeyleri düzelttiler. Belki bir çözüm üretirler.

 
Slawa :

Yazdıklarımı defalarca okumadın mı?

Göstergelerde yok. En başından beri ilk beşte hiçbir şey yoktu . Göstergenin tamamen yeni bir kopyası, ortaya çıkan tüm sonuçlarla yüklendiğinden


Dürüstçe cevap verdiğin için teşekkür ederim.

Her zaman ilk beşte hiçbir şey yoktu. Belki de düzeltmenin zamanı gelmiştir?

Doğru sıralamayı yapmak gerçekten bu kadar zor mu? Başlatma süresindeki tasarruf, daha sonra her onayda sonsuz kontrollere dönüşür .

MT5'teki OOP paradigmasına zaten alışkınım ve tırmıkın nerede olduğunu ve bu tırmığı atlamak için koltuk değneklerini nasıl takacağımı biliyorum, tabii ki yeni bir tırmık yerleştirilmediği sürece. Bir nesneyi silmenin ve yeni bir tane oluşturmanın birkaç parametreyi değiştirmekten daha kolay olduğu ortaya çıktı.

Benzetme yapacak olursak, bir arabada, yağı değiştirip yola devam etmek yerine, arabayı atıp yenisini yapmak daha iyidir.

bana bir karikatürü hatırlattı


Video indir
 

Lütfen bana söyle

diye bir program yazmaya karar verdim.

1. Init'te 8 satır görüntüler

2. DeInit'te 8 satır daha görüntüler

Test cihazında başlatıldı (2 gün sürdü ve alındı)

Bazı nedenlerden dolayı, günlüğe bazı satırları seçici olarak çıkarmaz.

Hızlanma için aynı mı ???


-------------------------------------------------- -------------------------------------------

LOGLARDA TÜM BİLGİLER TÜM BİLGİLERE SAHİP OLDUĞU İÇİN SORU KAPATILMIŞTIR

-------------------------------------------------- -------------------------------------------

Belgelere ekle

1. Günlük, programcının beklediği tüm bilgileri göstermiyor

-------- TAM GÜNLÜĞÜ GÖRMEK ZORUNLUDUR !!!

Dosyalar:
Log2.txt  2 kb
ERROR_2.mq5  2 kb
 

Ara sonucu özetlemek ve yukarıdakilerin tümünü özetlemek istiyorum. Öyleyse, MT5 build 1580'in (mevcut yapı 1571) piyasaya sürülmesinden önce elimizde ne var.

Göstergelerde, Uzman Danışmanların aksine, " önceki kopya hakkında hiçbir şey bilmeyen göstergenin yeni bir kopyasının oluşturulması" nedeniyle zaman dilimleri değiştirilirken, tüm değişkenler yeniden başlatılır, buna ek olarak OnDeinit'in yürütme sırası TF'nin "yukarı" veya "aşağı" değiştirilmesine bakılmaksızın yeni zaman çerçevesinin eski zaman çerçevesi ve OnInit'i tahmin edilemez (şu ana kadar yapılan uygulama Slava tarafından söylenenlerle çelişir). Bu bağlamda, programcılar bir takım problemler ve belirsizliklerle karşı karşıya kalmaktadır. Örneğin:
- OnInit'te bir şey için gösterge oluştururken bu konuyu okumamış bir programcı, bir nesne yaratır ve bu ada sahip bir nesnenin varlığı için oluşturmadan önce mantıksal olarak kontrol eder. Ayrıca, mantıklı olan, OnDeinit'te bu nesnenin kaldırılmasını öngörür. TF'yi değiştirirken, önce yeni TF'nin OnInit'i yürütülürse, nesnenin varlığı kontrol edilir, zaten var olduğu ve oluşturulmadığı ortaya çıkar, çünkü zaten oluşturuldu. Bundan sonra, eski TF'nin OnDeinit'i gerçekleştirilir ve nesne silinir. Bir sersemlik içinde programcı. Nesnem nerede, neden silindi? Bir dahaki sefere TF'yi değiştirirken, OnInit ve OnDeinit'in yürütme sırası farklı olduğunda, nesne silinmediğinde daha da büyük bir şaşkınlığa düşecektir. Ya silinir, silinmez.... Uzun araştırmalardan sonra Servis Masası'na bir itiraz başlayacak, forumda eskisi ile ilgili yeni konular.
Bu sadece en basit durum. Başkaları da olacak. bu özellik belgelerde açıklanmamıştır ve bu özelliği yalnızca forumda okuyabilirsiniz.
Böyle bir şey oluşturmak ve TF'yi değiştirirken göstergenin eski kopyasından bazı parametreleri yenisine geçirmek istiyorsanız, başlatma ve başlatma işlemlerinin sırasının tahmin edilemezliği nedeniyle OnDeinit bunun için kullanılamaz. Benim düşünceme göre, bu durumda en iyi çözüm, aşağıdaki araçları kullanarak kaynaklar aracılığıyla veri (parametreler) transferini kullanmaktır:
ResourceCreate bir dizi piksele ve ResourceReadImage 'a dayalıdır, ancak bu oldukça hantaldır ve icabına bakmanız gerekecektir. çakışmayan kaynaklar bir pencerede birkaç aynı göstergeyi kullanırsanız ve başka bir kopya için aktarılması gereken veriler her değiştiğinde, bunları yeniden başlatılmamış bir kaynakta saklamak gerekir, çünkü OnDeinit kullanmanın yararsızlığı nedeniyle program için olası bir zaman dilimi değişikliğinin zamanı bilinmemektedir. Bunu uzun zaman önce uyguladım (örneğin, bu üründe ), bu yüzden neden bahsettiğimi biliyorum. Dosyalar ve genel uçbirim değişkenleri aracılığıyla veri aktarımı uygulamak daha az başarılı bir çözümdür (IMHO).

Yeni yapı 1580'in piyasaya sürülmesiyle her şey Slava'nın dediği gibi olacaksa, bu görevi basitleştirmeyecektir, çünkü. göstergenin eski kopyasının sıfırlanması, yeni kopyanın başlatılmasından sonra gerçekleşir. Ama bir belirsizlik olmayacak.

Geliştiricilerin yine de bir şeyi düzeltmeye çalıştıkları için bu soruna dikkat etmelerini ummaya değer.
Yeni bir yapı bekliyoruz.

 

Mevcut TF'ye referansla tüm grafik nesnelerini çağırırız. Başlatmada oluştururuz, başlatmadan kaldırmada sileriz. Göstergenin çalışması sırasında gerektiği gibi değiştiririz.

Burada sorunlar var mı? Sorun yok. Göstergenin fırlatıldığı andan boşaltıldığı ana kadar her şey değerlidir.

TF'yi değiştirme. Hangi yöne, yukarı veya aşağı fark etmez. Göstergenin bir kopyası kullanıma sunuldu. Bu, göstergenin bu TF'de ilk kez başlatıldığı gerçeğine eşdeğerdir.

Burada sorunlar var mı? Sorun yok. Eski kopya, nesnelerini silmekle ilgilenecek ve yeni kopya, mevcut TF'ye göre onları çağırarak yenilerini yaratacaktır.

Neyi yanlış yapıyorum? Neden sorun görmüyorum?

 
Andrey Dik :

Mevcut TF'ye referansla tüm grafik nesnelerini çağırırız. Başlatmada oluştururuz, başlatmadan kaldırmada sileriz. Göstergenin çalışması sırasında gerektiği gibi değiştiririz.

Burada sorunlar var mı? Sorun yok. Göstergenin çalıştırıldığı andan boşaltıldığı ana kadar her şey değerlidir.

TF'yi değiştirme. Hangi yöne, yukarı veya aşağı fark etmez. Göstergenin bir kopyası kullanıma sunuldu. Bu, göstergenin bu TF'de ilk kez başlatıldığı gerçeğine eşdeğerdir.

Burada sorunlar var mı? Sorun yok. Eski kopya, nesnelerini silmekle ilgilenecek ve yeni kopya, mevcut TF'ye göre onları çağırarak yenilerini yaratacaktır.

Neyi yanlış yapıyorum? Neden sorun görmüyorum?

Bu belgelenmemiş özelliği biliyorsanız ve yalnızca en basit durumla - bir grafikle - ilgileniyorsanız sorun değil. nesneler. Bu özelliği bilmeyenlerden bahsediyorum, forumdaki bu konunun programcıların çok küçük bir kısmı tarafından okunacağını düşünüyorum ve tüm nüansları öğrenmek için zaman ayırdıkları için üzülüyorum. Farkına varmadan önce o durumdaydım.
 
Nikolai Semko :
Bu belgelenmemiş özelliği biliyorsanız ve yalnızca en basit durumla - bir grafikle - ilgileniyorsanız sorun değil. nesneler. Bu özelliği bilmeyenlerden bahsediyorum, forumdaki bu konunun programcıların çok küçük bir kısmı tarafından okunacağını düşünüyorum ve tüm nüansları öğrenmek için zaman ayırdıkları için üzülüyorum. Farkına varmadan önce o durumdaydım.

Bu başlıkta açıklanan nüanslar gibi nüansları hiç duymadım, ancak burada tartışılan sorunlarla hiç karşılaşmadım.

göstergenin başka bir kopyasına bir şey aktarmak istiyorsanız, bunu deinit'te yapmanız gerekmez - iletilen verileri göstergenin tüm çalışması boyunca, örneğin Ch'de güncel tutun. terminal değişkenleri, daha sonra göstergeyi boşaltma nedenine bakılmaksızın (TF'nin değişmesi, anne fişi prizden çekti "herkes uyurken çalmasın diye", deprem, dünyanın manyetik kutuplarının değişmesi vb. .) göstergenin bir sonraki lansmanı (TF'yi değiştirirken bir kopya dahil) bu büyülü veri kaynağından gerekli tüm bilgileri alacaktır (küresel ölçekte şanssız durumlar için, verileri bir bulut sürücüsünde saklayabilirsiniz).

Arkadaşlar sorun yok, sorun yok.

 
Andrey Dik :

Mevcut TF'ye referansla tüm grafik nesnelerini çağırırız. Başlatmada oluştururuz, başlatmadan kaldırmada sileriz. Göstergenin çalışması sırasında gerektiği gibi değiştiririz.

Burada sorunlar var mı? Sorun yok. Göstergenin çalıştırıldığı andan boşaltıldığı ana kadar her şey değerlidir.

TF'yi değiştirme. Hangi yöne, yukarı veya aşağı fark etmez. Göstergenin bir kopyası başladı. Bu, göstergenin bu TF'de ilk kez başlatıldığı gerçeğine eşdeğerdir.

Burada sorunlar var mı? Sorun yok.

Bir sorun var: Farklı göstergelerden nesnelerin eşzamanlı varlığı. "Üzgünüz, geçici bir teknik sorun yaşıyoruz" (ancak eski göstergenin DeInit'i gerçekleştiğinde birkaç saniye içinde düzeltilecektir)

Eski kopya, nesnelerini silmekle ilgilenecek ve yeni kopya, mevcut TF'ye göre onları çağırarak yenilerini yaratacaktır.

Neyi yanlış yapıyorum? Neden sorun görmüyorum?

Dar görüş. Burada görünmüyor. Ufkunuzu biraz genişletin. İlk sorunlar, dosyalarla çalışırken zaten ortaya çıkıyor, çünkü önceki göstergenin dosyaya veri atıp atmadığı henüz belli değil. Terminalin global değişkenlerinde bazı bayraklar bulmanız gerekecek. Yani, senkronizasyonunuzu yapın (göstergenin yeni kopyası, eski kopyanın birikmiş verileri sıfırlamasını beklemek zorunda kalacaktır). Bu arada, buradaki sorun, böyle bir senkronizasyonun yalnızca OnCalculate()'de mümkün olmasıdır. Ama ya geçiş hafta sonu olursa? Yeni kopya Pazartesiye kadar başlamayacak mı? Ve evet, bir zamanlayıcıya koyabilirsin! Dosyalarla çalışırken onsuz neredeyiz (serçeleri bir toptan mükemmel bir şekilde vurabileceğinizi duydum; bir sapan, aralarında gergin bir şekilde sigara içiyor)?

Bunlar basit problemler. Çok iş parçacıklı bir DLL ile çalışırken bu mantığı dikkate almaya çalışın. İşte eğlencenin planlandığı yer ... Eh, hiçbir şey, daha güçlü olacağız)))

 
Andrey Dik :

Bu başlıkta açıklanan nüanslar gibi nüansları hiç duymadım, ancak burada tartışılan sorunlarla hiç karşılaşmadım.

göstergenin başka bir kopyasına bir şey aktarmak istiyorsanız, bunu deinit'te yapmanız gerekmez - iletilen verileri göstergenin tüm çalışması boyunca, örneğin Ch'de güncel tutun. terminal değişkenleri, daha sonra göstergeyi boşaltma nedenine bakılmaksızın (TF'nin değişmesi, anne fişi prizden çekti "herkes uyurken çalmasın diye", deprem, dünyanın manyetik kutuplarının değişmesi vb. .) göstergenin bir sonraki lansmanı (TF'yi değiştirirken bir kopya dahil) bu büyülü veri kaynağından gerekli tüm bilgileri alacaktır (küresel ölçekte şanssız durumlar için, verileri bir bulut sürücüsünde saklayabilirsiniz).

Arkadaşlar sorun yok, sorun yok.

Yarın cevap vereceğim. TAMAM? Sürüş kolaydır.
 
Ihor Herasko :

Bir sorun var: Farklı göstergelerden nesnelerin eşzamanlı varlığı. "Üzgünüz, geçici bir teknik sorun yaşıyoruz" (ancak eski göstergenin DeInit'i gerçekleştiğinde birkaç saniye içinde düzeltilecektir)

Dar görüş. Burada görünmüyor. Ufkunuzu biraz genişletin. İlk sorunlar, dosyalarla çalışırken zaten ortaya çıkıyor, çünkü önceki göstergenin dosyaya veri atıp atmadığı henüz belli değil. Terminalin global değişkenlerinde bazı bayraklar bulmanız gerekecek. Yani, senkronizasyonunuzu yapın (göstergenin yeni kopyası, eski kopyanın birikmiş verileri sıfırlamasını beklemek zorunda kalacaktır). Bu arada, buradaki sorun, böyle bir senkronizasyonun yalnızca OnCalculate()'de mümkün olmasıdır. Ama ya geçiş hafta sonu olursa? Yeni kopya Pazartesi'ye kadar başlamayacak mı? Ve evet, bir zamanlayıcıya koyabilirsin! Dosyalarla çalışırken onsuz neredeyiz (serçeleri bir toptan mükemmel bir şekilde vurabileceğinizi duydum; bir sapan, aralarında gergin bir şekilde sigara içiyor)?

Bunlar basit problemler. Çok iş parçacıklı bir DLL ile çalışırken bu mantığı dikkate almaya çalışın. İşte eğlencenin planlandığı yer ... Eh, hiçbir şey, daha güçlü olacağız)))

Açıkça yazdım - bir kopyaya aktarmak için gerekli verileri her zaman güncel tutun, bunu sadece bir init ile yapmanıza gerek yok, her zaman güncel tutun.

Diğer tüm durumlar eğrilik nedeniyle uydurulmuştur.

Sorun aynı göstergenin aynı anda başlatılmasıyla ilgiliyse, her seferinde TF'ye göre benzersiz nesneler oluşturun ve zaten nesneler varsa, ada 1 ekleyin.

Hiç kimse, terminalin göstergelerle mevcut çalışması nedeniyle sorunların üstesinden gelinemediği tek bir özel durumdan bahsetmedi. Ve bu problemler göstergelerle yanlış çalışmadan kaynaklanmaktadır.

Genel olarak, çoğu, gördüğüm gibi, bir nedenden dolayı 3 tür program olduğunu anlamıyor (yakında 4. olacak).

Neden: