English Русский 中文 Deutsch 日本語 Português
Gráficos sin conexión en el nuevo MQL4

Gráficos sin conexión en el nuevo MQL4

MetaTrader 4Ejemplos | 6 octubre 2015, 09:25
2 569 0
MetaQuotes
MetaQuotes

El MQL4 actualizado tiene un nuevo formato para almacenar datos históricos y proporciona la estructura adecuada de MqlRates para el almacenaje conveniente de los valores tiempo, apertura, bajo, alto, cierre y volumen. Durante muchos años, los traders han desarrollado sus aplicaciones MQL4 que recogen y almacenan sus datos en ficheros HST para generar gráficos offline. Podemos asegurar que todos los archivos EX4 previamente compilados trabajarán en la nueva terminal MetaTrader 4 del mismo modo que antes.


Todos los programas EX4 viejos trabajan en la nueva Terminal de MetaTrader 4

Como ya se mencionó, ningún simple archivo ejecutable EX4 customizado y compilado por el compilador antiguo será eliminado o cambiado al actualizar el terminal. Esto significa que todas sus aplicaciones probadas y no incluidas en las entregas estándar del terminal se copiarán automáticamente a la nueva ubicación y permanecen disponibles para trabajar.


Gráficos fuera de línea en el Terminal MetaTrader 4

La entrega estándar del nuevo cliente del terminal contiene el script PeriodConverter actualizado que genera archivos HST en el nuevo formato. Sin embargo, si usted tiene programas basados en el acript period_convertermas antiguo y compilado con el compilador más viejo, funcionarán como de costumbre.

Supongamos que tenemos el script period_converter_509.ex4 compilado desarrollado por la versión anterior. Durante la actualización, automáticamente ha sido copiado a la nueva ubicación de almacenamiento de información y ahora está disponible para su lanzamiento en la ventana del navegador. Lo aplicamos al gráfico EURUSD H1 para crear el histórico customizado del EURUSD en M2.



El multiplicador se establece en 3 por defecto. Vamos a cambiar a 2. También debemos estar seguros de permitir la llamada al DLL para poder gestionar fuera de linea el gráfico EURUSD M2 que vamos a abrir después de que se ha formado el historial apropiado.

Tan pronto como el script del informe genera el archivo de datos en el diario del Experto, ve a archivo - Abrir sin conexión y encontrar la línea EURUSD M2. Estos son los datos preparados por nuestro script.


Después se abre el gráfico sin conexión, el script sigue trabajando en EURUSD M1 y procesa los ticks recién llegados en tiempo real. Después descubre que se ha abierto la tabla sin conexión con el timeframe especificado, se inicia envío de comandos de actualización a esa tabla una vez cada dos segundos.


Así, el viejo script compilado con éxito por la versión antigua del compilador funciona en la nueva terminal al activar toda la funcionalidad incorporada.

Lograr medidas descritas: descargar el archivo ejecutable adjunto period_converter_509.ex4 y ponerlo en <data folder>\MQL4\Scripts.



Actualizar el Script viejo para el nuevo compilador

En algún momento, puede que necesite cambiar el código fuente de su aplicación y compilarlo en el MetaEditor nuevo. Aquí mostramos cómo considerar los cambios en lenguaje MQL4 por dos pequeñas correcciones usando el script period_converter_509 como ejemplo. Por supuesto, podemos compilar el código fuente de period_conveter_509.mq4 sin ningún cambio, y va a funcionar. Pero sería mejor tener los cambios de idioma en cuenta y hacer correcciones menores en el código.

Debe especificarse explícitamente el modo de acceso compartido al abrir el archivo
Como recordarás, todos los archivos fueron abiertos en el modo de acceso compartido en el MQL4 viejo. En el MQL4 nuevo, las banderas FILE_SHARE_WRITE y FILE_SHARE_READ deben ser especificadas explícitamente para el uso compartido al abrir los archivos. Si las banderas están ausentes, el archivo se abre en modo exclusivo y no se puede abrir por ninguna persona hasta que se cierra por el usuario que la abrió. Es exactamente el comportamiento que necesitamos, ya que queremos abrir el archivo de datos históricos generado por el script en el terminal MetaTrader 4 como un gráfico de línea. Por lo tanto, simplemente añadimos estas dos banderas a la función de llamada FileOpenHistory():

   // 1º cambiar - agregar flags a compartir
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

Ahora, FileFlush() limpia los datos almacenados en el disco inmediatamente

La función FileFlush() se utiliza muy a menudo en el script antiguo. No hay necesidad de llamar después de cada grabación durante la primera generación de archivo en la barra de datos. Sería suficiente con hacerlo que en el final cuando todos los datos sobre un símbolo no-estándar y/o timeframe se registra. El hecho es que la implementación de la función FileFlush() ha sido cambiado en la nueva versión del lenguaje MQL4 para permitir la descarga de datos instantánea a la unidad física. La versión anterior utiliza la reescritura de datos, y varias llamadas no llevan de la desaceleración de la operación del script.

last_fpos=FileTell(ExtHandle);
last_volume=Volume[i];
//--- escritura generada por los datos de la barra
FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
// 2º cambio - quitar FileFlush desde aquí
//FileFlush(ExtHandle);

Vamos a guardar el archivo obtenido después de estas dos correcciones como period_converter_580.mq4 y compílelo. Lo puede descargar de los archivos adjuntos a este artículo. Ahora, abrimos otro gráfico EURUSD M1 y ejecutar el script con el parámetro 3 para crear un gráfico EURUSD no estándar de tres minutos.


Después se genera el archivo de datos, lo abrimos como un gráfico EURUSD M3 fuera de línea.


Como era de esperar, después de que se abrió el gráfico, el script de period_converter_580 lanzado lo ha detectado y envia un mensaje al diario. De ahora en adelante, enviará el comando update al gráfico sin conexión no más de una vez cada 2 segundos.


Así, hemos probado con el formato de almacenamiento de datos históricos anteriores y aseguramos de que todo funciona como antes.


Nuevo Script PeriodConverter

La entrega estándar de la nueva versión de cliente del terminal MetaTrader 4 también contiene scripts PeriodConverter que realizan las mismas tareas que su predecesor. Sin embargo, tiene algunas diferencias de menor importancia que la anterior, ya que se ha desarrollado usando el nuevo estilo de código fuente. Además, cuenta con las nuevas posibilidades del lenguaje MQL4.

La diferencia más importante de la versión anterior es el uso de la nueva estructura de MqlRates desarrollada para trabajar con datos de la barra del precio en el nuevo formato:

if(time0>=rate.time+periodseconds || i==0)
  {
   if(i==0 && time0<rate.time+periodseconds)
     {
      rate.tick_volume+=(long)Volume[0];
      if(rate.low>Low[0])
         rate.low=Low[0];
      if(rate.high<High[0])
         rate.high=High[0];
      rate.close=Close[0];
     }
   last_fpos=FileTell(ExtHandle);
   last_volume=(long)Volume[i];
   FileWriteStruct(ExtHandle,rate);
   cnt++;
   if(time0>=rate.time+periodseconds)
     {
      rate.time=time0/periodseconds;
      rate.time*=periodseconds;
      rate.open=Open[i];
      rate.low=Low[i];
      rate.high=High[i];
      rate.close=Close[i];
      rate.tick_volume=last_volume;
     }
  }

Los desarrolladores de MQL4 que activamente usan gráficos offline apreciarán rápidamente la conveniencia del nuevo enfoque.

Estructura para almacenar información sobre precios, volúmenes y extensión

struct MqlRates
  {
   datetime time;    // tiempo del inicio del periodo
   double open;      // Precio de apertura
   double high;      // Precio alto del periodo
   double low;       // Precio bajo del periodo
   double close;     // Precio de cierre
   long tick_volume; // Volumen de ticks
   int spread;       // spread (propagación)
   long real_volume; // volumen de operaciones
  };

Vamos a compilar el nuevo script PeriodConverter y lanzarlo en el nuevo gráfico EURUSD M1, como los anteriores.


En este momento, estamos preparando los datos para el gráfico EURUSD M4 offline. Por lo tanto, el multiplicador es igual a 4.


Después de que se han preparado los datos, estamos abriendo la tabla offline de la misma manera.


Como se puede ver, las tres versiones del guión están trabajando de manera similar. Todos los operadores que trabajan con gráficos de símbolos personalizados o timeframes no estándar serán capaces de utilizarlas en la nueva versión del terminal MetaTrader 4, así como mejorar los códigos de fuente existentes y desarrollar nuevos. No hay cambios fundamentales ni te esperan dificultades mientras cambias a la nueva versión.


Conclusión

  1. Las listas offline en la nueva terminal funcionan del mismo modo como antes. Se soportan ambos formatos de datos históricos anteriores.
  2. Los archivos antiguos de EX4 conservan su funcionalidad en la nueva terminal.
  3. Empezar a desarrollar nuevas aplicaciones de MQL4 utilizando todas las nuevas características de lenguaje y revelar todo su potencial.

Artículos relacionados:

  1. Probando Asesores Expertos en Timeframes no estándar
  2. Principios de la transformación del tiempo en Operaciones Intradía
  3. Equivolume Charting Revisited
  4. Barras sintéticas - una nueva dimensión de la visualización de información gráfica de los precios
  5. Gráficos "Free-of-Holes"

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1387

Actualización de MetaTrader 4 Build 600 o superior Actualización de MetaTrader 4 Build 600 o superior
La nueva versión del terminal MetaTrader 4 cuenta con la estructura actualizada de almacenamiento de datos de usuario. En versiones anteriores todos los programas, plantillas, perfiles etc. se almacenan directamente en la carpeta de instalación del terminal. Ahora todos los datos necesarios requeridos para un determinado usuario se almacenan en un directorio llamado carpeta de datos. Leer el artículo para encontrar respuestas a preguntas frecuentes.
Prueba y optimización de Asesores Expertos Prueba y optimización de Asesores Expertos
El artículo proporciona una descripción detallada del proceso de probar y optimizar los EA's en el probador de estrategias del MetaTrader 4. No se puede subestimar la importancia de dicha información y la necesidad de esta publicación. Muchos usuarios, sólo empezar a trabajar con la plataforma de trading MetaTrader 4 tienen una idea muy vaga de qué y cuales las necesidades a realizar cuando se trabaja con Asesores Expertos. El artículo propuesto da respuesta sencilla y clara a todas estas preguntas y proporciona un método un poco más profesional para manejar estas cuestiones con un ejemplo concreto.
Estructura de datos en MetaTrader 4 Build 600 o superior Estructura de datos en MetaTrader 4 Build 600 o superior
Las características del MetaTarder 4 build 600, de la nueva estructura y ubicación de los archivos del cliente del terminal. Ahora, las aplicaciones MQL4 se colocan en directorios separados según el tipo de programa (asesores expertos, indicadores o scripts). En la mayoría de los casos, los datos de la terminal ahora se almacenan en una carpeta especial de datos separada de la ubicación de instalación del terminal. En este artículo, describimos al detalles cómo se transfieren los datos, así como las razones para introducir el nuevo sistema de almacenamiento.
Dibujo de indicadores de aguja usando la clase CCanvas Dibujo de indicadores de aguja usando la clase CCanvas
Los instrumentos indicadores de esfera nos rodean por todas partes: en los coches y aviones, en la industria y en nuestra vida cotidiana. Se aplican cuando se requiere una rápida reacción al valor controlado por parte del operador. En este artículo conoceremos la biblioteca de instrumentos indicadores para MetaTrader 5.