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

 
Ovo: Je ne suis pas sûr que vous vouliez dire "enseigné". J'en utilise quelques-unes pour le débogage, mais pour __DATETIME__ je n'ai pas encore trouvé d'utilisation... où voulez-vous en venir ?

Désolé, j'ai oublié que vous cherchiez le même indicateur pour plusieurs fenêtres.

Je vais essayer de trouver autre chose.

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

Ah-ha, je l'ai. Créer une fonction qui fait un calcul de longueur décent.

Puis tu renvoies le temps que la fonction met à se terminer en tant que numéro unique.

 

TimeCurrent() est un nombre unique...

pourquoi n'essayez-vous pas d'utiliser l'heure à laquelle vous attachez l'indice ?

 
Ovo:
Parce que je ne juge pas tous les conseils. Je ne retiens que ceux qui ont du sens.
Je vous suggère de modérer votre arrogance avec les personnes qui essaient de vous aider. Une telle attitude n'est pas la bienvenue sur ce forum.
 
angevoyageur:
Je vous suggère de modérer votre arrogance avec les personnes qui tentent de vous aider. Une telle attitude n'est pas la bienvenue sur ce forum.

Je vais essayer de rester à l'écart.
 

Comment pouvez-vous dire que mon idée n'a pas de sens ?

letemps courant est un numéro unique...

essayez ce code... attachez-le sur un graphique... mais avec une période d'entrée différente

#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:

time current est un nombre unique..

TimeCurrent() n'est pas un nombre unique dans diverses circonstances possibles, notamment les suivantes :

* Vous redémarrez une copie de MT4 avec plusieurs graphiques existants et plusieurs indicateurs attachés à ces graphiques. Ils seront tous initialisés en même temps et verront le même TimeCurrent().

*Vous ajoutez des copies de l'indicateur pendant une période de faible liquidité. Selon le type de flux de prix de votre courtier, il peut y avoir des périodes où il n'y a pas de nouveau tick pendant 5 à 10 secondes, et où TimeCurrent() ne change pas. Si vous ajoutez de nouveaux indicateurs pendant une telle période, ils obtiendront la même valeur pour 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);   
  }

ajouter l'étiquette de temps seulement si nous ne trouvons pas l'étiquette TIME TAG.

donc ne pas effacer l'étiquette TIME TAG à la désinitialisation ... ainsi la valeur ne changera jamais.

Si nous avons peur qu'il n'y ait pas de tick dans 5 ou 10 secondes, nous pouvons utiliser TimeLocal au lieu de Time Current.

 
WDholic:

ajouter l'étiquette de temps seulement si nous ne trouvons pas l'étiquette TIME TAG.

donc ne pas effacer l'étiquette TIME TAG à la désinitialisation ... ainsi la valeur ne changera jamais.

Si nous avons peur qu'il n'y ait pas de tick dans 5 ou 10 secondes, nous pouvons utiliser TimeLocal au lieu de Time Current.

... Il y a aussi le problème discuté ci-dessus à propos des objets graphiques : si vous ajoutez l'indicateur à un graphique et que vous créez ensuite un modèle, tous les nouveaux graphiques créés à partir du modèle auront la même valeur TIME_TAG. Et l'utilisation de l'objet ne permet qu'une seule instance de l'indicateur par graphique ; plusieurs indicateurs obtiendront le même ID à moins que vous ne mettiez tous les paramètres possibles dans l'IndicatorShortName.

 
gchrmt4:

... Il y a aussi le problème discuté ci-dessus à propos des objets graphiques : si vous ajoutez l'indicateur à un graphique et que vous créez ensuite un modèle, tous les nouveaux graphiques créés à partir de ce modèle auront la même valeur TIME_TAG. Et l'utilisation de l'objet ne permet qu'une seule instance de l'indicateur par graphique ; plusieurs indicateurs obtiendront le même ID à moins que vous ne mettiez tous les paramètres possibles dans l'IndicatorShortName.


essayez svp.

si vous mettez 5 indicateurs dans différents paramètres avec 1 modèle...

ex... la valeur du temps est 111111000

la fenêtre 1 affichera 1111110001
dans la fenêtre 2 il y aura 1111110002
lafenêtre 3 affich era1111110003
Lafenêtre 4 affich era1111110004

dans lafenêtre 5 il y aura1111110005

parce que j'ai inclus le numéro de la fenêtre

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


plusieurs indicateurs obtiendront le même ID si vous ne mettez pas tous les paramètres possibles dans l'IndicatorShortName.

oui... ce serait bien d'être considéré.

mais je pense que ce sera facile pour un maître codeur comme OVO et vous.

 
WDholic:

Si vous mettez 5 indiens dans différents cadres avec un modèle...

Je ne sais pas quelle version de MT4 vous utilisez, mais sur la v616 sur mon ordinateur, WindowFind() retourne -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."
Raison: