[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 321

 
hoz:

https://www.mql5.com/ru/forum/144705 Aquí, he iniciado un hilo separado. Tiene todos los detalles de lo que se necesita.


Sí, es más divertido con la fuente completa. Inmediatamente visible, lo que desde donde y donde pasa, lo que el infierno y cuántas veces. Eso es lo que me llamó inmediatamente la atención:

hoz:
int GetStateOfMA()
{
   if (GetMA(1) > GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_UP");
       return (CROSS_UP);
   }
       
   if (GetMA(1) < GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_DN");
       return (CROSS_DN);
   }
       
    pr ("GetStateOfMA() = CROSS_NO");
    return (CROSS_NO);
}

Se puede simplificar hasta prácticamente una línea:

int GetStateOfMA(){
   if(GetMa(2)==GetMa(1)) return(0); else return(MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1)));
}

Aquí devolvemos cero o el signo de la diferencia (más o menos). Véase: el módulo de un número dividido por el propio número es prácticamente lo mismo que dividir un número entre un número, es decir, uno, sólo que si el número era negativo, naturalmente se devuelve menos uno.

Para entenderlo mejor.

 
gyfto:


Sí, es más divertido con la fuente completa. Inmediatamente visible, lo que desde donde y donde pasa, lo que el infierno y cuántas veces. Eso es lo que me llamó inmediatamente la atención:

puede simplificarse a casi una línea:

Aquí devolvemos cero o el signo de la diferencia de valores (más o menos). Véase: el módulo de un número dividido por el propio número es casi lo mismo que dividir un número entre un número, es decir, uno, sólo que si el número era negativo, naturalmente se devuelve menos uno.

Para entenderlo mejor.


La facilidad con la que se comparan dos números reales
 
gyfto:


Sí, es más divertido con la fuente completa. Puedes ver de un vistazo qué se pasa de dónde y dónde, qué demonios y cuántas veces. Eso es lo que me llamó inmediatamente la atención:

puede simplificarse a casi una línea:

Aquí devolvemos cero o el signo de la diferencia de valores (más o menos). Véase: el módulo de un número dividido por el propio número es casi lo mismo que dividir un número entre un número, es decir, uno, sólo que si el número era negativo, naturalmente se devuelve menos uno.

Lo investigaré más a fondo.

Sí, tiene sentido. Pero, ¿por qué tengo que pasar por todas estas molestias? :)gyfto, veo que tú, por cierto, como yo, tiendes a universalizar todo. Yo diría más. Aquí se puede añadir una variable para el tamaño de la desviación, y así filtrar los cruces pequeños de las medias. Es más o menos comprensible, pero la legibilidad no será especialmente útil. Después de todo, el valor de la función tendrá que ser comparado con 0. Como <0 o >0.

Vinin:

La facilidad con la que se comparan dos números reales.

Si no nos interesa la varianza, ¿qué nos detiene? ¿Dónde se estipula eso?
 
Vinin:

La facilidad con la que se comparan dos números reales

¿Quieres decir que double dividido por double seguirá siendo double, y que return sólo puede devolver int? Bueno, puedes definir localmente int temp; y asignarle, y return(temp);
 
gyfto:

¿En el sentido de que double dividido por double seguirá siendo double, y return sólo puede devolver int? Bueno, puedes definir localmente int temp; y asignarle, y return(temp);
Dos números en coma flotante obtenidos tras el cálculo casi nunca serán iguales. O más bien, lo más frecuente es que no sean iguales, cuando tú crees que deberían serlo.
 
gyfto:

y return sólo puede devolver int?

No. Puedes devolver lo que quieras. No necesariamente int. Después de todo, si la función es de tipo double, ¿cómo va a devolver int desde ella?
En principio no hay ninguna diferencia, lo principal es devolver de una función de un tipo determinado, el mismo retorno. Así es como yo lo entiendo.

Zhunko:
Dos números en coma flotante obtenidos tras el cálculo casi nunca son iguales. O más bien, lo más frecuente es que no sean iguales, cuando tú crees que deberían serlo.

Entonces, ¿tienes que poner constantemente alguna variable dist para comparar la diferencia entre los mashups que estás comparando? Quiero decir como:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
 
hoz:

una tendencia a hacer que todo sea universal.


No, según mi psicología, tal y como me analizo a mí mismo, es más un deseo de hacer un programa para la gente, no sólo para mí.

hoz:

¿Por qué se torce tanto?


Probablemente no me creas, pero es la falta de escolaridad. Lo siento. El caso es que, cuando dejé la escuela (6º curso), los niños de esa edad siguen teniendo una viva curiosidad infantil, una sed de conocimiento. Luego, en el instituto, el sistema escolar acaba con todo eso. Ahora tengo más de treinta años, pero sigo teniendo esa viva curiosidad y todavía no soy consciente de esas restricciones condicionales, no soy consciente de lo que es "canijo" y lo que es "pervertido", porque para mí todo es "canijo". Lo siento...

hoz:
Zhunko:
Dos números en coma flotante, obtenidos tras el cálculo, casi nunca serán iguales. O más bien, lo más frecuente es que no sean iguales, cuando tú crees que deberían serlo.


Entonces, ¿es necesario establecer constantemente algún tipo de variabledist para comparar la diferencia entre los mashups que se comparan? Quiero decir como:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
Sí, es cierto, es lógico.
 
gyfto:

Probablemente no me creas, pero lo que sale es la falta de escolarización. Lo siento. El hecho es que cuando dejé la escuela (6º grado), los niños de esa edad todavía tienen una viva curiosidad infantil, una sed de conocimiento. Luego, en el instituto, el sistema escolar acaba con todo eso. Ahora tengo más de treinta años, pero sigo teniendo esa viva curiosidad y todavía no soy consciente de esas restricciones condicionales, no soy consciente de lo que es "canijo" y lo que es "pervertido", porque para mí todo es "canijo". Lo siento...


En realidad, soy algo educado, pero enseñé lo que necesitaba, ignorando el resto puramente. Resultó que no me interesaban muchas cosas, y me aparté de esas cosas triviales (historia, geografía, etc.). Yo no lo creo, no como otros. Pero su enfoque es realmente peculiar. Inmediatamente pensé que su educación no es escasa, sino que, por el contrario, es algo así. Porque no entendí inmediatamente todo de los análisis anteriores.
 
hoz:
El enfoque es peculiar.


Me explico con otras palabras: esto es autodidacta, yo soy autodidacta de toda la vida, así que NO sé qué enfoque has adoptado. NO sé lo que es aceptado por ustedes, lo que no lo es.

Bien, volvamos a las velas. Supongamos que tenemos i_AnyBarsToHistory = 30, i_ѕеqceptBarsConnt = 3. Si en una ventana de 30 velas cntUp == i_ѕеԛceptBarsCount y cntDn == i_ѕеԛceptBarsCount una vez, entonces ¿qué debería pasar? ¿O siempre cuenta un solo contador por pasada?

Sí, y por qué salimos del bucle prematuramente antes de llegar a Close[1].

 

Ayuda, no consigo averiguar cómo hacer que un indicador compare un número determinado de barras recientes y calcule cuántas de ellas fueron alcistas, cuántas bajistas y cuántas fueron pinbars y quiénes tuvieron qué precios de cierre/apertura, máximos/mínimos y volúmenes?

Tenemos que hacerlo específicamente en el indicador.