Göstergelerde OnDeinit - sayfa 5

 
mql5 :
Tekrar açıklamaya çalışayım:
  1. Terminal, son başlatmadan X kez başlatıldı
  2. Eksik bir geçmişin indirilmesi başlatıldı (terminal X dakika boyunca boşta kaldı)
  3. Göstergenin OnCalculate özelliği mevcut geçmiş prevtime= bilinen son geçmiş zaman için çağrılır, gösterge arabellek boyutu N çubuktur
  4. Geçmiş indirilirken sunucudan bir onay işareti geliyor
  5. Göstergenin OnCalculate çağrılır, burada Time[0] onay zamanıdır, gösterge bunu önceki zaman olarak hatırlar, gösterge arabelleğinin boyutu N+1 çubuktur (geçmişte N ve N+1 çubuklar arasında bir boşluk vardır)
  6. Geçmişi devam ettirdikten sonra, göstergenin OnCalculate tekrar çağrılır, ancak bu sefer, geçmişte delik yoktur, ancak prevtime, Time[0] ile aynı tarihe sahiptir - yeni çubuk yoktur (sırasıyla, sıfırlanması yoktur) göstergedeki arabellekler), gösterge arabelleğinin boyutu çubukların N +X/Zaman Çerçevesi iken ve IndBuffer[0] 5. adımdakiyle aynı değil



Prevtime'ın bununla ne ilgisi var?

Neden işe yaramadığını soruyorum.

 /////////////////////////////////////
void OnDeinit ( const int reason)
{
 ArrayInitialize (body_up, EMPTY_VALUE );
ArrayInitialize (body_down, EMPTY_VALUE );
ArrayInitialize (shadow_up, EMPTY_VALUE );
ArrayInitialize (shadow_down, EMPTY_VALUE );
   ArrayInitialize (yell_body_up, EMPTY_VALUE );
ArrayInitialize (yell_body_down, EMPTY_VALUE );
ArrayInitialize (yell_shadow_up, EMPTY_VALUE );
ArrayInitialize (yell_shadow_down, EMPTY_VALUE );


}
 
eevviill :

Prevtime'ın bununla ne ilgisi var?

Neden işe yaramadığını soruyorum.

Neyin işe yaramadığını nereden biliyorsun? Nasıl kontrol edersiniz?

Ve göstergeyi boşaltmadan önce gösterge arabellekleri neden başlatılmalıdır? Zaten boşaltıyor.

Tüm gösterge değerleri tamamen yeniden hesaplandığında gösterge arabellekleri başlatılmalıdır :

 int OnCalculate (..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1 >)
   {
       ArrayInitialize (...);
   }
   ...
}
 
eevviill :

Burada. Bunu yapmak için sıfır arabellek yapıyorum. Bunu yapamazsınız demişler internette.

tasrih etmek istiyorum. Ama orada da çalışmıyor. Niye ya?

Ve init(), deinit()'in bununla ne ilgisi var. Operasyon tamamen farklı bir yerde gereklidir. Tekrarlıyorum. Hesaplamadan sonra geçmiş yüklendi .

Çalışan bir sürüm yaptı.

Dosyalar:
 
Scriptong :

Neyin işe yaramadığını nereden biliyorsun? Nasıl kontrol edersiniz?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin :

Ve init(), deinit()'in bununla ne ilgisi var. Operasyon tamamen farklı bir yerde gereklidir. Tekrarlıyorum. Hesaplamadan sonra geçmiş yüklendi.

Çalışan bir sürüm yaptı.

Tavsiyen üzerine ilk andan itibaren doğru olanı yaptım.

Dizilerin sıfırlanmasının deinite'ta neden çalışmadığını merak ediyorum?

 
eevviill :
https://forum.mql4.com/ru/65066/page2#1015138

OnCalculate'de çalışan koda bir link verdiniz. DeInit'te başlatmanın çalışmadığını nereden bildiğinizi sordum. Her ihtimale karşı, gösterge kodundaki hiçbir şeyin OnDeinit()'den sonra çalışmadığını açıklığa kavuşturmama izin verin (ne OnInit() ne de OnCalculate()). Böylece, dizilerin sıfırlanması gerçeğini yalnızca OnDeinit()'in kendisinde kontrol etmek mümkündür.

 
Scriptong :

OnCalculate'de çalışan koda bir link verdiniz. DeInit'te başlatmanın çalışmadığını nereden bildiğinizi sordum. Her ihtimale karşı, gösterge kodundaki hiçbir şeyin OnDeinit()'den sonra çalışmadığını açıklığa kavuşturmama izin verin (ne OnInit() ne de OnCalculate()). Böylece, dizilerin sıfırlanması gerçeğini yalnızca OnDeinit()'in kendisinde kontrol etmek mümkündür.

link verdim

İşlem Tabloyu açtı - M1 göstergesini ekledi - terminali kapattı - birkaç dakika içinde açtı. Ekran görüntülerinde sonuç.

Bu şekilde kontrol ediyorum.

 
eevviill :

Tavsiyen üzerine ilk andan itibaren doğru olanı yaptım.

Dizilerin sıfırlanmasının deinit'te neden çalışmadığını merak ediyorum?

Yoksa terminal kapalıyken deinit çalışmıyor mu?
 
eevviill :
Yoksa terminali kapatırken deinit çalışmıyor mu?
Çalışır, ancak gösterge arabelleklerini temizlemenin bir anlamı yoktur - kaydedilmezler.
 
mql5 :
Çalışır, ancak gösterge arabelleklerini temizlemenin bir anlamı yoktur - kaydedilmezler.

Niye ya?

0 ile doldurulmuş bir arabelleğin değeri neden kaydedilir, ancak sıfırlama kaydedilmez?