![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
No, no es sólo un problema de los terminales de 32 bits. Pero la solución para el terminal de 32 bits está lista para hoy mientras que en el terminal de 64 bits todavía hay una limitación de pila en 256Kb.
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).
Gracias por la detallada explicación. Pero definitivamente ese no es mi problema. Intentaré escribir un Expert Advisor de prueba para detectar este error, ya que la función en la que crecen las patas ya se encuentra y no hay tales volúmenes (64Kb - 256Kb). Enviaré a un experto al Servicio de Atención al Cliente con la función del problema por la noche entonces.
Una pregunta más (y una petición de explicación en la ayuda) sobre el trabajo de la misma función(CLBufferWrite()).
Si escribo la información directamente desde el buffer del indicador con la bandera ArrayIsSeries activada (==true), ¿en qué dirección se leerá el array de entrada?
Sospecho que la bandera será ignorada, y además no está claro desde qué lugar se leerá... ¿El desplazamiento se contará desde el final físico del array o desde el principio?
Por supuesto, voy a soplar en el agua por si acaso (voy a trabajar con ArrayIsSeries== false), pero todavía ?
offset - estas funciones son realmente offsets en bytes desde el principio del buffer OpenCL y el array pasado a la función será copiado desde el elemento nulo sin tener en cuenta la bandera ArrayIsSeries.
1) Actualmente, la funcionalidad de trabajar con el buffer OpenCL no está completa y será añadida/actualizada.
2. offset - estas funciones son en realidad un offset en bytes desde el principio del buffer OpenCL mientras que un array pasado a la función será copiado desde el elemento cero sin tener en cuenta la bandera ArrayIsSeries.
1. Más o menos lo sospechaba... :)
Por lo tanto, no hay manera de escribir directamente desde el búfer del indicador en partes (por ahora).
Una buena idea es, por supuesto, hacer que las posiciones de partida sean móviles tanto en la fuente como en el receptor. Como aquí:
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
Con la indexación (dirección y unidades (bytes/elementos)) por favor sea más cuidadoso en la ayuda. :)))
--
Gracias por la respuesta, realmente aprecio sus esfuerzos para mejorar la funcionalidad.
Esperaré pacientemente a que continúe el banquete. Mientras tanto, tendré que bailar en el filo de una daga. :)
Build 597 x64, recién instalado.
2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
Esto no ha ocurrido nunca antes.
// Win7 x64
Build 597 x64, recién instalado.
Antes no era así.// Win7 x64.
Prueba a recompilar el ejemplo. Lo he comprobado: me funciona.
Ya lo he recompilado cien veces. Voy a reiniciar de nuevo.
... Voy a reiniciar de nuevo.
No, no ayudó.
Renat:
...... Lo he comprobado: a mí me funciona.
A mí también me funciona, pero cada diez o cuarenta ciclos me sale la misma mierda:
2012.02.23 23 16:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 23 16:16:42 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 23 16:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
No, no ayudó.
A mí también me funciona, pero cada diez o cuarenta ciclos me sale esta mierda:
También se descubrió.
Esto se debe a que el archivo especificado está siendo manejado en dos hilos diferentes sin sincronización y ocasionalmente el archivo se bloquea:
Como el ejemplo con la imagen se hizo sólo para demostrar el principio de trabajo con OpenCL, no es un problema.
Como el ejemplo con la imagen se hizo sólo para demostrar el principio de trabajo con OpenCL, no es un problema.