es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función no está recuperando los valores de un arreglo correctamente.

Tengo una función llamada Crossed1 que estoy tratando de implementar para recopilar valores en un array.
Luego, a partir de ese array, quiero encontrar el valor más alto de los últimos 5 barras.

int Crossed1()
{
   static int CurrentDirection1 = 0;
   static int LastDirection1 = 0;
   static bool FirstTime1 = true;

   //----
   if ((BB20DO < BB30DO) && (CandleCLOSE < BB20DO) && (CandleCLOSEp < BB20DOp) && (RSIi < 30))
      CurrentDirection1 = 1;  // línea1 arriba de línea2
   if (BB20DO > BB30DO)
      CurrentDirection1 = 2;  // línea1 debajo de línea2
   //----
   if (FirstTime1 == true) // Necesito verificar si esta es la primera vez que se ejecuta la función
   {
      FirstTime1 = false; // Cambiar la variable a false
      LastDirection1 = CurrentDirection1; // Establecer nueva dirección
      return (0);
   }

   if (CurrentDirection1 != LastDirection1 && FirstTime1 == false) // Si no es la primera vez y hay un cambio de dirección
   {
      LastDirection1 = CurrentDirection1; // Establecer nueva dirección
      return(CurrentDirection1); // 1 para arriba, 2 para abajo
   }
   else
   {
      return(0);  // No hay cambio de dirección
   }
 }

ArrayCalcMax para obtener el valor máximo

int ArrayCalcMax()
{
   int bars = 5;
   int malookback = bars;

   double madaily[5];
   double dllv;

   for (int i = 0; i < malookback; i++)
   {
      madaily[i] = Crossed1();
      Print("array[", i, "] =", madaily[i]);
   }

   int maxPos = ArrayMaximum(madaily, malookback, 0); // Verifique que "maxPos" esté dentro del rango, ya que podría ser "-1" si falla
   Print("maxPos =", maxPos);

   if (maxPos >= 0)
   {
      dllv = madaily[maxPos]; // Tenga en cuenta que "dllv" es una variable local que se descartará tan pronto como regrese
      Print("dllv =", dllv);
   }
   else
   {
      Print("¡Algo está mal!");
   }

   return(dllv);
}

Creo que actualmente, con el código actual, solo estoy recopilando el valor actual en el array, ¿es eso correcto?

Si intento incluir la variable i, devuelve el error “Recuento incorrecto de parámetros”.

¿Cómo puedo solucionar esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, actualmente la función Crossed1() solo está recolectando el valor actual en el arreglo madaily.

    Para recolectar los valores de las últimas 5 barras, debes modificar el bucle for en la función ArrayCalcMax() de la siguiente manera:

    for(int i = 0; i < malookback; i++)
    {
       madaily[i] = Crossed1(); // recolectar el valor para la barra actual
       Print(" array[",i,"] = ",madaily[i]); // imprimir el valor recolectado para el proceso de depuración
    
       // desplazar los valores en el arreglo hacia la izquierda para hacer espacio para el nuevo valor
       for(int j = malookback - 1; j > 0; j--)
          madaily[j] = madaily[j-1];
    }
    
    

    Esto recolectará los valores de las últimas 5 barras en el arreglo madaily y desplazará los valores en el arreglo para hacer espacio para el nuevo valor en cada nueva barra.

    Para obtener el valor máximo de las últimas 5 barras, puedes utilizar la función ArrayMaximum() como se muestra en el código que proporcionaste. Sin embargo, asegúrate de utilizar el número correcto de parámetros. La función ArrayMaximum() tiene los siguientes parámetros:

    ArrayMinimum(const void& array[], int count, const int start = WHOLE_ARRAY, const int how_search = MODE_GREATEST, const int start_index = 0, const int stop_index = 0)
    

    Debes llamarlo de la siguiente manera:

    int maxPos = ArrayMaximum(madaily, malookback, 0, MODE_GREATEST, 0, malookback - 1); 
    

    Esto devolverá el valor máximo en las últimas 5 barras del arreglo madaily.

    ¡Espero que esto te ayude!

Comments are closed.