Errores, fallos, preguntas - página 2021

 

Jugando al bicho

  1. Ir a Metaquotes-Demo.
  2. Sólo el AUDJPY está en el panorama del mercado y abre su gráfico.
  3. Recargue el terminal y espere a que se produzca una conexión completa: las cotizaciones están en camino.
  4. Ejecutar el script en el gráfico

void OnStart()
{  
  for (int i = 0; i < 5; i++)
    Print(SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE));
}


El resultado es el siguiente

2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0


Reinicia.

2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851


Es decir,SYMBOL_TRADE_TICK_VALUE devuelve ceros en la primera ejecución si no se utiliza Sleep();


HI Sobre el tema del símbolo invisible en Market Watch. Si intenta abrir el gráfico del USDJPY (pulse Enter e introduzca "USDJPY") antes de iniciar el script, no funcionará. Si después de ejecutar el script funciona. Aunque la vigilancia del mercado no ha cambiado.

 
fxsaber:

Jugando al bicho

  1. Ir a Metaquotes-Demo.
  2. Sólo el AUDJPY está en el panorama del mercado y abre su gráfico.
  3. Recargue el terminal y espere a que se produzca una conexión completa: las cotizaciones están en camino.
  4. Ejecutar el script en el gráfico


El resultado es el siguiente


Reinicia.


Es decir,SYMBOL_TRADE_TICK_VALUE devuelve ceros en la primera ejecución si no se utiliza Sleep();


HI Sobre el tema del símbolo invisible en Market Watch. Si intenta abrir el gráfico del USDJPY (pulse Enter e introduzca "USDJPY") antes de iniciar el script, no funcionará. Si después de ejecutar el script funciona. Aunque la vigilancia del mercado no ha cambiado.

Añade este bucle al principio del script

   for(int i = 0; i < SymbolsTotal(true); i++)
     Print(SymbolName(i, true));

Y ver cuántos símbolos se imprimen.

En la primera ejecución, el acceso a AUDJPY sólo añade AUDUSD y USDJPY a la visión general del mercado y sólo en la segunda llamada a través de estos pares obtiene la propiedad del símbolo. Esto es lo que está causando el problema con OrderCalcMargin en mi caso.

 
fxsaber:

Se ha escrito sobre ello muchas veces. Por alguna razón no lo corrigen.

He recibido una respuesta del servicio de atención al cliente. Lo arreglarán.
 

Hola a todos.

Ayuda para un principiante, por favor.

Se ejecuta la función para encontrar el máximo del precio. ¿Cómo es posible calcular y devolver al código el NÚMERO DE BARRA con un precio máximo determinado?

 
Alexey Viktorov:

Añade un bucle como este al principio del script

Y ver cuántos caracteres se imprimen.

En la primera ejecución, el acceso a AUDJPY sólo añade AUDUSD y USDJPY a la visión general del mercado y sólo en la segunda llamada a través de estos pares obtiene la propiedad del símbolo. Esto es lo que está causando el problema con OrderCalcMargin en mi caso.

Creo que se va a resolver cómo hacerlo.

Anatoli Kazharski:
He recibido la respuesta del Servicio de Atención al Cliente. Lo arreglaré.

Gracias.

 

En cuanto al error "alrededor" de OrderCalcMargin() hizo una Aplicación al SR

 
Kirill Belousov:

Es difícil estar seguro cuando hay unacontradicción directa en la ayuda de MQL4/5:

...Recuerde que los parámetros se pasan al revés en la función, es decir, primero se calcula y se pasa el último parámetro, luego el penúltimo, y así sucesivamente. El parámetro que viene primero después del paréntesis de apertura se calcula y se pasa a su vez.


..
.Nótese queel orden de las expresiones x1,..., xn está garantizado.

¿Cuál es la contradicción aquí? Es al revés y ya está. No hay ninguna afirmación contraria.
 
Alexey Navoykov:
¿Cuál es la contradicción? Es al revés y ya está. No hay ninguna declaración contraria.

- Estas dos recomendaciones se encuentran en secciones separadas de la ayuda.

Cuando se lee bajo

"Llamada a una función con argumentos x1, x2,..., xn"

elorden de las expresiones x1,....,xn está garantizado, ¿en qué orden estás pensando?

¿Sobre el orden x1,...,xn o sobre el orden xn,....,x1 ?

 
Kirill Belousov:

- Estas dos recomendaciones se encuentran en secciones separadas de la ayuda.

Cuando se lee bajo

"Llamada a una función con argumentos x1, x2,..., xn"

elorden de las expresiones x1,....,xn está garantizado, ¿en qué orden estás pensando?

¿El orden x1,...,xn o el orden xn,....,x1 ?

Sí, tienes razón, es confuso.

Sin embargo, creo que es una mala práctica establecer la lógica del propio algoritmo en un orden particular de los argumentos en cualquier caso. Más aún cuando estos cálculos de derecha a izquierda confunden la comprensión del código. Por eso, si quieres aplicarlo, debes hacerlo sólo en algunos lugares no críticos como la impresión.

 
Kirill Belousov:

El orden de cálculo de las expresiones en Print() es de derecha a izquierda. Más o menos... Adiós... También lo he comprobado de antemano :)

Referencia MQL5\N-Básicos del lenguaje\N-Operacionesy expresiones\N-Otras operaciones

Llamada a una función con argumentos x1, x2,..., xn

Tenga en cuenta que el orden de las expresiones x1,..., xn está garantizado.

Demuestra una vez más la utilidad de la palabra clave inline de C++ (aquí se opinó que está supuestamente obsoleta).
Entre otras cosas, inline significa en realidad que el programador se niega a utilizar el orden de cálculo de los parámetros de la función y si el compilador decide hacer una función inline, el compilador puede utilizar el orden de cálculo hacia delante como más eficiente (el orden de cálculo inverso es obviamente eficiente sólo para las funciones invocables).
Al mismo tiempo, si el compilador decide incrustar una función no inline, debería utilizar el orden inverso (general) de evaluación, aunque esto conlleve una pérdida de eficiencia (porque el programador asumió este orden sin haber declarado la función inline)

inline también sería apropiado en MQL, donde el orden de cálculo no puede ser controlado explícitamente

Razón de la queja: