[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 305

 
artmedia70:

1. Si hay una posición de retirada cerrada, ...

1.1 Si su tipo es OP_BUY, ...

1.1.2 Si hay una posición abierta OP_SELL, ....

1.1.3 Si el tiempo de la barra actual menos el tiempo de la posición de venta abierta es mayor o igual que el número de barras para un retraso, ...

1.1.4 Cerrar una posición de venta

1.2 Si su tipo es OP_SELL, ...

1.2.2 Si hay una posición abierta OP_BUY, ...

1.2.3 Si el tiempo de la barra actual menos el tiempo de apertura de la posición de compra es mayor o igual que el número de barras para un retraso, ...

1.2.4. cerramos la posición de compra

Gracias por el algoritmo, es mucho más complicado de lo que esperaba(

Podrías hacer un boceto del código en general, porque me ha costado mucho escribir el anterior, pero no he podido encontrar EAs similares....

¡No encuentro EAs similares, pero estaría muy agradecido!

 
Antes de intentar resolver un problema al límite, es mejor intentar evaluar si la solución es realmente necesaria.
Puedes encontrar muchas funciones similares aquí - Funciones útiles de KimIV. También hay uno listo para su tarea.
 

Hola.

Por favor, ayúdenme a encontrar un error. El código cuenta la suma de los valores de RangeX0_D1

El resultado es sólo el último (sexto) miembro de la secuencia.

Gracias de antemano.

  int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  = (iHigh(NULL,1440,k)-iLow(NULL,1440,k))/Point;
    if (RangeX0_D1>0)
    RangeX0_D1++;
   }
 
int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  += (iHigh(NULL,1440,k)-iLow(NULL,1440,k))/Point;
   }
 
FAQ:
Gracias por su ayuda, precisión y rapidez :)
 
nemo811:
Gracias por su ayuda, precisión y rapidez :)


Para acelerar los cálculos, es mejor hacer las cosas de forma un poco diferente

int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  += (iHigh(NULL,1440,k)-iLow(NULL,1440,k));
   }
   RangeX0_D1 /= Point;

Dividir lleva mucho tiempo. Es mejor hacerlo una vez.

 
Buenas tardes, ¿podrían decirme por qué no se pueden subir las cotizaciones del 10 de junio al 22 de septiembre de este año? He hecho dos o tres cargas del historial y todas tienen el mismo hueco en los datos.
 
Buenas tardes, un consejo: El bucle busca los valores que cumplen ciertas condiciones. Los valores encontrados se escriben en un array. No se sabe de antemano cuántos valores se van a encontrar, por lo que se desconoce el tamaño del array a declarar. Desde el punto de vista del tiempo y los recursos, preferiría no hacer dos ejecuciones (para poder contar el número de valores encontrados en la primera ejecución, declarar el array y escribir datos en el array en la segunda). ¿Hay alguna forma de obtener el resultado deseado en una sola pasada?
 
Elenn:
Buenas tardes, un consejo: El bucle busca los valores que cumplen ciertas condiciones. Los valores encontrados se escriben en un array. No se sabe de antemano cuántos valores se van a encontrar, por lo que se desconoce el tamaño del array a declarar. Desde el punto de vista del tiempo y los recursos, preferiría no hacer dos ejecuciones (para poder contar el número de valores encontrados en la primera ejecución, declarar el array y escribir datos en el array en la segunda). ¿Hay alguna forma de obtener el resultado deseado en una sola pasada?

Se puede declarar una matriz de longitud "infinita" en el indicador. Decláralo y luego en el bucle escribe inmediatamente los valores encontrados en el array. La única pregunta es cómo transferir la selección necesaria al Asesor Experto/Script? Hay algunas herramientas, pero hay que evaluar la complejidad. Tal vez sería realmente más fácil hacer 2 ejecuciones - en la primera, contamos el número de valores filtrados, luego cambiamos la dimensión del array, y en la segunda, introducimos los valores en el array?
 
Elenn:
Buenas tardes, un consejo: El bucle busca los valores que cumplen ciertas condiciones. Los valores encontrados se escriben en un array. No se sabe de antemano cuántos valores se van a encontrar, por lo que se desconoce el tamaño del array a declarar. Desde el punto de vista del tiempo y los recursos, preferiría no hacer dos ejecuciones (para poder contar el número de valores encontrados en la primera ejecución, declarar el array y escribir datos en el array en la segunda). ¿Hay alguna forma de obtener el resultado deseado en una sola pasada?

Declarar el array más grande que el tamaño máximo requerido.