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

 
Ovo: No estoy seguro de si querías decir "enseñado". Yo uso algunas de ellas para depurar, pero a __DATETIME__ no le encontré ningún uso todavía... ¿a dónde apuntas?

Lo siento, olvidé que estás buscando el mismo indicador de múltiples ventanas.

Intentaré pensar en otra cosa.

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

Ah-ha, ya lo tengo. Crea una función que haga un cálculo de longitud decente.

Luego devuelve el tiempo que tarda la función en completarse como su número único.

 

TimeCurrent() es un número único..

¿por qué no intentas usar la hora que adjunta el indi? guárdalo en una etiqueta

 
Ovo:
Porque no juzgo todos los consejos. Escojo sólo los que tienen sentido.
Tesugiero que moderes tu arrogancia con la gente que intenta ayudarte. Esa actitud no es bienvenida en este foro.
 
angevoyageur:
Tesugiero que moderes tu arrogancia con la gente que intenta ayudarte. Esa actitud no es bienvenida en este foro.

Intentaré mantenerme al margen.
 

¿cómo puedes decir que mi idea no tiene sentido?

Lacorriente de tiempo es un número único...

Prueba este código... adjúntalo en 1 gráfico... pero con diferente periodo de entrada

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

el tiempo actual es un número único..

TimeCurrent() no es un número único bajo varias circunstancias posibles, incluyendo las siguientes:

* Usted está reiniciando una copia de MT4 con múltiples gráficos existentes y múltiples indicadores adjuntos a esos gráficos. Todos ellos se inicializarán al mismo tiempo y verán el mismo TimeCurrent()

*Está añadiendo copias del indicador durante un periodo de poca liquidez. Dependiendo del tipo de alimentación de precios de su corredor, puede haber periodos en los que no hay ningún tick nuevo durante 5-10 segundos, y TimeCurrent() no cambia. Si añade nuevos indicadores durante este periodo, obtendrán el mismo valor para 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);   
  }

Sólo se añade la etiqueta de tiempo si no podemos encontrar la etiqueta TIME TAG

para que no se borre la etiqueta TIME TAG al desinstalar... para que el valor no cambie nunca

Ok... si tenemos miedo de que no haya un tick en 5 o 10 segundos... podemos usar TimeLocal en lugar de Time Current

 
WDholic:

Sólo se añade la etiqueta de tiempo si no podemos encontrar la etiqueta TIME TAG

para que no se borre la etiqueta TIME TAG al desinstalar... para que el valor no cambie nunca

Ok... si tenemos miedo de que no haya un tick en 5 o 10 segundos... podemos usar TimeLocal en lugar de Time Current

... También existe el problema comentado anteriormente sobre los objetos del gráfico: si se añade el indicador a un gráfico y luego se crea una plantilla, todos los nuevos gráficos creados a partir de la plantilla tendrán el mismo valor de TIME_TAG. Y el uso del objeto sólo permite una instancia del indicador por gráfico; varios indicadores obtendrán el mismo ID a menos que ponga todos los parámetros posibles en el IndicatorShortName.

 
gchrmt4:

... También existe el problema comentado anteriormente sobre los objetos del gráfico: si se añade el indicador a un gráfico y luego se crea una plantilla, todos los nuevos gráficos creados a partir de la plantilla tendrán el mismo valor de TIME_TAG. Y el uso del objeto sólo permite una instancia del indicador por gráfico; varios indicadores obtendrán el mismo ID a menos que ponga todos los parámetros posibles en el IndicatorShortName.


por favor, pruebe..

si pones 5 indi en diferente configuración con 1 plantilla..

ex.. el valor del tiempo es 111111000

en la ventana 1 se mostrará 1111110001
en la ventana2 se mostrará1111110002
en laventana 3 aparecerá1111110003
en laventana 4 mostrará1111110004

enla ventana 5 mostrará1111110005

porque incluyo el número de la ventana

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


varios indicadores obtendrán el mismo ID a menos que ponga todos los parámetros posibles en el IndicatorShortName.

sí .. será bueno para ser considerado.

pero creo que será fácil para un maestro codificador como OVO y Usted

 
WDholic:

si pones 5 indi en diferente configuración con 1 plantilla..

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".