Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 212

 
Aleksei Stepanenko:

Es aún mejor hacer una estructura

no olvides poner a cero los elementos antes de empezar a utilizarlos

y luego aumentar el recuento cuando sea necesario

y luego comparar

Ahora has hecho un bucle alrededor de las 10 velas anteriores en cada nueva vela. Esto no es racional. Siempre hay que deshacerse de los ciclos innecesarios recordando los resultados de los cálculos de los valores anteriores. En tu caso, cuando llegue una nueva vela, sólo tienes que aumentar el recuento cuando se cumpla la condición, y si no se cumple la condición, entonces restarlo. Y comprobar si no hay exceso. Su ciclo para 10 elementos no es necesario, sólo el principal.

Aleksei, he intentado hacerlo, pero sigue sin funcionar bien:

no añade uno a la cuenta.up

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

Es necesario eliminar del bucle

count.up=0;
count.dn=0;

porque en cada iteración se ponen a cero los valores anteriores. Escríbelo antes del bucle.

 
Aleksei Stepanenko:

Es necesario eliminar del bucle

porque en cada iteración se ponen a cero los valores anteriores. Escribirlo antes del bucle

¡Muchas gracias ahora funciona!

Sin embargo, es raro, estaba haciendo lo mismo sin la estructura, pero sólo con valores normales como

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

y comenzaría a sumar cada tic))

 

La estructura también estará en marcha. Para que funcione sólo al inicio de una nueva vela, hay que seguir la hora de esa vela

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Me pueden aconsejar por favor. Tengo funciones personalizadas en archivos separados .mqh los prescribo a través de #include, los llamo en el inicio por secuencia, cuando el inicio va a una función, entonces dependiendo de las acciones el programa necesita acceder a otro archivo .mqh (por ejemplo para obtener el valor del volumen de la orden) y esto no sucede. Si escribo todo en una hoja, funciona o si escribo la fórmula para calcular el lote directamente en los parámetros de apertura de la orden. He mirado las lecciones de MQL4 y he leído la documentación del programa pero no he encontrado nada. Realmente no entiendo por qué una función .mqh no puede interactuar con otra función .mqh dentro de los cálculos. O, ¿debemos hacer que el programa regrese al inicio si nos enfrentamos a tal necesidad - devolvería el resultado al inicio y entonces el inicio con este cálculo volvería a la función abriendo una orden .mqh? Esto es algo basura... ¿O tal vez deberíamos declarar de alguna manera todas las funciones existentes de forma diferente para que interactúen entre sí? Gracias
 
Buenas tardes!
¿Cuál es la forma más fácil de eliminar el año (2020) y los minutos en la línea? ¿TimeToStr aún no tiene otros formatos de salida?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Buenas tardes!
¿Cuál es la forma más fácil de eliminar el año (2020) y los minutos en la línea? ¿TimeToStr aún no tiene otros formatos de salida?
tm=(string)Hour();
 
Vitaly Muzichenko:

Gracias.

 
Denis Diakonov:
¿Puedes darme una pista? Tengo funciones definidas por el usuario en archivos .mqh separados y las tengo escritas a través de #include. Las llamo al inicio y cuando el inicio va a una función, el programa necesita llamar a otro archivo .mqh (por ejemplo, para obtener un valor de volumen de pedido) y eso no sucede. Si escribo todo en una hoja, funciona o si escribo la fórmula para calcular el lote directamente en los parámetros de apertura de la orden. He mirado las lecciones de MQL4 y he leído la documentación del programa pero no he encontrado nada. Realmente no entiendo por qué una función .mqh no puede interactuar con otra función .mqh dentro de los cálculos. O, ¿debemos hacer que el programa regrese al inicio si nos enfrentamos a tal necesidad - devolvería el resultado al inicio y entonces el inicio con este cálculo volvería a la función abriendo una orden .mqh? Esto es algo basura... ¿O tal vez deberíamos declarar de alguna manera todas las funciones existentes de forma diferente para que interactúen entre sí? Gracias

Remitirse a las funciones, no a los archivos, desde las funciones, si se ha conectado a través de un inline. Si le entiendo bien, claro.

 
He intentado reescribir "olyakish_fractals_01" de acuerdo con mi idea, la mía se basa en las barras verdes de Williams. Pero tengo poco conocimiento de MQL4 y no se ve en el gráfico. Si alguien tiene alguna pista, que me ayude, si no le cuesta nada).
Archivos adjuntos:
18wbguVOL.mq4  13 kb