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

 
Artyom Trishkin:

Así que lee iCustom() justo por el primer índice del bucle.

Otra cuestión es que necesita datos de la barra actual a la izquierda. Por eso digo que hay que leer desde el cero hasta el encontrado, pero no más que rates_total-1.

Sólo se lee cuando el límite>1

Otras veces no hay datos nuevos, y el índice de la barra que necesita no cambiará.

No lo hace, pero los números de barra de las flechas más cercanas en el comentario son correctos

//+------------------------------------------------------------------+
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(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--) 
     {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

No quiere hacerlo.

¿Lees lo que escribo?

La otra cuestión es que quieres los datos de la barra actual a la izquierda. Por eso digo que hay que leer desde el cero hasta el encontrado, pero no más que rates_total-1.

Sólo lectura en el límite>1

 
Artyom Trishkin:

¿Lees lo que escribo?

La otra cuestión es que necesitas datos de la barra actual a la izquierda. Por eso digo que hay que leer desde el cero hasta el encontrado, pero no más que rates_total-1.

Sólo lectura en el límite>1

¿No lo hice así?
si(límite>1)
{
limit=total_de_tasas-1;

 
mila.com:

¿No es eso lo que hice?
si(límite>1)
{
limit=total_de_tasas-1;

Esto es lo que has hecho después:

for(int i=limit; i>=0; i--) 

¿De qué estaba hablando?

 
Artyom Trishkin:

Lo que has hecho a continuación es esto:

¿Qué estaba diciendo?

Leer en el límite>1

for(int i=limit; i>1; i--) 

¿No sé cómo hacerlo bien?

 
mila.com:

Leer en el límite>1

¿No sé cómo hacerlo bien?

Por eso digo que hay que leer desde el cero hasta el encontrado, pero no más que rates_total-1.
 
Artyom Trishkin:
Por eso digo que hay que leer desde cero para encontrar el correcto, pero no más que rates_total-1.

Te digo que no sé cómo hacerlo. Muéstrame, por favor).

 
mila.com:

Ya te he dicho que no sé cómo hacerlo. Muéstrame, por favor).

if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
      // тут поиск до нужного вам бара. Нашли - запомнили бар или поставили точку куда нужно и break;
     }
  }

Este ciclo sólo irá a la barra que quieras (si se encuentra), o toda la historia irá al límite.

 
Artyom Trishkin:

Este ciclo será sólo hasta la barra que quieras (si se encuentra), o para toda la historia, hasta el límite.

yo, bastante mal, no muestra nada.

//+------------------------------------------------------------------+
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(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
  if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Soy muy malo, no se ve nada.

Sigo sin entenderlo: ¿qué quiere encontrar y mostrar? Sólo con palabras, sin código.

Aquí estás escribiendo:

Hola, ayúdame, por favor.

Quiero, en todo momento, saber el número de la barra donde está la flecha del indicador.

En el ejemplo, he intentado llenar el buffer si la flecha está en la décima barra.

Entonces, la pregunta inmediata es: ¿por qué lo buscas en la décima barra? Y en general, ¿en qué barra quieres? ¿Y qué flecha? ¿El último? ¿O los dos últimos, el superior y el inferior? ¿O conocer la barra de la flecha deseada por su número de derecha a izquierda?

Esto no está claro.

Y adjuntar todo el indicador, no OnCalculate()