Generador de identificación única para un indicador particular - página 4

 
gchrmt4:
No sé qué versión de MT4 estás usando, pero en la v616 en mi ordenador, WindowFind() devuelve -1 durante OnInit(). La documentación siempre ha dicho "WindowFind() devuelve -1 si el indicador personalizado se busca a sí mismo cuando la función init() funciona".


mi versión es la 610.

Oh Dios mío... cada actualización parece ser más y más mala... no mejora.

yo tenía un indicador de FFcalendar.

lo habia reparado con la version 604.. y funcionaba bien.

cuando actualizo a 610.. y lo compilé de nuevo.. se convirtió en error de nuevo..

así que me doy por vencido .. y compilado de nuevo con la versión 509 ... jajaja ( porque mi versión 604 se ha ido)


oops lo siento.. tienes razón sobre WindowsFind retun -1 .

Solo se muestra cuando después de adjuntar ese indi.. entonces cambio de TF.. pero el resultado sigue siendo único

etiqueta

 
Los comentarios que no se relacionan con este tema, han sido trasladados a "Niveles de fibra".
 

Sé que este post es MUY viejo, pero aquí es cómo logro el problema del nombre de instancia único. Yo uso una combinación de GetTickCount() junto con el almacenamiento de variables globales de la terminal. Esto también funciona a través de las cargas de instancia.

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()));
}


Y luego simplemente lo llamo en OnInit() como sigue:

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


Hasta ahora, parece funcionar correctamente.

 

Muchas gracias. Esta función me ha resuelto un gran problema.


cdxadmin:

Sé que este post es MUY viejo, pero aquí es cómo logro el problema del nombre único de la instancia. Yo uso una combinación de GetTickCount() junto con el almacenamiento de la variable global de la terminal. Esto también funciona a través de las cargas de la instancia.


Y luego simplemente lo llamo en OnInit() como sigue:


Hasta ahora, parece funcionar correctamente.