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

 
Andrey Dik :

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.


Andrey, şaka mı yapıyorsun yoksa göstergelerdeki değişkenlerde ve dizilerde saklanan tüm mevcut verilerinizin, gösterge kopyasının tüm kayıplarıyla imha edilmesi nedeniyle zaman dilimlerini değiştirirken alakasız hale geldiğini gerçekten anlamıyorsunuz. Uzmanlarda, elbette, her şey basittir, çünkü. yeniden başlatma yoktur.
 
Nikolai Semko :

Andrey, şaka mı yapıyorsun yoksa göstergelerdeki değişkenlerde ve dizilerde saklanan tüm mevcut verilerinizin, gösterge kopyasının tüm kayıplarıyla imha edilmesi nedeniyle zaman dilimlerini değiştirirken alakasız hale geldiğini gerçekten anlamıyorsunuz. Uzmanlarda, elbette, her şey basittir, çünkü. yeniden başlatma yoktur.

Hayır, şaka yapmıyorum.

Ne dediğimi anlamıyorsun.

Örneğin, göstergenin başka bir kopyasına aktarılması gereken belirli bir veri kümesi vardır (grafiğe atılan başka bir gösterge veya zaman dilimlerini değiştirirken göstergenin yeni bir kopyası olması fark etmez). Gösterge kendisi için bir şey düşünür, bir şeyi her hesapladığında ve aynı zamanda bu şeyi diğer göstergelerle paylaşmaya yöneliktir, bu göstergenin güncellenmesi gerekir. Her zaman. Bu veritabanı, veri miktarına ve gerekli veri aktarım hızına bağlı olarak farklı konumlarda saklanabilir. Bu verilerin güncellenmesi, yalnızca deintit sırasında değil, bu veriler değiştirildikten sonra gerektiğinde yapılmalıdır. Bütün mesele bu. Karmaşık bir şey yok. Göstergenin yerel değişkenlerinde veri depolama sorunu yoktur, bu veri her yeniden hesaplandığında veriyi bırakmak/güncellemekle ilgilidir.

Ve grafik nesnelerle oldukça basittir. çiğnemeye bile gerek yok.

 
Nikolai Semko :

Uzmanlarda, elbette, her şey basittir, çünkü. yeniden başlatma yoktur.
Expert Advisors'da "yeniden başlatma" vardır, ancak tüm yerel değişkenler kaydedilir, ancak yukarıda başka bir şey hakkında yazdım - gerekirse kaydetme, yerel verileri yalnızca tanımlandıklarında değil, her değiştiğinde harici depolamaya başka bir programa aktarma hakkında.
 
Andrey Dik :

Hayır, şaka yapmıyorum.

Ne dediğimi anlamıyorsun.

Örneğin, göstergenin başka bir kopyasına aktarılması gereken belirli bir veri kümesi vardır (grafiğe atılan başka bir gösterge veya zaman dilimlerini değiştirirken göstergenin yeni bir kopyası olması fark etmez). Gösterge kendisi için bir şey düşünür, bir şeyi her hesapladığında ve aynı zamanda bu şeyi diğer göstergelerle paylaşmaya yöneliktir, bu göstergenin güncellenmesi gerekir. Her zaman. Bu veritabanı, veri miktarına ve gerekli veri aktarım hızına bağlı olarak farklı konumlarda saklanabilir. Bu verilerin güncellenmesi, yalnızca deintit sırasında değil, bu veriler değiştirildikten sonra gerektiğinde yapılmalıdır. Bütün mesele bu. Karmaşık bir şey yok. Göstergenin yerel değişkenlerinde veri depolama sorunu yoktur, bu veri her yeniden hesaplandığında veriyi bırakmak/güncellemekle ilgilidir.

Ve grafik nesnelerle oldukça basittir. çiğnenmesine bile gerek yok.


Karmaşık bir şey hakkında çok tartışmalı bir soru. Bu üründe uyguladığımı basit bir fare örneğinde gerçekten tekrarlamaya çalışın. Farede, fare ile süreyi değiştirirsiniz ve ardından zaman çerçevesini değiştirdiğinizde, değişikliklerin kaydedilmesi gerekir ve pencerede bu tür birkaç göstergeyi kullanmak mümkündür. Ve karmaşık hiçbir şey hakkında anlayacaksınız. Ve bir diziyi geçmeniz gerekiyorsa. Ve bunun ne kadar "basit" olduğunu anlayacaksınız. Belki de daha önce uygulamamış olsaydım, kendim de öyle düşünürdüm.
 
Nikolai Semko :

Karmaşık bir şey hakkında çok tartışmalı bir soru. Bu üründe uyguladığımı basit bir fare örneğinde gerçekten tekrarlamaya çalışın. Farede, fare ile süreyi değiştirirsiniz ve ardından zaman çerçevesini değiştirdiğinizde, değişikliklerin kaydedilmesi gerekir ve pencerede bu tür birkaç göstergeyi kullanmak mümkündür. Ve karmaşık hiçbir şey hakkında anlayacaksınız. Ve bir diziyi geçmeniz gerekiyorsa. Ve ne kadar "basit" olduğunu anlayacaksın

Kısa süre önce EA'larda tüm değişkenlerin yeniden başlatma sırasında kaydedildiğini öğrendim, yani. danışmanları da aynı şekilde yazdı. göstergelerin yanı sıra, programın diğer programlar hakkında hiçbir şey bilmediğini ima eden göstergelerin yanı sıra, yalnızca onların başlangıcı ve sonu olduğu için, programın diğer insanların başlangıcını ve sınırını bilmemesi gerekir.

Bu nedenle, yüklenip yeniden başlatılan bir programın zaman ve başlangıç ve tanım sırasını asla ortaya koymadım, bu kodun değişebileceği gerçeğine, mümkünse asla güvenmezdim (1580'de değişti). Belgelenmemiş hatalara ve platform geleceklerine güveniyorsanız, bu gelecekte ters tepebilir.

Uygulamamda, kullanıcı eylemlerine bağlı olarak görselleştirmede dinamik bir değişiklik olan ürünler de var, olaylardan dosya alışverişine kadar her şeyi kullanıyorum. Aynı zamanda, gösterge tablosunda kural olarak 1'den çok daha fazla gösterge vardır, çünkü 5'te sınırsız sayıda gösterge arabelleği vardır ve başlangıçta parametre olarak arabellekler oluşturabilirsiniz. Onlar. biz yaratıcı insanlarız, sorunlarımızı çözmek için esnek bir yaklaşıma sahip olmamız ve aynı zamanda 3 tür programın özelliklerini aklımızda tutmamız gerekiyor ve platform geliştiricileri, küçük zorluklardan daha önemli olan diğer sorunlarla ilgileniyorlar. platformun küresel görevleri.

Platformun gerçekten çok önemli eksiklikleri var, çok konuşulmuyor ya da hiç konuşulmuyor, bu, "initlerin ve tanrıların düzeni" gibi çok zor bir problemden çok daha önemli.

 
Slawa :

Zaman çerçevesi geçişi azalırsa, önce alt (yeni) zaman diliminde OnInit, ardından daha yüksek (eski) zaman diliminde OnDeinit.

Anahtar yükselirse, bunun tersi doğrudur. İlk olarak, alt (eski) zaman diliminde OnDeinit ve ardından daha yüksek (yeni) zaman diliminde OnInit.

Burada önbelleklerin alt zaman diliminden eskisine doğru işlendiğini unutmamanız gerekir.

Bu sadece korkunç. Uygulama programcıları bu tür sistem şeylerini düşünmemelidir. Platform, önbellekleri dahili olarak istediği gibi işleyebilir, ancak MQL düzeyinde, olası yan etkiler olmaksızın her şeyi şeffaf bir şekilde tek bir olay sözleşmesine getirmelidir. Sözde verimlilik konularına ve herkesin sorunu kendi başına atlamasına yönelik fırsatlara yapılan tüm atıflar basitçe savunulamaz. Hem verimli hem de rahat bir şekilde (genellikle bu tırmık üzerine basma olasılığını ortadan kaldırır) bir kez ve herkes için yapılabilir.
 
Stanislav Korotky :
Bu sadece korkunç. Uygulama programcıları bu tür sistem meselelerini düşünmemelidir . Platform, önbellekleri dahili olarak istediği gibi işleyebilir, ancak MQL düzeyinde, olası yan etkiler olmaksızın her şeyi şeffaf bir şekilde tek bir olay sözleşmesine getirmelidir. Sözde verimlilik konularına ve herkesin sorunu kendi başına atlamasına yönelik fırsatlara yapılan tüm atıflar basitçe savunulamaz. Hem verimli hem de rahat bir şekilde (genellikle bu tırmık üzerine basma olasılığını ortadan kaldırır) bir kez ve herkes için yapılabilir.

Bu doğru, yapmamalılar. Pekala, örneğin Total Commander'ı çalıştırın. Neden Microsoft'tan Windows'un op.memory'de TC kopyalarının "doğru" boşaltma/yükleme sırasına bakmasını talep ediyorsunuz? Bu bir işletim sistemi endişesi mi?

İşletim sisteminin endişesi, TC'nin diğer TC'lere müdahale etmemesi ve orada bellekte yaptıkları, dosya alışverişi veya daha samimi bir şey - bu onların işi, programları.

"Bence de!" (c) Mimino, 1977

 
Nikolai Semko :

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.


Belgelerde bu işleme özelliğinden bahsetmenin ZORUNLU olduğuna tamamen katılıyorum, aksi takdirde yeni gelen programcılar bununla karşılaşacak ve bir çözüm aramak için forumlara gelecekler. (Neden, terminal ve MQL için rıhtımlarda onlara hemen anlatabilirseniz)

Ayrıca, günlüğün neler olup bittiğinin tam resmini göstermediğini, sadece bir kısmını gösterdiğini belgelere ekleyin. Tam resim için tam günlüklere bakın.

Geri kalanı daha sonra...

 
Nikolai Semko :

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.

Bununla ilgili gerçekten bir sorun var, danışman zaman dilimlerini değiştirirken harika çalışıyor ve gösterge AYNI durumda tamamen farklı bir şekilde çalışıyor.

 
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.
Böyle bir önemsiz şey hakkında böyle gereksiz bir çatışmada zamanını harcamak yazık değil mi ???
Neden: