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

 

Cuando se trabaja con números del tipo double, cuando se necesita asignar algún valor a una variable (por ejemplo, el cero), diferentes autores tienen diferentes grafías. Por ejemplo, a=0; o a=0,0; o a=0,0000; ¿Hay alguna diferencia en cuanto al funcionamiento correcto del programa?

 

if ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) | (OrderMagicNumber()==55)) && (ticket==0)){

OrderDelete(OrderTicket());

int err1=GetLastError();

Print(err1);}

Este trozo de código ha estado funcionando bien durante un tiempo... ahora se devuelve un error ERR_OFF_QUOTES. Tenga en cuenta que el error es devuelto por OrderDelete, incluso si el número de ticket se introduce manualmente. ¿Puede alguien aclarar la situación? Gracias.

 
Elenn:

Cuando se trabaja con números del tipo double, cuando se necesita asignar algún valor a una variable (por ejemplo, el cero), diferentes autores tienen diferentes grafías. Por ejemplo, a=0; o a=0,0; o a=0,0000; ¿Hay alguna diferencia en cuanto al funcionamiento correcto del programa?


No, no hay ninguna regla. Pero personalmente, prefiero escribir valores dobles constantes utilizando un punto.

Por ejemplo:

if ( a == 1.0 )
{}

// ...

b = 3.0;

En primer lugar, un rápido vistazo al texto muestra que el tipo de valor es doble.

En segundo lugar, evita algunos errores. Compara:

double a=2/3;
double b=2.0/3.0;

Print("a=",a," b=",b);
 

Por favor, ayuda. No quiere ejecutar el código:

int inicio()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
volver;

}

Es decir, como se pretende, si la vela es ascendente - abierta.

Todo se compila. Pero no ocurre nada durante la prueba. Es decir, no hace ningún pedido. Haz un agujero en el error, por favor...

 
NaVolne:

Por favor, ayuda. El código no quiere ejecutarse:

int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
volver;

}

Es decir, si la vela está subiendo, se abre.

Todo se compila. Pero no ocurre nada durante la prueba. Es decir, no hace ningún pedido. Por favor, señale el error con el dedo.

¿Qué vela es la actual en el gráfico? ¿La vela del día anterior? ¿La vela de la semana anterior? Si es la vela del día anterior, por ejemplo... se vería así

if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) la ayuda iOpen/iClose lo describe claramente

 
NaVolne:

Por favor, ayuda. No quiere ejecutar el código:

int inicio()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
volver;

}

Es decir, como se pretende, si la vela está subiendo, se abre.

Todo se compila. Pero no ocurre nada durante la prueba. Es decir, no hace ningún pedido. Haz un agujero en el error, por favor...

La cuestión es que PRICE_CLOSE y PRICE_OPEN son constantes, no funciones y no matrices de series temporales. Para obtener los valores de los precios de apertura y cierre de las velas, tenemos que referirnos a funciones(iOpen e iClose) o a matrices de series temporales(Open y Close).

Para saber más, lea el tutorial; por ejemplo, en esta sección se explican las variables predefinidas (que incluyen las matrices de series temporales que desee, Open y Close).

 
Elenn:

Cuando se trabaja con números del tipo double, cuando se necesita asignar algún valor a una variable (por ejemplo, el cero), diferentes autores tienen diferentes grafías. Por ejemplo, a=0; o a=0,0; o a=0,0000; ¿Hay alguna diferencia en cuanto al funcionamiento correcto del programa?

Entiendo que en el caso de

double a = 1;

El compilador toma "1" como un valor de tipo int y se realiza la conversión de tipo (int a tipo double de destino).

Y en caso de:

double a = 1.0

o (no hay diferencia)

double a = 1.0000

el compilador ve "1.(xxxx)" como un valor del tipo double y no se realiza la conversión de tipo.


P.D.: Gracias a PapaYozh por el ejemplo. Los pensamientos anteriores vinieron después.

Supongo que es más fácil para el compilador cuando no cita los tipos demasiadas veces. ¿O quizás también hay líneas con tipos "no convertidos" en ex4? ¿Significa esto que el rendimiento está disminuyendo? Aunque se supone que el compilador optimiza el código.

Que los programadores de MQL4 más experimentados me corrijan.

 
Gracias por las mega respuestas. Leer, profundizar.
 
NaVolne:
Gracias por las mega respuestas. Leer, profundizar.
Deberías leer el libro de texto, ¡no nuestras respuestas! :)) De corteza a corteza, naturalmente.
 
LexAlex:

Este trozo de código funcionaba bien hasta hace poco... ahora se devuelve el error ERR_OFF_QUOTES. Tenga en cuenta que el error es devuelto por OrderDelete, incluso si el número de ticket está escrito a mano. ¿Puede alguien aclarar la situación? Gracias.

Quizá esté en el nivel de congelación. Tal vez algo está mal con la cuenta y el corredor ha detenido el flujo debido a las transacciones frecuentes en la cuenta.
Razón de la queja: