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

 
Ovo: Ich bin nicht sicher, ob Sie "gelehrt" meinten. Ich benutze ein paar von ihnen zum Debuggen, aber für __DATETIME__ habe ich noch keine Verwendung gefunden... worauf zielen Sie ab?

Entschuldigung, ich vergaß, dass Sie nach demselben Indikator für mehrere Fenster suchen.

Ich werde versuchen, an etwas anderes zu denken.

===============================================

Ah-ha, ich hab's. Erstellen Sie eine Funktion, die eine anständige Längenberechnung durchführt.

Geben Sie dann die Zeitspanne, die die Funktion benötigt, als eindeutige Zahl zurück.

 

TimeCurrent() ist eine eindeutige Nummer..

Warum versuchst du nicht, die Zeit zu verwenden, die du dem Index anhängst, und speicherst sie in einem Label?

 
Ovo:
Weil ich nicht jeden Ratschlag ausprobiere. Ich wähle nur die aus, die sinnvoll sind.
Ich schlage vor, dass Sie Ihre Arroganz gegenüber Menschen , die versuchen, Ihnen zu helfen, zügeln . Eine solche Haltung ist in diesem Forum nicht erwünscht.
 
angevoyageur:
Ich schlage vor, dass Sie Ihre Arroganz gegenüber Menschen , die versuchen, Ihnen zu helfen, zügeln . Eine solche Haltung ist in diesem Forum nicht willkommen.

Ich werde versuchen, mich fernzuhalten.
 

Wie können Sie sagen, dass meine Idee unsinnig ist?

Zeitstrom ist eine eindeutige Nummer...

Versuchen Sie diesen Code... hängen Sie ihn an 1 Diagramm an... aber eine andere Eingabeperiode

#property strict
#property indicator_separate_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
extern int periode=4;
int OnInit()
  {
//--- indicator buffers mapping
string shortname=StringConcatenate(WindowExpertName(),"_",periode);
IndicatorShortName(shortname);
int wind=WindowFind(shortname);
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
WDholic:

timeCurrent ist eine eindeutige Zahl..

TimeCurrent() ist keine eindeutige Nummer unter verschiedenen möglichen Umständen, einschließlich der folgenden:

* Sie starten eine Kopie von MT4 mit mehreren bestehenden Charts und mehreren Indikatoren, die mit diesen Charts verbunden sind, neu. Sie werden alle zur gleichen Zeit initialisiert und sehen die gleiche TimeCurrent()

*Sie fügen Kopien des Indikators während eines Zeitraums mit geringer Liquidität hinzu. Je nach Art des Preisfeeds Ihres Brokers kann es Perioden geben, in denen es 5-10 Sekunden lang keinen neuen Tick gibt und TimeCurrent() sich nicht ändert. Wenn Sie während eines solchen Zeitraums neue Indikatoren hinzufügen, erhalten diese denselben Wert für TimeCurrent().

 
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }

nur hinzufügen, wenn wir das Label TIME TAG nicht finden können

Löschen Sie also nicht das Label TIME TAG beim Deinitieren, damit sich der Wert nie ändert.

Ok.. wenn wir Angst haben, dass es in 5 oder 10 Sekunden keinen Tick gibt, können wir vielleicht TimeLocal statt Time Current verwenden

 
WDholic:

nur hinzufügen, wenn wir das Label TIME TAG nicht finden können

Löschen Sie also nicht das Label TIME TAG beim Deinitieren, damit sich der Wert nie ändert.

Ok.. wenn wir Angst haben, dass es in 5 oder 10 Sekunden keinen Tick gibt, können wir vielleicht TimeLocal anstelle von Time Current verwenden

... Es gibt auch das oben beschriebene Problem mit den Chart-Objekten: Wenn Sie den Indikator zu einem Chart hinzufügen und dann eine Vorlage erstellen, haben alle neuen Charts, die aus der Vorlage erstellt werden, den gleichen TIME_TAG-Wert. Und die Verwendung des Objekts erlaubt nur eine Instanz des Indikators pro Diagramm; mehrere Indikatoren erhalten die gleiche ID, es sei denn, Sie geben alle möglichen Parameter in den IndicatorShortName ein.

 
gchrmt4:

... Außerdem gibt es das oben beschriebene Problem mit Chart-Objekten: Wenn Sie den Indikator zu einem Chart hinzufügen und dann eine Vorlage erstellen, haben alle neuen Charts, die aus der Vorlage erstellt werden, denselben TIME_TAG-Wert. Und die Verwendung des Objekts erlaubt nur eine Instanz des Indikators pro Chart; mehrere Indikatoren erhalten die gleiche ID, es sei denn, Sie geben alle möglichen Parameter in den IndicatorShortName ein.


Bitte versuchen Sie es...

wenn Sie 5 Indikatoren in verschiedenen Einstellungen mit 1 Vorlage eingeben...

z.B.: Zeitwert ist 111111000

in Fenster 1 wird 1111110001 angezeigt
in Fenster 2 wird 1111110002angezeigt
in Fenster 3 wird1111110003 angezeigt
in Fenster 4 wird1111110004 angezeigt

in Fenster 5 wird1111110005 angezeigt

weil ich die Fensternummer einfüge

ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0),9,"Arial",Yellow);


mehrere Indikatoren erhalten die gleiche ID, wenn Sie nicht alle möglichen Parameter in den IndicatorShortName eingeben .

Ja, es wäre gut, das zu berücksichtigen.

aber ich denke, dass es für einen Meisterprogrammierer wie OVO und Sie einfach sein wird.

 
WDholic:

wenn Sie 5 Indi in verschiedenen Einstellungen mit 1 Vorlage setzen...

Ich weiß nicht, welche Version von MT4 Sie verwenden, aber auf v616 auf meinem Computer, WindowFind() gibt -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."