![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Escriba al Service Desk con todos los detalles (adjunte un experto si es necesario). Será más rápido.
Es posible que esté utilizando un gran tamaño de las variables locales de la función, por ejemplo, las matrices.
En la siguiente compilación, para el terminal de 32 bits, puede controlar el tamaño de la pila con la correspondiente propiedad del compilador #property stacksize
¿Sólo es un problema con los terminales de 32 bits? Tengo x64. ¿Cómo se entiende "...el gran tamaño de las variables locales de la función, por ejemplo, las matrices... "¿Qué tamaño debe tener para que la pila acabe desbordándose?
Pero si el programador no especifica el tamaño de pila necesario manualmente usando una propiedad, el EX5 en el terminal trabajará con el tamaño de pila por defecto ( 256Kb).
Sobre el tamaño grande.
Cada declaración de variable dentro de una función (excepto las variables estáticas) asigna espacio en la pila, y la asignación de espacio en la pila para las variables locales se produce en cada llamada.
Por lo tanto, si una función tiene variables locales de 64Kb, el espacio de la pila es suficiente para 3 llamadas, y el desbordamiento de la pila se produce a las 4 llamadas (ya que parte de la pila se utiliza para las necesidades internas del terminal). Por lo tanto, si hay una necesidad de datos locales grandes, es mejor utilizar la memoria dinámica - cuando se entra en la función, la memoria para las necesidades locales se asigna en el sistema (new, ArrayResize) y cuando se sale de la función, la memoria se elimina (delete, ArrayFree).
¡Hola!
No puedo entender este problema.
filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);
En la depuración funciona bien, leemos el archivo en MT5\MQL5\File\.
Cuando se ejecuta en el probador, dice "Symbols.txt file could not be opened, error 5004" y Handel -1
También lo he metido en la carpeta MT5\tester\agent000\MQL5\File, pero no lo ve de nuevo y mata el archivo allí en absoluto).
Al mismo tiempo, la descripción dice:
"El archivo se abre en la carpeta del terminal del cliente en la subcarpeta MQL5\files (o catalog_agent_testing\MQL5\files en caso de pruebas)".
"La función busca un archivo en la carpeta local (MQL5\Files o MQL5\Tester\Files en caso de prueba)".
No tengo la carpeta "MQL5\Tester\Files" como dice la Ayuda?
¿Qué estoy haciendo mal y cómo puedo superar este problema?
Gracias por su respuesta.
Pruebe a utilizar la propiedad #archivo_de_prueba:
#property tester_file "My\\Symbols.txt"
Pruebe a utilizar la propiedad #archivo_de_prueba:
Ugh-uh-x Parecía ayudar en el MT5\tester\agent000\MQL5\File poner de nuevo, entonces funciona con la propiedad.
Gracias.
He vuelto a probar el probador con Handle -1 y error 5004.
No sé qué más puede ser, evidentemente no encuentra el archivo, pero puede ver todo cuando se depura.
Copiar el archivo en MQL5\Tester\Files ( crear una carpeta de antemano).
Lo he intentado, he creado dichas carpetas manualmente, he puesto mi archivo (con subcarpeta, deshabilitado #propiedadarchivo_de_prueba), no lo encuentra en el probador de ninguna manera.
Y si conectas #property tester_file, funciona extrañamente.
Sin embargo, de vez en cuando se bloquea una carpeta y un archivo en MT5\tester\agent000\MQL5\File, probablemente debido al hecho de que si se deshabilita #property tester_file se rompe todo allí.
Sí, ahora he descubierto que si cambio el código (en cualquier parte) en el archivo mq5 (desde el que se llama al txt), luego lo compilo y voy al probador, se rompe todo en MT5\tester\agent000\MQL5\File
Es un milagro, pero al menos funciona, y eso es bueno.
Lo he intentado, he creado dichas carpetas manualmente, he puesto mi archivo (con subcarpeta, deshabilitado #propiedadarchivo_de_prueba), no lo encuentra en el probador de ninguna manera.
Y si conectas #property tester_file entonces extrañamente funciona.
Sin embargo, de vez en cuando se bloquea una carpeta y un archivo en MT5\tester\agent000\MQL5\File, probablemente debido al hecho de que si se deshabilita #property tester_file se rompe todo allí.
Sí, ahora he descubierto que si cambio el código (en cualquier parte) en el archivo mq5 (desde el que se llama al txt), luego lo compilo y voy al probador, se rompe todo en MT5\tester\agent000\MQL5\File
Es un milagro, pero al menos funciona, y eso es bueno.
Si es W7, ponga el archivo en el directorio Document and Setting/.../MetaQuotes/Common/Files, o desactive el UAC
P.D.: compruebe de nuevo la exactitud de la ortografía del nombre, en qué diseños está escrito el nombre (mejor, sin duda, una copia), la disponibilidad de espacio al final del nombre, etc.
Si es W7, ponga el archivo en Document and Setting/.../MetaQuotes/Common/Files, o desactive el UAC
PS de nuevo comprobar la corrección de la ortografía del nombre, en el que se escribe el nombre (es mejor para copiar), la presencia de un espacio al final del nombre y así sucesivamente.
Realmente tengo Win7 64bit, pero el UAC es cero.
C:\NDocumentos y configuraciones\NTodos los usuarios\NMetaQuotes\NTerminal\NCommon\Files\NPuse mi carpeta y archivo ahí, no ayudó, no encuentra el archivo en el probador.
Sí, creo que todo es correcto con el nombre, en #property t ester_file en la prueba funciona (y en la depuración funciona en cualquier ), pero en el probador de ninguna manera, excepto como sólo a través de #property tester_file.
Y con el problema antes mencionado de matar el archivo después de cambiar y compilar mq5 (tengo un diseño así).
Tienes una mentira descarada escrita en tu ayuda:
CLBufferWrite
Escribe un array en el buffer de OpenCL.
CLBufferWrite(
intbuffer/manejador del buffer OpenCL
const void&data[]// matriz de valores
uintoffset=0// desde qué elemento, por defecto es desde el primero
voidsize=WHOLE_ARRAY// número de valores, todo el array por defecto
);
Parámetros
......offset
.....
tamaño
[in] El número de valores a escribir. Por defecto, todos los valores del array se escriben en el buffer de OpenCL.
......En realidad escribe el número de bytes (!!!), no los valores en absoluto.
Pasé dos noches depurando el indicador, ¡hasta que lo resolví! ¿Y por qué? - Porque creí en su escritura...
¡¡¡ARRÉGLALO YA!!! :))
// No lo descubrí a tiempo, porque el valor por defecto ( size=WHOLE_ARRAY) funciona correctamente.