Eindeutiger ID-Generator für einen bestimmten Indikator - Seite 4

 
gchrmt4:
Ich weiß nicht, welche Version von MT4 Sie verwenden, aber bei v616 auf meinem Computer gibt WindowFind() -1 während OnInit() zurück. In der Dokumentation steht immer: "WindowFind() gibt -1 zurück, wenn der benutzerdefinierte Indikator sich selbst sucht, wenn die Funktion init() funktioniert."


Meine Version ist 610.

Oh mein Gott... jedes Update scheint schlechter und schlechter zu werden... es wird nicht besser.

ich hatte einen FFcalendar Indikator.

Ich hatte ihn mit Version 604 repariert... und er funktionierte gut.

als ich auf 610 aktualisierte... und es erneut kompilierte... wurde es wieder fehlerhaft...

also habe ich aufgegeben... und wieder mit Version 509 kompiliert... hahaha (weil meine Version 604 weg ist)


oops sorry.. du hast recht mit WindowsFind retun -1 .

es wird nur angezeigt, wenn ich das indi anhänge.. dann ändere ich TF.. aber das Ergebnis ist immer noch eindeutig

Tag

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden in die Rubrik "Fib-Ebenen" verschoben.
 

Ich weiß, dieser Beitrag ist SEHR alt, aber hier ist, wie ich das Problem der eindeutigen Instanznamen zu erreichen. Ich verwende eine Kombination von GetTickCount() zusammen mit globalen Terminal-Variablen-Speicher. Dies funktioniert auch über Instanzlasten.

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


Und dann rufe ich es einfach in OnInit() wie folgt auf:

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


Bis jetzt scheint es richtig zu funktionieren.

 

Ich danke Ihnen vielmals. Diese Funktion hat ein wirklich großes Problem für mich gelöst.


cdxadmin:

Ich weiß, dass dieser Beitrag SEHR alt ist, aber hier ist, wie ich das Problem des eindeutigen Instanznamens löse. Ich verwende eine Kombination aus GetTickCount() zusammen mit der Speicherung von globalen Terminalvariablen. Das funktioniert auch über Instanzladungen hinweg.


Und dann rufe ich es einfach in OnInit() wie folgt auf:


Bis jetzt scheint es richtig zu funktionieren.