Générateur d'ID unique pour un indicateur particulier - page 4

 
gchrmt4:
Je ne sais pas quelle version de MT4 vous utilisez, mais sur la v616 de mon ordinateur, WindowFind() renvoie -1 pendant OnInit(). La documentation a toujours dit "WindowFind() retourne -1 si l'indicateur personnalisé se cherche lui-même lorsque la fonction init() fonctionne."


ma version est 610.

oh mon dieu... chaque mise à jour semble être de plus en plus mauvaise... ça ne s'améliore pas...

J'avais un indicateur FFcalendar.

je l'avais réparé avec la version 604... et il fonctionnait bien.

quand j'ai mis à jour la 610... et je l'ai compilé à nouveau... il est redevenu une erreur...

alors j'ai abandonné... et j'ai compilé à nouveau avec la version 509... hahaha ( parce que ma version 604 a disparu )


oops désolé... vous avez raison sur WindowsFind retun -1 .

Je n'ai pas de problème avec la version 509, mais je n'ai pas de problème avec la version 604.

étiquette

 
Les commentaires qui ne se rapportent pas à ce sujet ont été déplacés vers les "niveaux libres".
 

Je sais que ce post est TRÈS ancien, mais voici comment je résous le problème du nom d'instance unique. J'utilise une combinaison de GetTickCount() avec le stockage des variables globales du terminal. Cela fonctionne également à travers les chargements d'instance.

const string _uniqueSeedVarName = "MyVar";
string GetUniqueInstanceName(const string baseName)
{
   uint seed = 1;

   // See if our last stored unique seed value exists
   if (GlobalVariableCheck(_uniqueSeedVarName))
   {
      // It does, so get it
      seed = (uint)GlobalVariableGet(_uniqueSeedVarName);

      // Do some boundary checking and ensure the user didn't muck with the value
      // If we're okay, increment the seed by one      
      if (seed > 0 && seed < UINT_MAX)
         seed = seed + 1;
      else
         // The seed has been corrupted by the user or is too large; reset to current tick count
         seed = GetTickCount();   
   }
   else
      // First time in; initialize the seed to the current tick count
      seed = GetTickCount();

   // Store the value in global terminal variables
   // The user DOES have access to this value, so the handling above should account for any changes the user might make
   GlobalVariableSet(_uniqueSeedVarName, seed);

   // Initialize the random generator
   MathSrand(seed);
  
   // Create a unique instance name in the format of "[BaseName][Random1][Random2]"
   return StringFormat("%s%s%s", baseName, IntegerToString(MathRand()), IntegerToString(MathRand()));
}


Puis je l'appelle simplement dans OnInit() comme suit :

   Print(StringFormat("Indicator Id: %s", GetUniqueInstanceName("Sandbox")));


Jusqu'à présent, cela semble fonctionner correctement.

 

Merci beaucoup. Cette fonction a résolu un problème très important pour moi.


cdxadmin:

Je sais que ce post est TRÈS ancien, mais voici comment je résous le problème du nom d'instance unique. J'utilise une combinaison de GetTickCount() avec le stockage de la variable globale du terminal. Cela fonctionne également à travers les chargements d'instance.


Puis je l'appelle simplement dans OnInit() comme suit :


Jusqu'à présent, cela semble fonctionner correctement.

Raison: