Generatore di ID unico per un particolare indicatore - pagina 3

 
Ovo: Non sono sicuro che tu intendessi "insegnato". Ne uso alcune per il debug, ma per __DATETIME__ non ho ancora trovato alcun uso... dove stai puntando?

Scusa, ho dimenticato che stai cercando lo stesso indicatore in più finestre.

Proverò a pensare a qualcos'altro.

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

Ah-ha, ho capito. Crea una funzione che faccia un calcolo di lunghezza decente.

Poi restituisci il time-lapse per il completamento della funzione come numero unico.

 

TimeCurrent() è un numero unico...

perché non provate a utilizzare il tempo che allegate all'indi?? salvatelo in un'etichetta

 
Ovo:
Perché non provo tutti i consigli. Scelgo solo quelli che hanno senso.
Ti suggerisco di moderare la tua arroganza con le persone che cercano di aiutarti. Tale atteggiamento non è benvenuto su questo forum.
 
angevoyageur:
Ti suggerisco di moderare la tua arroganza con le persone che cercano di aiutarti. Tale atteggiamento non è benvenuto su questo forum.

Cercherò di stare alla larga.
 

come potete dire che la mia idea non ha senso?

lacorrente temporale è un numero unico...

provare questo codice... allegarlo su 1 grafico... ma diverso periodo di ingresso

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

il tempo corrente è un numero unico...

TimeCurrent() non è un numero unico in varie circostanze possibili, tra cui le seguenti:

* Stai riavviando una copia di MT4 con più grafici esistenti e più indicatori collegati a quei grafici. Saranno tutti inizializzati allo stesso tempo e vedranno lo stesso TimeCurrent()

*Stai aggiungendo copie dell'indicatore durante un periodo di scarsa liquidità. A seconda del tipo di alimentazione dei prezzi del tuo broker, ci possono essere periodi in cui non ci sono nuovi tick per 5-10 secondi e TimeCurrent() non cambia. Se aggiungete nuovi indicatori durante un tale periodo, essi avranno lo stesso valore di 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);   
  }

aggiungendo solo l'etichetta time tag se non riusciamo a trovare l'etichetta TIME TAG

quindi non cancellare l'etichetta TIME TAG all'uscita... così il valore non cambia mai

Ok... se abbiamo paura che non ci siano tick in 5 o 10 secondi... possiamo usare TimeLocal invece di Time Current

 
WDholic:

aggiungendo solo l'etichetta time tag se non riusciamo a trovare l'etichetta TIME TAG

quindi non cancellare l'etichetta TIME TAG all'uscita... così il valore non cambia mai

Ok... se abbiamo paura che non ci sia un tick in 5 o 10 secondi... possiamo usare TimeLocal invece di Time Current

... C'è anche il problema discusso sopra sugli oggetti grafico: se si aggiunge l'indicatore ad un grafico e poi si crea un template, tutti i nuovi grafici creati dal template avranno lo stesso valore TIME_TAG. E l'uso dell'oggetto permette solo un'istanza dell'indicatore per grafico; più indicatori otterranno lo stesso ID a meno che non si mettano tutti i parametri possibili nell'IndicatorShortName.

 
gchrmt4:

... C'è anche il problema discusso sopra sugli oggetti grafico: se si aggiunge l'indicatore a un grafico e poi si crea un modello, tutti i nuovi grafici creati dal modello avranno lo stesso valore TIME_TAG. E l'uso dell'oggetto permette solo un'istanza dell'indicatore per grafico; più indicatori otterranno lo stesso ID a meno che non si mettano tutti i parametri possibili nell'IndicatorShortName.


prova per favore...

se metti 5 indi in diverse impostazioni con 1 modello...

es. il valore del tempo è 111111000

nella finestra 1 mostrerà 1111110001
nella finestra 2 mostrerà 1111110002
nella finestra 3 most rerà1111110003
nella finestra4 most rerà1111110004

nella finestra 5 most rerà1111110005

perché includo il numero della finestra

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


più indicatori otterranno lo stesso ID a meno che non si mettano tutti i parametri possibili nell'IndicatorShortName.

sì... sarà bene essere considerato.

ma penso che sarà facile per un master coder come OVO e voi

 
WDholic:

se si mettono 5 indi in diverse impostazioni con 1 modello.

Non so quale versione di MT4 stai usando, ma sulla v616 sul mio computer, WindowFind() restituisce -1 durante OnInit(). La documentazione ha sempre detto "WindowFind() restituisce -1 se l'indicatore personalizzato cerca se stesso quando la funzione init() funziona".
Motivazione: