Actualizar la ventana del gráfico - página 2

 

El "problema" puede ser que los indicadores utilizan un límite, es decir, la función IndicatorCounted()
para no repintar las barras.

Cambiar el marco de tiempo lo restablece, WindowRedraw() puede que no. Su función es redibujar los objetos, no los índices de los indicadores.

void WindowRedraw( )
Redibuja el gráfico actual de forma forzada. Normalmente se utiliza después de cambiar las propiedades de los objetos.

Sé que normalmente voy a recalcular 1000 barras más o menos en la mayoría de las cosas que escribo, y eso es
se inicia con un clic derecho de Refrescar.

Si no se limita mucho el bucle para el indicador, se obtiene un refresco del indicador en cada tick.

 
? ¿alguna pista de lo que está pasando? ¿Por qué no veo ningún efecto después de usarWindowRedraw()?

Muchas gracias,
 

¿Es usted "difícil de leer"?

 
hola phy

justo después de casi dos meses recibí tu última respuesta. No se como me la he saltado. Todavía estoy teniendo problemas con "redibujar mi indicador". ahora voy a tratar de arreglar el problema con la información que me dio. muchas gracias,,,
 

Muestra tu código...

 
brspMA:
hola phy,

justo después de casi dos meses recibí tu última respuesta. No se como me la he saltado. Sigo teniendo problemas con el "redibujado de mi indicador". ahora voy a tratar de arreglar el problema con la información que me diste. muchas gracias,,,
He leído este hilo y creo que hay un problema en tu código => la función WindowRefresh() no te ayudará.
 
hola,

supongo que estoy intentando resetear el indicador para forzarlo a redibujar todo de nuevo desde el principio... mi problema es que estoy utilizando una función que cambia los datos pasados en función de los nuevos, y el resultado es que mi gráfico se convierte en una masa con el tiempo. Necesito redibujar todo mi indicador periódicamente. últimamente, he estado cambiando el marco de tiempo, para que cuando vuelva al marco de tiempo en el que estaba, me queden las ventanas de mi gráfico limpias (redibujadas) . aquí está el esquema de mi código:

int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
return(0);}
muchas gracias,,,
 
inserte 2 líneas en su código

int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
   double startTime=GetTickCount();
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
   double finishTime=GetTickCount();
   Print("Calculation time is ",(finishTime-startTime)/1000.0," seconds");
return(0);}
 

¿Qué es la GV?

Lo que he estado haciendo recientemente, es algo como esto

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){

Redibuja la parte visible del indicador en cada tick, pero no las barras que están fuera de la vista.

 
phy:

¿Qué es la GV?

Lo que he estado haciendo recientemente, es algo como esto

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){

Redibuja la parte visible del indicador en cada tick, pero no las barras que están fuera de la vista.


GV es una variable global que utilizo para establecer el límite según el tiempo que quiero retroceder en las pruebas.

¡¡sois increíbles!! Esta tarde pondré en práctica este código.

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){
gracias por vuestra generosidad,,,