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

 

Encontré un extraño fallo al dibujar en el gráfico de MT5: las flechas en lugar de las velas bajas se colocan en lugares arbitrarios, como si estuvieran desplazadas en el gráfico




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

Encontré un extraño fallo al dibujar en el gráfico de MT5: las flechas en lugar de las velas bajas se colocan en lugares arbitrarios, como si estuvieran desplazadas en el gráfico




1. El indicador YA tiene una matriz baja. Hay que aplicarlo.

2. No es necesario ejecutar la visualización a la máxima velocidad.

3. El código es terriblemente glitchy - porque en cada tic hay un paso por TODAS las BARRAS.

 
Vladimir Karputov:

1. El indicador YA tiene una matriz baja. Aplícalo.

2. No es necesario ejecutar la visualización a la máxima velocidad.

3. El código es terriblemente glitchy - porque en cada tick hay un paso por TODAS las BARRAS.

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1. El indicador YA tiene una matriz baja. Aplícalo.

2. No es necesario ejecutar la visualización a la máxima velocidad.

3. El código es terriblemente glitchy - porque en cada tic hay un paso por TODAS las barras.

No publiqué el código aquí, pero escribí el más simple para simplificar el análisis.

Dime más sobre lo que está mal, sobre la velocidad máxima no está claro.

 
Vitaly Muzichenko:

Vitaly, la inicialización no funciona por alguna razón. He intentado escribirPlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); tampoco funciona :(

 
psyman:

No publiqué el código aquí, pero escribí el más simple para simplificar el análisis.

Dime más sobre lo que pasa, la velocidad máxima no está clara.

Empieza a corregirlo paso a paso. Por ejemplo, arreglarlo primero:

El indicador ya tiene una matriz baja. Tienes que aplicarlo.

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow funciona como serie true, Buf_0 es false, low[] también es false. Es decir, el elemento 0 en su caso obtiene rates_total-1 (reflejado)

Por ejemplo, hay que dar la vuelta a uno de ellos:

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

Encontré un extraño fallo al dibujar en el gráfico de MT5: las flechas en lugar de las velas bajas se colocan en lugares arbitrarios, como si estuvieran desplazadas en el gráfico



Conocer la adivinanza sobre las manzanas de Pinocho ayudará sin duda a resolver este problema. No lo recuerdo con detalle, esperaremos a que alguien lo vuelva a contar sin errores.

 
Igor Zakharov:

iLow funciona como serie true, Buf_0 es false, low[] también es false. Es decir, el elemento 0 en su caso obtiene rates_total-1 (reflejado)

Por ejemplo, hay que dar la vuelta a uno de ellos:

¡Esto es un indicador! Ya hay matrices en OnCalculate.

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

¿Por qué hay que meter iXXXX funciones en un indicador?

 
Vladimir Karputov:

¡Esto es un indicador! OnCalculate YA tiene arrays

¿Por qué poner funciones iXXXXXX en un indicador?

¿Cómo puedo saberlo? El autor de la pregunta utilizó iLow(), significa que lo necesita. Tal vez sea más fácil de percibir, tal vez planea dirigirse a otro símbolo o marco de tiempo a través de una variable de entrada (no recuerdo, ¿hay un copyrate en cuatro?)

Añadido: la pregunta sobre el cinco se hizo en el hilo de cuaternarios. Lo pasé por alto, me arrepiento. Pero la respuesta sigue siendo la misma.

Razón de la queja: