Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1896

 
Vitaly Muzichenko #:

No sé cómo resolver el problema

Necesito un gráfico de ticks, es decir, un tick vino - desplazar el buffer en uno y dibujar

Necesitamos dibujar 60 últimos ticks, es decir, 60 barras.

---

Esto debe hacerse tal y como se implementa en la ventana "Ticky"


Es una línea, no barras.

El código dibuja las barras en una nueva ventana. Puede ayudar.

Archivos adjuntos:
SaveTicks.mq4  6 kb
 
Vitaly Muzichenko #:

No sé cómo resolver el problema

Necesito un gráfico de ticks, es decir, un tick vino - desplazar el buffer en uno y dibujar

Necesitamos dibujar 60 últimos ticks, es decir, 60 barras.

---

Debería hacerse tal y como se implementa en la ventana de "ticks"


Para resolver este problema, necesitamos otra matriz. Puede tener una longitud fija, por ejemplo, 60. Debe llenarse con ticks, cada vez desplazando los datos en 1 con la ayuda del bucle. Después de escribir cada tic, este array debe ser copiado al array Buffer, y sus datos serán mostrados en el gráfico.

 
Valeriy Yastremskiy #:

No son barras, es una línea.

El código dibuja las barras en una nueva ventana. Eso podría ayudar.

No pude sacar nada en claro. ¿Tal vez lo estoy viendo desde el lado equivocado?


Mihail Matkovskij #:

Necesitas una matriz más para resolver este problema. Puede ser de una longitud fija, por ejemplo, 60. Debe llenarse con ticks, cada vez desplazando los datos en 1 con la ayuda de un bucle. Después de que se escriba cada tick, este array debe copiarse en el array Buffer y sus datos se mostrarán en el gráfico.

No sé cómo hacer el cambio.

Si no te importa, muéstrame el código

 
Vitaly Muzichenko #:

No pude sacar nada en claro. Tal vez lo estoy viendo desde el lado equivocado.


No sé cómo hacer un cambio.

Si no te importa, ¿podrías mostrarme el código

A[0]=Oferta;

for(i=0;i<60;i++){A[i+1]=A[i]}

 
Valeriy Yastremskiy #:

A[0]=Oferta;

for(i=0;i<60;i++){A[i+1]=A[i]}

Lo hice, funciona.

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[])
{
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  Buffer1[0]=b;
  for(int j=10; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
  }
  return(rates_total);
}

---

Algo me dice que puedo prescindir del bucle.

¿Es así?

 
Vitaly Muzichenko #:

Lo hice, funciona.

---

Algo me dice que puedes prescindir del ciclo.

¿Es esto cierto?

En timeseries, este bucle está oculto. da igual desde qué lado se mueva. para mí tiene más sentido desde 0. No he visto ninguna función de desplazamiento en MKL. Es un trabajo de índice. Es el primero en entrar, el último en salir. Lo hace en python. Parece que no existe en ACM.

 

¿Qué es lo que pasa?

Empieza a funcionar bien, pero en cada nueva barra hay un desplazamiento y fuera de rango.

¿Cómo evitarlo?

---

P.D. Creo que ya está, funciona bien, he añadido

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
  }
 
Vitaly Muzichenko #:

¿Qué es lo que pasa?

Empieza a funcionar bien, pero en cada nueva barra hay un desplazamiento y fuera de rango.

¿Cómo evitarlo?

---

P.D. Parece que funciona bien, añadido

En el lado más pequeño del índice comprueba si es menor que cero, en el lado más grande, si es mayor que la dimensionalidad del array. Poner a cero el array o el último valor no es lógico en cada tick.

 
Valeriy Yastremskiy #:

en el lado menor de la comprobación del índice para menos de cero, en el lado mayor, para más de la dimensión del array. Poner a cero el array o el último valor no es lógico.

Array para toda la historia disponible, no la necesito.

Necesito literalmente 50-100 barras.

Así


 

Buenas tardes.

El valor del fractal diario se muestra en forma de su valor o de una línea vertical. La línea no se muestra y el valor es 0.

Este es un fragmento de código

 double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 0);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);
   ObjectSetText("signal00",DoubleToString(FractalDayUpper,5),18,"Times New Roman", clrRed);


Por favor, dime qué pasa.