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

 

Zaman çerçevesini değiştirirken sorunları çözme seçeneği


TF'de sadece bir değişiklik olsaydı

1) Belki de grafik nesneleri silmemelisiniz

2) Belki bazı değişkenleri yeniden başlatmamalısınız


 static int ChanGeTF = 0 ;  // Признак смены ТФ , держим как статическую переменную в памяти эксперта
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( ChanGeTF == 0 ) // при первом вызове код в OnInit полностью обрабатывается  , но не отработает если просто менялся ТФ
     {
      // тут сформируем переменные для нашего эксперта которые отработают  при первом старте экперта
      // возможно сформируем графические объекты 
     }
    else
    {
      ChanGeTF = 0 ;  
     // сюда попадет при смене ТФ 
     // а формировать ничего уже не будем ,  у нас все сформировано и мы не желаем делать инициализацию переменных
     // но если необходимо - что то обработаем в код OnInit 
    }

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Print ( __FUNCTION__ , "_UninitReason = " ,getUninitReasonText( _UninitReason ));   // пишем в лог причину входа в DeInit - очень полезная информация
   if ( REASON_CHARTCHANGE != _UninitReason )
     {
      // сюда не попадаем , если произошла смена ТФ
      // удалим графические объекты - для полноценного завершения работы эксперта 
      // 
     }
    else
    {
      // сюда попадем если просто произошла смена ТФ 
      // сделаем то что нам интересно - но при этом - к примеру - не будем удалять с графика графические объекты
         ChanGeTF =1; 
    }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string getUninitReasonText( int reasonCode)
  {
   string text= "" ;
//--- 
   switch (reasonCode)
     {
       case REASON_ACCOUNT :
         text= "Account was changed" ; break ;
       case REASON_CHARTCHANGE :
         text= "Symbol or timeframe was changed" ;
         break ;
       case REASON_CHARTCLOSE :
         text= "Chart was closed" ; break ;
       case REASON_PARAMETERS :
         text= "Input-parameter was changed" ; break ;
       case REASON_RECOMPILE :
         text= "Program " + __FILE__ + " was recompiled" ;
         break ;
       case REASON_REMOVE :
         text= "Program " + __FILE__ + " was removed from chart" ; break ;
       case REASON_TEMPLATE :
         text= "New template was applied to chart" ; break ;
       default :text= "Another reason" ;
     }
//--- 
   return text;
  }

 
Yuriy Zaytsev :

Zaman çerçevesini değiştirirken sorunları çözme seçeneği


TF'de sadece bir değişiklik olsaydı

1) Belki de grafik nesneleri silmemelisiniz

2) Belki bazı değişkenleri yeniden başlatmamalısınız


Tek soru, statik göstergede çalışmıyor , sıfırlanıyor. Bir EA'da çalışır, ancak bir göstergede çalışmaz
.
 
Yuriy Zaytsev :

Zaman çerçevesini değiştirirken sorunları çözme seçeneği


TF'de sadece bir değişiklik olsaydı

1) Belki de grafik nesneleri silmemelisiniz

2) Belki bazı değişkenleri yeniden başlatmamalısınız



Kodunuz çalışmayacak.

Bir kez daha tekrarlıyorum:

Init'te Deinit'in sonuçlarını kontrol edemezsiniz, çünkü Deinit, Init tamamlandıktan sonra çalışabilir.

 
Sergey Chalyshev :


Kodunuz çalışmayacak.

Bir kez daha tekrarlıyorum:

Init'te Deinit'in sonuçlarını kontrol edemezsiniz, çünkü Deinit, Init tamamlandıktan sonra çalışabilir.

Çalışmayacak mı demek istiyorsun - göstergede? Uzmanlarda çalışıyor.
 
Yuriy Zaytsev :
Çalışmayacak mı demek istiyorsun - göstergede? Uzmanlarda çalışıyor.
Uzmanlarda sorun yok. Bu konu göstergelerle ilgili. Dikkatlice oku.
 
Sergey Chalyshev :

O zaman göstergenin Inite'sinde bu başlatmadan arındırma kodları nasıl işlenir, bu kodlar ne işe yarar? Sonuçta göstergede bekleme imkanı yok, Uyku çalışmıyor.

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

 
Nikolai Semko :
Uzmanlarda sorun yok. Bu konu göstergelerle ilgili. Dikkatlice oku.

İlk mesajı okudum.
Diyor ve alıntı yapıyorum:
"Yazılı gösterge veya işbirlikçi"
 
Yuriy Zaytsev :

İlk mesajı okudum.
Diyor ve alıntı yapıyorum:
"Yazılı gösterge veya işbirlikçi"
Profesyonel danışmanların bittiği yer burasıdır.
Bir şey yazmadan önce kendinizi yalnızca ilk gönderiyi okumakla sınırlamak her zaman mantıklı değildir.
 
Nikolai Semko :
Profesyonel danışmanların bittiği yer burasıdır.
Bir şey yazmadan önce kendinizi yalnızca ilk gönderiyi okumakla sınırlamak her zaman mantıklı değildir.

Neyin makul neyin makul olmadığını söylemek tamamen doğru değil.
Konuyla ilgili, yazmadan önce koştum.

Konuya bir kod örneği koydum, şimdi konuyu okuyanlar önerilen mekanizmanın göstergede çalışmadığını, ancak danışmanda çalıştığını görüyor.

Konunun yazarı soruya en az bir cevap ve bir örnek aldı.
 
Yuriy Zaytsev :

Neyin makul neyin makul olmadığını söylemek tamamen doğru değil.
Konuyla ilgili, yazmadan önce koştum.

Konuya bir kod örneği koydum, şimdi konuyu okuyanlar önerilen mekanizmanın göstergede çalışmadığını, ancak danışmanda çalıştığını görüyor.
Tabii ki kod için teşekkürler. Yalnızca Uzman Danışmanlarla ve bu nedenle her şey yolundadır, çünkü TF'yi değiştirirken değişkenlerin yeniden başlatılması yoktur, göstergelerde ise böyledir. Gerçekten tavsiye vermek istiyorsanız, lütfen daha az aceleyle "koşun".