Séquence d'exécution de Init() et DeInit() - page 28

 
Alexey Viktorov:
Le nombre de fenêtres est clair, mais le nombre de MA avec des paramètres différents, comment le déterminer ?
Vous devez interroger et analyser les paramètres de l'indicateur.
 
J'ai compris
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);
}

Il est très important d'effectuer un IndicatorRelease de son handle AVANT OnDeinit.

Il est intéressant de noter qu'après chaque IndicatorRelease, le manche de l'indicateur est incrémenté d'une unité.

 
fxsaber:
J'ai compris

Il est très important d'effectuer un IndicatorRelease de son handle AVANT OnDeinit.

Il est intéressant de noter qu'après chaque IndicatorRelease, le manche de l'indicateur est incrémenté d'une unité.

IndicatorRelease fonctionne déjà dans le testeur ? Juste au cas où - ça n'a pas marché avant.
 
Andrey Dik:
Est-ce que IndicatorRelease fonctionne déjà dans le testeur ? Juste au cas où - ça n'a pas marché avant.
Je ne l'ai pas testé.
 
fxsaber:
Non vérifié.
Je veux dire que l'absence de possibilité de décharger un indicateur de la mémoire dans le testeur entraînera la suspension du système, si, par exemple, vous optimisez les indicateurs par vos propres moyens à la volée. Ou, par exemple, la modification dynamique des paramètres de l'indicateur entraînera un débordement de la mémoire, car à chaque fois un nouveau handle sera créé et l'ancien ne sera pas supprimé dans le testeur.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
bon sujet
 
Alexberrr:
Bon sujet

Une démarche nécessaire et pertinente à l'heure actuelle. J'ai longtemps cherché la cause moi-même, je pensais que c'était un bug dans mon code, grâce à ce fil de discussion le problème a été résolu.

Merci à tous !