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

 
Alexey Viktorov :
Pencerelerin sayısı bellidir, ancak farklı parametrelere sahip MA'ların sayısı nasıl belirlenir?
Gösterge parametrelerini talep etmeniz ve ayrıştırmanız gerekir.
 
çıktı
 int GetShortNames( string &ShortNames[], const long Chart_ID = 0 , const int SubWindow = 0 )
{    
   const int Total = ChartIndicatorsTotal (Chart_ID, SubWindow);

   ArrayResize (ShortNames, Total);
  
   for ( int i = 0 ; i < Total; i++)
    ShortNames[i] = ChartIndicatorName (Chart_ID, SubWindow, i);
    
   return (Total);

}

// Возвращает свое "Короткое имя" - ShortName
string GetMyShortName( void )
{  
   string Res = "" ;
  
   const int SubWindow = ChartWindowFind ();
  
   string ShortNames[];

  GetShortNames(ShortNames, 0 , SubWindow);
  
   const string TmpShortName = __FUNCSIG__ + ( string ) MathRand ();

   IndicatorSetString ( INDICATOR_SHORTNAME , TmpShortName);    

   string NewShortNames[];

   const int Total = GetShortNames(NewShortNames, 0 , SubWindow);
  
   for ( int i = 0 ; i < Total; i++)
     if (NewShortNames[i] == TmpShortName)
    {
      Res = ShortNames[i];
      
       IndicatorSetString ( INDICATOR_SHORTNAME , Res);
      
       break ;
    }
  
   return (Res);
}

// Возвращает свой хэндл
int GetMyHandle( void )
{
   const string ShortName = GetMyShortName();
  
   const string TmpShortName = __FUNCSIG__ + ( string ) MathRand ();  
  
   IndicatorSetString ( INDICATOR_SHORTNAME , TmpShortName);

   const int Res = ChartIndicatorGet ( 0 , ChartWindowFind (), TmpShortName);
  
   IndicatorSetString ( INDICATOR_SHORTNAME , ShortName);  

   return (Res);
}

OnDeinit'ten ÖNCE tutamacınızı IndicatorRelease yapmak çok önemlidir.

İlginç bir şekilde, bu tür her IndicatorRelease'den sonra gösterge tutamacı birer birer artırılır.

 
fxsaber :
çıktı

OnDeinit'ten ÖNCE tutamacınızı IndicatorRelease yapmak çok önemlidir.

İlginç bir şekilde, bu tür her IndicatorRelease'den sonra gösterge tutamacı birer birer artırılır.

GöstergeRelease zaten test cihazında çalışıyor mu? Her ihtimale karşı soruyorum - daha önce çalışmadım.
 
Andrey Dik :
GöstergeRelease zaten test cihazında çalışıyor mu? Her ihtimale karşı soruyorum - daha önce çalışmadım.
Kontrol etmedim.
 
fxsaber :
Kontrol etmedim.
Bunu, örneğin göstergeleri anında kendi araçlarınızla optimize ederseniz, test cihazındaki göstergeyi bellekten boşaltma yeteneğinin olmamasının sistemin askıya alınmasına yol açacağı gerçeğine söyledim. Veya örneğin. gösterge parametrelerinin dinamik değişimi, her seferinde yeni bir tutamaç oluşturulacağından ve eskisi test cihazında silinmeyeceğinden, bellek taşmasına da yol açacaktır.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
iyi konu
 
Alexberrr :
iyi konu

Şu anda gerekli ve alakalı. Kendim uzun zamandır bir sebep arıyordum, kodumda bir söve olduğunu düşündüm, bu konu sayesinde sorun çözüldü.

Herkese teşekkürler!