Errores, fallos, preguntas - página 440

 
Renat:
Por favor, calcule el resultado de su valor negativo y correlaciónelo con 32 bits de int, luego lea sobre desbordamiento aritmético y encuentre sus 17 días.

Bienvenido al mundo de la programación real.

No he hecho la pregunta "¿de dónde vienen los 17 días? Lo repito: identifiqué una situación que no entendía en el probador, me la conté y recibí la explicación de que (1) la función Sleep( ) funciona también con valores negativos y da un retardo distinto de cero, (2) el trabajo de la función Sleep() está emulado en el probador. Si los desarrolladores lo consideran aceptable, ¿qué puedo devolver? No es necesario calcular exactamente 17 días.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
stringo:
¿Qué sugieres? ¿Terminar el programa en caso de emergencia?
Es difícil sugerirlo sin saber cómo funciona el sistema. Mi objetivo es sondear la pregunta y luego depende de ti. Esta vez resultó que la pregunta encaja plenamente en la ideología actual de la terminal. Bueno, entonces, sabré más.
 
uncleVic:

Sí. No vimos el elefante.

Tengo una fuerte sospecha sobre esa línea:


y en este caso:

Me parece que el compilador no debería pasar por alto esto. ¿Tienes qué? ¿Ni siquiera una advertencia? Si no es así, póngase en contacto con el Servicio de Atención al Cliente. ¿De acuerdo?


solicitud#154746

¿Cómo se obtiene el número de secuencia del elemento con el valor máximo/mínimo en la matriz s1.open?

 
Yedelkin:

En este caso me bastaría con una instrucción en la sección "Función Sleep" ... (2) "La función Sleep() es totalmente compatible con el probador".

Hemos destacado las principales cuestiones sobre las pruebas en un artículo separado, "Fundamentos de las pruebas en MetaTrader 5". Aquí hemos tratado de explicar la mayoría de los matices del uso de varias funciones en el probador. También hemos explicado las funciones Sleep():

Función Sleep() en el probador

La función Sleep() permite suspender durante un tiempo la ejecución de un programa mql5 en un Asesor Experto o en un script, cuando se trabaja en un gráfico. Esto puede ser necesario cuando se solicitan algunos datos, que en el momento de solicitarlos no están listos y hay que esperar a que lo estén. Un ejemplo detallado del uso de la función Sleep() se encuentra en la sección Organización del acceso a los datos.

En el probador, las llamadas a Sleep() no retrasan el proceso de prueba. Al llamar a Sleep(), los ticks generados se "reproducen" dentro del retardo especificado, lo que puede activar órdenes pendientes, stops, etc. Después de llamar a Sleep(), el tiempo simulado en el probador se incrementa en el intervalo especificado en el parámetro de la función Sleep.

Si, como resultado de la ejecución de Sleep() el tiempo actual en el probador excede el final del periodo de prueba, se recibirá un error de "bucle infinito en Sleep". Si se produce un error de este tipo, los resultados de las pruebas no se descartan, se completan todos los cálculos (número de operaciones, reducción de la deuda, etc.) y los resultados se pasan al terminal.

La función Sleep() no funcionará en OnDeinit() ya que después de su llamada se garantiza que el tiempo de prueba está más allá del intervalo de prueba.



Figura 7. Esquema de uso de la función Sleep() en el probador de terminales de MetaTrader 5.

 
Rosh:

Hemos cubierto específicamente las principales cuestiones de las pruebas en nuestro artículo separado, Fundamentos de las pruebas en MetaTrader 5. En él, hemos tratado de explicar la mayoría de los matices del uso de varias funciones en el probador. También hemos explicado la función Sleep():

Lo siento, la culpa es mía, hace 9 meses que no lo pruebo y se me pasó el artículo.

Estaría bien que se mencionaran los artículos clave en las secciones correspondientes de la Guía de referencia (ya sugerí algo parecido el año pasado, pero hoy es una buena oportunidad para hacerlo de nuevo). Al fin y al cabo, todos usamos la F1.

 
Es decir, no has hecho lo que te pedí.

Tienes a varias personas aquí tratando de señalar tu simple error con el desbordamiento aritmético.
 
Renat:
Es decir, no hiciste lo que te pedí.

Tienes a varias personas aquí tratando de señalar tu simple error de desbordamiento aritmético.

==============================================================

Tú lo has preguntado:

Renat:
Serías tan amable de calcular el resultado de tu valor negativo, correlacionarlo con 32 bits de int, luego leer sobre desbordamiento aritmético y encontrar tus 17 días...

Respondí: Sí. No hice la pregunta "¿de dónde vienen exactamente 17 días?" :) etc.

Respondiendo a su pregunta actual. Lo que pediste - no lo hice. Porque lo hice yo ayer (tenía datos iniciales ligeramente diferentes, pero la esencia de lo que entendí). Si alguien hubiera compilado ese script, habría recibido hasta dos avisos. Desbordamiento/corte - Yo mismo me ocupé de eso ayer.

Las preguntas eran por qué (1) la función opera con valores negativos del argumento y (2) da un retraso en el probador para tales argumentos. Sin embargo, vuelves a señalar un "error de programación" con un desbordamiento de tipo int. - Es decir, usted rechaza mi muestra de prueba sólo porque se especificó "valor desbordado" al seleccionar el argumento de la función Sleep(). Pero la cuestión no está en el "valor desbordado". Es sólo un toque adicional a la muestra de la prueba. Parece que los participantes en el debate lo han entendido. Al final, puede insertar "valor no desbordante" en el ejemplo de la prueba: en igualdad de condiciones, la esencia de la pregunta seguirá siendo la misma (la pregunta en sí ya ha sido tratada).

De todos modos, gracias por el consejo. Porque si el compilador no te hubiera avisado, probablemente tu consejo te hubiera venido bien y te hubiera hecho pensarlo dos veces.

 

¿Cuáles son las limitaciones de su uso? W =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_PIXELS,0);
H =(long)ChartGetInteger(Chart_ID[i],CHART_HEIGHT_IN_PIXELS,0);
W_B =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_BARS,0);

Llamando a la función desde void OnInit() todo es correcto, pero desde void OnTick() los datos son incorrectos en concreto CHART_WIDTH_IN_BARS da el número de barras visibles, aunque entiendo que debería dar el número de barras que caben en el gráfico sin desplazamiento

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Virty:

Perdón por la pregunta primitiva.

La consulta comercial no se está ejecutando. Error 10014 - volumen erróneo en la solicitud.

¿Cómo puedo entender/calcular desde dentro del EA cuál es el volumen de lote máximo y mínimo que puedo comprar en este momento?

La función OrderCheck no es adecuada, porque sólo comprueba y no dice cuántos lotes se pueden comprar.

Mira la enumeración ENUM_SYMBOL_INFO_DOUBLE y la función correspondiente. ¿Se refiere a esto?
 
Yedelkin:
Véase la enumeración ENUM_SYMBOL_INFO_DOUBLE y la función correspondiente. ¿Es eso lo que quieres decir?
Sí. Gracias. SYMBOL_VOLUME_MAX lo encontré yo mismo, y tú me ayudaste.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5