Göstergelerde OnDeinit - sayfa 2

 
eevviill :

Hayır silmiyor. Terminali kapatıyorum.

Deinit'i Init'e sokarsanız, o da çalışmaz.

Yalnızca özel nesne silme işlevi yardımcı oldu.

iyi, eğer silmezse, kim bilir orada ne çağrıştırdın :)

 
keekkenen :

iyi, eğer silmezse, kim bilir orada ne çağrıştırdın :)

Mantıken. Ancak göstergeyi grafikten kaldırırsam, bölgeler kaldırılır. Terminal kapatıldığında, hayır. Yalnızca bölgeleri silmek için işlevinizi init'e sokarsanız (deinit'te aynı işlev).

Yani, deinit'in herkes için çalıştığını anlıyorum. Ve terminali kapatırken veya açarken ne zaman ateşlenmeli?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

  for(int i=ObjectsTotal()-1;i>=0;i--)

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill :

Mantıken. Ancak göstergeyi grafikten kaldırırsam, bölgeler kaldırılır. Terminal kapatıldığında, hayır. Yalnızca bölgeleri kaldırmak için işlevinizi init'e sokarsanız (deinit'te aynı işlev).

Yani, deinit'in herkes için çalıştığını anlıyorum. Ve terminali kapatırken veya açarken ne zaman ateşlenmeli?

evet, terminali kapattığınızda çalışır ..

belki uzun süredir oynayan bir tür mantığın var?

Göstergenin kapanma anında korkunç bir şey hesapladığı ve terminalin bir şekilde çarpık bir şekilde beklediği / veya her şeyi kesintiye uğrattığı, OnDeinit'in çalışmadığı anlamında mı?

görünüşe göre yardım masasına giden yol ..

 
keekkenen :

evet, terminali kapattığınızda çalışır ..

belki uzun süredir oynayan bir tür mantığın var?

Göstergenin kapanma anında korkunç bir şey hesapladığı ve terminalin bir şekilde çarpık bir şekilde beklediği / veya her şeyi kesintiye uğrattığı, OnDeinit'in çalışmadığı anlamında mı?

görünüşe göre yardım masasına giden yol ..

Peki, senin için işe yararsa, o zaman her şey yolunda demektir. kendime bakacağım.
 

Hiçbir şey değişmedi ve hiçbir şey eklenmedi.

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

Ve bu, kodda da kayıtlı olmama rağmen

 //////////////////////////////////////////////////////////////////
int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[],
                 const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[])
  {
     //new bar
if (Time[ 0 ] != prevtime) 
{
 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 );


prevtime = Time[ 0 ];
}

 

Geliştiriciler, sorunu çözecek misiniz?

İşte size bir gösterge. Yukarıdaki mesajda yaptığımı deneyin.

Grafiği açtım - M1 göstergesini ekledim - terminali kapattım - birkaç dakika içinde açtım.  

Dosyalar:
 
eevviill :

Geliştiriciler, sorunu çözecek misiniz?

İşte size bir gösterge. Yukarıdaki mesajda yaptığımı deneyin.

Grafiği açtım, M1 göstergesini ekledim, terminali kapattım, birkaç dakika içinde açtım.  

Göstergenizle ilgili durum çözüldü.

Mesele şu ki - gösterge sadece kenelerin gelişinde değil, aynı zamanda ilk çizimde ve eksik tarihin gelişinde de hesaplanır.

1. Yeni bir onay işareti geldi - gösterge yerleşti

2. Terminalin son çalışmasından alınan son veri ile son onay işareti arasındaki boşluğu kapatan eksik geçmiş geldi. Gösterge hesaplanır. Ama aynı zamanda yeni barın hali de yok!

Bu sorunu çözmek için çubuk sayısını kontrol etmeniz gerekir. Aşağı yukarı böyle

   if (Time[ 0 ]!=prevtime || Bars !=prevbars)
     {
       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 );

      prevtime=Time[ 0 ];
      prevbars= Bars ;
     }
 
stringo :

Göstergenizle ilgili durum çözüldü.

Mesele şu ki - gösterge sadece kenelerin gelişinde değil, aynı zamanda ilk çizimde ve eksik tarihin gelişinde de hesaplanır.

1. Yeni bir onay işareti geldi - gösterge yerleşti

2. Terminalin son çalışmasından alınan son veri ile son onay işareti arasındaki boşluğu kapatan eksik geçmiş geldi. Gösterge hesaplanır. Ama aynı zamanda yeni barın hali de yok!

Bu sorunu çözmek için çubuk sayısını kontrol etmeniz gerekir. Aşağı yukarı böyle

Teşekkür ederim.

Ama bu sadece benim göstergemde değil. Senin adına bu sorunu çözeceğini düşündüm.

Örneğin Deinit terminalini kapattığınızda tüm programlarda çalıştırın.

 
eevviill :

Teşekkür ederim.

Ama bu sadece benim göstergemde değil. Senin adına bu sorunu çözeceğini düşündüm.

Örneğin Deinit terminalini kapattığınızda tüm programlarda çalıştırın.

Aslında, tüm programlarda deinit, terminal kapatıldığında çağrılır.

Özel bir başlatmadan arındırma neden kodu bile vardır. REASON_CLOSE