Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1177

 

¡Hola!

¿Puedes aconsejar cómo configurar el indicador para que funcione sólo en la apertura de la barra, y no en cada tick y cómo hacer que no se ejecute cada vez (en cada nueva barra) en todo el historial?

Me gustaría utilizar el indicador como alternativa al anterior.

Rostislav


 
Rost17:¿Puede indicar cómo configurar el indicador para que funcione sólo en la apertura de la barra y no en cada tic y cómo hacer que no se ejecute cada vez (en cada nueva barra) a través de todo el historial?
Datetime t;
En primer lugar, sobre las barras. Cuando se forma una nueva barra, se escribe un nuevo valor en Time[0]: el momento en que se abre la barra.
OnCalculate(...)
{
if(Time[0] == t) return(0); // Si se procesa esta barra --> exit
t = Time[0];

Ahora para todo el historial: se ralentizará
 
STARIJ:
datetime t;
Primero, sobre las barras. Cuando formamos una nueva barra, escribimos un nuevo valor en Time[0] - el momento en que se abre la barra.
OnCalculate(...)
{
if(Time[0] == t) return(0); // si se procesa esta barra --> exit
t = Tiempo[0];

Ahora la historia completa: se ralentizará

Gracias por la rápida respuesta. Lo que pregunto es cómo hacer que NO se ralentice y recorra el historial cuando aparece una nueva barra, sino que sólo procese la nueva barra...

Ahora está organizado de la siguiente manera: for(int i=limit-1; i>=0; i--) y según entiendo, significa que en cada apertura de una barra, todos los valores de todo el historial serán recalculados de nuevo, mientras que se debería trabajar sólo con la última barra...

 
Rost17: Pregunto cómo hacer para que NO se ralentice y no recorra todo el historial cuando aparece una nueva barra, sino que sólo procese la nueva barra...

Así es como se calcula en la última barra:

//| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate(.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if(rates_total<=InpBearsPeriod) return(0);

   if(prev_calculated>0) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for(int i=0; i<limit; i++)
     {
      ExtTempBuffer[i]=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return(rates_total);
  }
 
STARIJ:

Veamos primero la línea

Para que me quede más claro, lo he reescrito así.

¡¡¡Aha!!! Ahora empiezo a entender... En el bucle, la variable a cambia de 1 a 6. Con los valores de esta variable 1, 5 y 6 no hay ninguna acción. Entonces sólo

O en su estilo.

El resultado será el mismo, pero funcionará más rápido.

Ahora tienes que deshacerte de la función Estadística, escribir su cuerpo tres veces seguidas, sustituir los parámetros formales en cada una de las tres partes por parámetros reales y eliminar las declaraciones de variables duplicadas. El código total será un poco más largo pero la ejecución será más rápida. Tiene sentido lanzar print() - ¿quién exactamente en este momento va a mirar el registro de mensajes? - O sustituirlo por Alert() para mostrarlo en la pantalla. Además, hay una variable namZz2 - ¿cambia su valor?


Necesito utilizar stats() en lugar de stats(). Estúpidamente, sé que puedo reescribir tres veces, como has dicho, pero el problema es que lo más probable es que el resultado de la recogida de estadísticas tenga que añadir más arrays y tarde o temprano volveré a los originales. Por eso te ofrezco caminos sencillos, que ya conozco, y que desgraciadamente me llevarán al principio. Por eso miro hacia adelante, ¡para no tener que volver a ello en el futuro!

for(int a=1;a<6;a++)
{
   if(a==2){Statistic(mZz2,namZz2);}
   if(a==3){Statistic(mZz3,namZz3);}
   if(a==4){Statistic(mZz4,namZz4);}
}

¡¿¡Cómo poner este código en el estadístico!? para que sea un único procedimiento que al principio como dije la pregunta por favor mira!

 
STARIJ:

Así es como se calcula en la última barra:

¡Muchas gracias! Tengo una fuente de indicadores muy antigua. ¿Podríais arreglarlo para que no recalcule todo el historial cada vez, funcione sólo al cierre de la barra y ponga la flecha sólo en la barra tras la cual apareció la señal? Bueno, y en el nuevo estilo, con OnCalculate... Estoy dispuesto a compensar el costo de su tiempo... Si está de acuerdo, ¿cuál es la mejor manera de hacerlo? ¿Puedo enviárselo en un mensaje privado o dónde?
 
Игорь:

Este es un extracto del código de trabajo. ¡Cómo recogerlo en una sola Estadística nula sin Estadística nula intermedia ! ¡Tendría que rehacer todo el código para juntar todas las matrices en una sola e intentar rascarla desde ahí !

El extracto que has citado de tu código de trabajo es erróneo o tu función Statistic() no hace nada más que imprimir cuando se llama desde Stat().

De todos modos, se detendrá justo después del regreso;.

Por favor, danos el código completo para entender lo que quieres.

 

Que conste en acta. Demasiados hilos en el foro para ayudar a los novatos en MQL4.

Este hilo ya no tiene soporte y está cerrado.


Por favor, dirija todas las preguntas a cualquiera de los siguientes hilos activos:

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

Todos los demás mensajes en este hilo serán borrados.


 
ayuda puede una orden ya comprada cambiar su precio de compra en 2 horas
 
Quiero una imagen de un personaje de Minecraft y un pico en las manos cuando sea rentable. ¿cómo lo hago?