Hatalar, hatalar, sorular - sayfa 434

 

organik gübre
Haklısın. Bir hata yaptım.
Cevap için teşekkürler.

 
Silent :

MQL5 Referansında Yazım Hatası - Standart Kitaplık - Verileri düzenlemek için sınıflar - CArrayObj (sitede ve yardımda):

2. Bellek yönetim mekanizması devre dışı bırakılır.

Bu durumda, CArrayObj belleği boşaltmaktan sorumlu değildir.

düzeltildi, teşekkürler
 

Belgeler. Bölüm Statik Değişkenler .

" ...Statik değişkenler program çalıştırıldığı andan itibaren mevcuttur ve bir kez başlatılır OnInit() özel işlevini çağırmadan önce ... "

Danışman doğrulama kodu:

 void OnInit () {
   Print ( "OnInit() begin!" );

   static bool init = true ;
   if (init) {
     Print ( "Static initialized!" );
    init = false ;
  } 

   Print ( "OnInit() end!" );
}

Danışmanı çizelgeye "koy":

 2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)         OnInit () begin!
2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)        Static initialized!
2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)         OnInit () end!

EA'yı grafikten silmeden, grafik periyodunu değiştirin:

 2011.06 . 27 20 : 11 : 00      Тест (EURUSD,M30)       OnInit () begin!
2011.06 . 27 20 : 11 : 00      Тест (EURUSD,M30)       OnInit () end!

Böyle mi çalışmalı?

Aslında belgelerdeki bilgileri OnInit() işlevine yapılan herhangi bir çağrıda, bunun bir yeniden derlemeden mi, bir sembol değişikliğinden mi, yoksa başka bir şeyden mi kaynaklandığına bakılmaksızın, statik değişkenlerin zorunlu başlatılması olarak yorumladım ...

Görünüşe göre yanılmışım. Lütfen açıklığa kavuşturun: Bu kuralın istisnaları nelerdir?

 

Giriş parametrelerini değiştirirken - aynı "maydanoz".

Ancak hesabı değiştirdiğinizde işlem doğrudur - statik değişkenler yeniden başlatılır.

Uzman Danışmanı ( REASON_CHARTCHANGE ) silmeden grafik sembolünü nasıl değiştireceğimi merak ediyorum?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - Документация по MQL5
 
voix_kas :

Belgeler. Bölüm Statik Değişkenler .

" ...Statik değişkenler program çalıştırıldığı andan itibaren mevcuttur ve bir kez başlatılır OnInit() özel işlevini çağırmadan önce ... "

Danışman doğrulama kodu:

Danışmanı çizelgeye "koy":

EA'yı grafikten silmeden, grafik periyodunu değiştirin:

Böyle mi çalışmalı?

Evet, böyle çalışması gerekir.

Program (kodu) zaten bir kez yüklendi ve yalnızca sıcak yeniden başlatma (kodu boşaltmadan Deinit / Init) yapıyor. Bu durumda, geliştiricinin kendisi, ortamın doğru şekilde başlatılmasına dikkat etmelidir.

 
Renat :

Evet, böyle çalışması gerekir.

Program (kodu) zaten bir kez yüklendi ve yalnızca sıcak yeniden başlatma (kodu boşaltmadan Deinit / Init) yapıyor. Bu durumda, geliştiricinin kendisi, ortamın doğru şekilde başlatılmasına dikkat etmelidir.

İlk olarak, yorumunuz belgelerdeki tanımla açıkça çelişiyor: OnInit() çağrılmadan önce bir kez başlatılıyorlar. Daha sonra tanım, belgelerde açıkça belirtilmelidir: "...OnInit()'e yapılan ilk çağrıdan önce bir kez başlatılır".
İkinci olarak, yorumunuz, MT'nin görünüşe göre Uzman Danışmanı zorla sonlandırdığı ve tekrar geri yüklediği hesap değişikliği durumuyla açıkça çelişiyor.

OnInit () öğesine yapılan her (yalnızca ilk değil) çağrıyla statik değişkenlerin yeniden başlatılmasını zorlama ihtiyacına ilişkin temel soruyu değerlendirmeye/oylamaya sunmak mümkün müdür?

 

Sonuçta, eğlenceli.
Bir hevesle, OnDenit işlevinin bir tür yıkıcı olduğunu ve OnInit'in uzman bir kurucu olduğunu düşündüm.
Aslında, OnInit'in çoklu bir olay olduğu ortaya çıktı (bir Uzman Danışmanın ömrü içinde). O halde, Uzman Danışmanın işini tamamlamadığı biliniyorsa (örneğin, çizelge periyodunda bir değişiklik olması durumunda) neden OnDenit olayını açıkça oluşturduğu açık değil?

Ve başka bir soru.
Başlatmama nedeni REASON_CHARTCHANGE - Grafik sembolü veya nokta değiştirildi.
Grafik sembolünü üzerindeki Expert Advisor'ı silmeden nasıl değiştirebileceğinizi açıklar mısınız?

 
voix_kas :

Ve başka bir soru.
Başlatmama nedeni REASON_CHARTCHANGE - Grafik sembolü veya nokta değiştirildi.
Grafik sembolünü üzerindeki Expert Advisor'ı silmeden nasıl değiştirebileceğinizi açıklar mısınız?

ChartSetSymbolPeriod()
 
voix_kas :

Sonuçta, eğlenceli.
Bir hevesle, OnDenit işlevinin bir tür yıkıcı olduğunu ve OnInit'in uzman bir kurucu olduğunu düşündüm.
Aslında, OnInit'in çoklu bir olay olduğu ortaya çıktı (bir Uzman Danışmanın ömrü içinde). Uzman Danışmanın işini tamamlamadığı biliniyorsa (örneğin, grafik periyodunda bir değişiklik olması durumunda) neden OnDenit olayını açıkça oluşturduğu açık değil?

Ve başka bir soru.
Başlatmama nedeni REASON_CHARTCHANGE - Grafik sembolü veya nokta değiştirildi.
.Lütfen grafik sembolünü üzerindeki uzmanı silmeden nasıl değiştirebileceğinizi açıklar mısınız?

1. Tam olarak aynı şekilde, her şey MT4'te çağrıldı. Ve uzmanın işinin bitip bitmediği bilinmiyor (bu nedenle OnDeinit'teki parametreler düşürülür ve OnInit'in olası çalışmasının nedeni de kolayca bulunabilir).

2. Çok basit, terminal parametrelerinde, Uzman Danışmanın sembolü ve noktayı değiştirirken ticaret yapmasına izin verin.

Ardından piyasa incelemesinde başka bir sembol seçin ve fare ile grafiğin üzerine "bırakın".

Her halükarda, normal başlatma sırasında, sembol/dönem değiştirildikten sonra Expert Advisor "silinmez" (Renat "Sıcak yeniden başlatma" aşağıda yazdığı gibi olur) . Bunu basit bir düzeyde ele alırsak, uzmanın belirli terminal ayarlarıyla işlem yapmasına izin verilecektir.

Yedelkin :
ChartSetSymbolPeriod()
Ayrıca bir seçenek, ancak yazılım. :)
 
voix_kas :

İlk olarak, yorumunuz belgelerdeki tanımla açıkça çelişiyor: OnInit() çağrılmadan önce bir kez başlatılıyorlar. Daha sonra tanım, belgelerde açıkça belirtilmelidir: "...OnInit()'e yapılan ilk çağrıdan önce bir kez başlatılır".

Evet, belgelerde daha kesin yazılmalıdır.


İkinci olarak, yorumunuz, MT'nin görünüşe göre Uzman Danışmanı zorla sonlandırdığı ve tekrar geri yüklediği hesap değişikliği durumuyla açıkça çelişiyor.

Evet, hesabı değiştirirken, Expert Advisor açıkça bellekten tamamen kaldırılır ve soğuk bir yeniden başlatma gerçekleştirir. Bu kasıtlı olarak yaptığımız şeydi.


OnInit () öğesine yapılan her (yalnızca ilk değil) çağrıyla statik değişkenlerin yeniden başlatılmasını zorlama ihtiyacına ilişkin temel soruyu değerlendirmeye/oylamaya sunmak mümkün müdür?

Ne yazık ki hayır. Bu, yalnızca Expert Advisor'ın soğuk yeniden başlatılmasıyla çözülebilir.