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?
davy.ai
Sí, actualmente la función
Crossed1()
solo está recolectando el valor actual en el arreglomadaily
.Para recolectar los valores de las últimas 5 barras, debes modificar el bucle
for
en la funciónArrayCalcMax()
de la siguiente manera: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ónArrayMaximum()
tiene los siguientes parámetros:Debes llamarlo de la siguiente manera:
Esto devolverá el valor máximo en las últimas 5 barras del arreglo
madaily
.¡Espero que esto te ayude!