Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 147

 
-Aleks-:

Por favor, ayuda - No puedo entender por qué obtengo cero al calcular la matriz VesMass en valores i>0 ?

Resulta que debería escribir no 4 y 5, sino 4.0 y 5.0 - cuál es la lógica - no me queda claro...
 
-Aleks-:

Resulta que no hay que escribir 4 y 5, sino 4.0 y 5.0 - cuál es la lógica - no me queda claro...
Lea la documentación y se aclarará. Es bueno que lo hayas hecho tú mismo.
 
Alexey Viktorov:
Lea la documentación y se aclarará. Es bueno que lo hayas hecho tú mismo.

Sí, ya había leído sobre algo así, así que decidí probarlo, pero no está clara la lógica que hay detrás... y no pude encontrar la respuesta en la documentación, por cierto.
 
-Aleks-:

Ya había leído sobre algo así, así que decidí probarlo, pero no está clara la lógica que hay detrás... Y no he podido encontrar la respuesta en la documentación, por cierto.


Esta es una peculiaridad no sólo en MCL, en C++ y otros lenguajes de programación también - la división de dos enteros o variables de tipo (int) dará un resultado truncado a un entero. En tu caso 4/5=0.

Puedes escribir 4,0/5 o (doble)4/5 - entonces el resultado es un número real.
 
Vitalie Postolache:


Esto no es sólo una característica de ICL, en C++ y otros lenguajes de programación es lo mismo - dividir dos enteros o variables de tipo (int) dará un resultado truncado a un entero. En tu caso 4/5=0.

Puedes escribir 4,0/5 o (doble)4/5 - entonces el resultado es un número real.

Lo entiendo, pero no entiendo la lógica de la solución, es decir, la necesidad.

 
-Aleks-:

Lo entiendo, pero no comprendo la lógica de la solución, es decir, la necesidad.


Pues no argumentas "por qué 2*2=4 en aritmética, cuál es la lógica de la solución". Lo tomas como un axioma y lo utilizas. Así ocurre con la división de dos enteros.
 
Vitalie Postolache:

Pues no se argumenta "por qué 2*2=4 en aritmética, cuál es la lógica de la solución". Lo tomas como un axioma y lo utilizas. Lo mismo ocurre con la división de dos números enteros.

Lo comprobaré con la adición...

 


Kot:


La línea es una línea de tendencia. He cambiado las propiedades por un rayo. No sirvió de nada. Si quisiera que saliera el precio independientemente de la posición de la barra cero (arriba, abajo).

Este código tampoco funciona.

int inicio() {

double pr=ObjectGetValueByShift("línea",0);

Si (Oferta==pr){

Alerta (pr);}

return(0);}


¿Está bien escrito el nombre de la línea?

Prueba este script, y muestra lo que dice en los registros.

void OnStart()
  {
     double pr;
     int obj_total=ObjectsTotal(); 
     string name;
     int i; 
     
   for(i=0;i<obj_total;i++) 
     { 
      name=ObjectName(i); 
      if(ObjectType(name)!=OBJ_TREND) continue; 
      PrintFormat("Объект %d:     Имя объекта - %s",i,name); 
      pr=ObjectGetValueByShift(name,0);
      PrintFormat("Объект %d:     Цена - %.5f",i,pr);
      
     }  

}

El script detecta el objeto y escribe el nombre correctamente. Pero el precio es absolutamente de izquierdas. Está marcado en la foto con una línea horizontal. Da estos precios independientemente de que las barras hayan cruzado la línea o no.

Archivos adjuntos:
23.png  62 kb
 
Kot:


La línea tiene tendencia. Se han cambiado las propiedades a rayo. No ayudó. Lo ideal es que el precio se muestre independientemente de la posición de la barra cero (arriba, abajo).

Este código tampoco funciona.

int inicio() {

double pr=ObjectGetValueByShift("línea",0);

Si (Oferta==pr){

Alerta (pr);}

return(0);}

La oferta puede saltar fácilmente su línea, no está obligada a detenerse en cada punto (es decir, no obtendrá la igualdad exacta).

cambiar la condición a por ejemplo si ((MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) o similar...

 
Maxim Kuznetsov:

La oferta puede saltar fácilmente su línea, no está obligada a detenerse en cada punto (es decir, no se producirá la igualdad exacta)

cambiar la condición a por ejemplo si ((MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) o similar...


¡Gracias! He captado la idea.

¿Y si la situación es diferente? Hay líneas horizontales con diferentes nombres en el gráfico. Es necesario que el script calcule qué línea corresponde a qué precio.