La solución a través de la DLL se da en el artículo"Transferencia de datos entre indicadores - una solución sencilla". Pero hay que añadir la llamada deGetPtr externa al código fuente del indicador, lo que no siempre es posible.
¿Sin DLL es posible realizar sólo lectura (sin escritura, que también se hace en el artículo) de los buffers? ¿Ha cambiado algo en este tema desde que se escribió el artículo (2010)?
- docs.mql4.com
¿Cuántos valores necesita? Que el propio indicador guarde los duplicados de estos valores en variables globales del terminal, en propiedades de objetos del gráfico, en ficheros
Necesito un script para obtener los valores de los buffers (al menos uno) de un indicador en un gráfico. Volcar los búferes de un indicador a un archivo no es un script que lee búferes.
En el artículo anterior, hay una buena solución a través de punteros que le permite no sólo leer, sino incluso sobrescribir los búferes de otros indicadores en los gráficos. Esto es lo que se llama una lectura en el buffer. Pero es una DLL.
Como ves, podemos aplicar el siguiente esquema
- el indicador espera a que una variable global escriba sus búferes en el archivo.
- El script crea dicha variable en tiempo de ejecución y recibe los archivos correspondientes.
¡Por alguna razón todavía no pueden hacer una lectura humana de los datos del indicador desde el gráfico! Suena delirante, pero lo es.
Por desgracia, en este caso
no va a ayudar.
¿Por qué no? iCustom() lee el buffer del indicador, independientemente de cómo se llene este buffer. Después de todo, el buffer se declara a nivel de variables globales en cualquier caso.
Porque iCustom no sabe nada de los eventos Timer y ChartEvent.
Por ejemplo, el indicador en el gráfico cada segundo (evento Timer) llena su único buffer con números aleatorios (o aplica EMA a los valores del buffer anterior). Son bastantes líneas de código. iCustom en este caso nunca devolverá lo que se verá en el gráfico.
Porque iCustom no sabe nada de los eventos Timer y ChartEvent.
Por ejemplo, el indicador en el gráfico cada segundo (evento Timer) llena su único buffer con números aleatorios (o aplica EMA a los valores del buffer anterior). Son bastantes líneas de código. Entonces, iCustom nunca devolverá lo que verá en el gráfico.
¿Por qué no? iCustom() lee el buffer del indicador, independientemente de cómo se llene este buffer. Después de todo, el buffer se declara a nivel de variables globales en cualquier caso.
iCustom no lee los buffers del indicador en el gráfico, sino que crea su propia copia del indicador en la memoria y lee de ella, sólo que las copias de los buffers no se muestran en el gráfico. Pero si el indicador dibuja algo en el gráfico de forma independiente, se dibujará cuando se llame a través de iCustom que crea problemas, por cierto
Por ejemplo, si el indicador tiene el siguiente código, se dibujará al llamar a iCustom, y el texto se superpondrá al texto del indicador en el gráfico
ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст"); ChartRedraw();
iCustom no lee los buffers del indicador en el gráfico, sino que crea su propia copia del indicador en la memoria y lee de ella, sólo que las copias de los buffers no se muestran en el gráfico. Pero si el indicador dibuja algo en el gráfico de forma independiente, se dibujará cuando se llame a través de iCustom que crea problemas, por cierto
Por ejemplo, si el indicador tiene el siguiente código, se dibujará al llamar a iCustom, y el texto se superpondrá al texto del indicador en el gráfico
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Se coloca un indicador en el gráfico. Es redibujado por los eventos Timer, ChartEvent y Calculate.
Necesito que un script lea los valores actuales de sus buffers de indicadores(INDICATOR_DATA) que se pueden ver con CTRL+D. ¿Es posible hacer esto en MT4?