Metatrader 4: Novedades en mql4 v.6xx y clase 12 de curso mql4 intermedio de investingdev
-
Upload
investing-and-development-ltd -
Category
Education
-
view
555 -
download
2
description
Transcript of Metatrader 4: Novedades en mql4 v.6xx y clase 12 de curso mql4 intermedio de investingdev
Adaptación al nuevo MQL4
Necesitamos concretar cuáles son alguno de los cambios del nuevo lenguaje
MQL4, vigente a partir de la versión de MetaTrader 4 build 600. Estos son los cambios
más importantes:
Cambio en los históricos
Los nuevos históricos llevan los campos adicionales de spread y de volumen
“real”. Se conservan el resto de campos que antes teníamos. La diferencia entre el
volumen “viejo” y el volumen “nuevo” es que el volumen “nuevo” es volumen en
número de lotes operados, y el viejo es únicamente el número de ticks. A pesar de decir
ser el número de lotes real, esta información tampoco es tan “real”, puesto que el
mercado de Forex es un mercado descentralizado sin un ente regulador que registre
todas las operaciones, sino que cada bolsa, y cada broker, es el encargado de encontrar
el volumen para casar sus órdenes. De manera que este volumen nos dará, únicamente,
el volumen registrado por nuestro broker, no el volumen más REAL que nos daría en
caso de estar operando un Futuro, ETF, opción o cualquier otro instrumento financiero
sí centralizado y regulado por un único ente.
Histórico antiguo:
Histórico nuevo:
Este cambio conlleva implicaciones profundas: los viejos desarrollos que usen
DLLs basadas en el antiguo RateInfo no funcionarán correctamente en el nuevo
terminal y se precisará convertir el desarrollo y compilarlo nuevamente.
Nuevos tipos de datos
Se han añadido los tipos char, short, long, uchar, uint, ulong y double. La lista
completa de tipos de datos es entonces:
char: un carácter. Ocupe 1 byte de memoria (8 bits). Rango [-128, 127]
uchar: igual que el anterior, solo que el rango de valores es [0, 255]
short: Ocupa 2 bytes en memoria. Rango [-32768, 32767]
ushort: igual que el anterior, pero con rango [0, 65535]
int: Entero de 4 bytes. Rango [-2147483648, 2147484647]
uint: Rango [0, 4294967295]
long: Ocupa 8 bytes. Rango [-(2^64/2), (2^64/2) -1]
ulong: Rango [0, 2^64-1]
bool: Verdadero (true) o Falso (false), o 1 ó 0.
string: En formato Unicode.
double: Número con coma flotante de 8 bits.
float: Número con coma flotante de 4 bits
color: Pensado para alojar variables de información de colores. Ocupa 4 bytes en
memoria.
datetime: Fecha
enum: Enumeraciones. Una enumeración es una secuencia de valores que están
relacionados y que suelen estar numerados. Ejemplos de enumeraciones típicas
son los meses del año o los dias del mes. Pensando en el contexto de la
programación de estrategias de inversiones, una enumeración podría ser toda la
serie de símbolos que podemos operar con nuestro broker.
Además, en el nuevo MQL4 podemos crear Tipos Abstractos de Datos (TAD), que
son tipos de datos creados por el propio programador. Hay 2 clases de TAD:
Estructuras (struct). Una estructura agrega una serie de informaciones de
distintos tipos de datos sobre un concepto o ente. Una estructura se declara de
este modo:
Y un ejemplo, en el lenguaje MQL4, de estructura, es este:
Clases (class). Una clase es un TAD parecido en cierto sentido a un struct, solo
que más complejo: además de agregar datos sobre ese “ente”, agregaremos
también comportamiento. En una clase, los “datos” son los llamados atributos, y
el “comportamiento” son los métodos, que serán únicamente funciones que
podrán ser llamadas desde otros puntos de nuestro programa.
Un ejemplo de la declaración de una clase:
Y este el modo en que se declaran sus métodos:
Cabe destacar a este respecto que viejos desarrollos que usen DLLs que
trabajen con funciones de la API de Windows cuyos parámetros sean strings
deberán ser actualizados para usar el nuevo formato Unicode en vez de ANSI,
que era la codificación en versión antigua.
El Volumen ahora se guarda en arrays de tipo long. Se recomienda hacer conversión
explícita de tipos para evitar errores de desbordamiento.
Se han incorporado al lenguaje estructuras, clases, punteros, la palabra clave this, y
todas las propiedades de Programación Orientada a Objetos (POO):
Encapsulación y Tipos Extensibles
Herencia
Polimorfismo
Sobrecarga
Funciones Virtuales
Ahora bien, aunque se han añadido todas las capacidades para poder desarrollar
mediante POO, se puede seguir desarrollando con la metodología procedural que
veníamos haciendo con mql4 hasta ahora.
Las funciones predefinidas init( ), deinit( ) y start( ) ahora mismo están obsoletas,
aunque se sigue conservando la compatibilidad con las mismas y se pueden seguir
usando. No obstante, las funciones actuales son las de OnInit( ), OnDeInit( ), OnStart(),
OnCalculate( ) y OnTick( ). Otras de estas funciones nuevas son OnTimer( ),
OnChartEvent( ) y OnTester( ), que permiten un mayor control sobre los desarrollos y
una programación más orientada “al evento”.
Los nombres de variable no pueden contener puntos ni caracteres especiales, y las
nuevas palabras clave del mql4 actualizado no pueden existir en los programas. Los
programas que ya estén compilados (ficheros .ex4) no sufrirán de este cambio, pero sí
que podría afectar a programas fuente desarrollados con la versión antigua de mql4.
Para asegurarse de que un programa concreto cumple estas restricciones, se deberán
recompilar con el nuevo MetaEditor todos aquellos ficheros fuente generados con el
antiguo lenguaje.
Las reglas de precedencia de operadores en operaciones lógicas y aritméticas siguen
ahora las mismas reglas que los estándares de C. Para no cometer errores de este tipo,
nosotros siempre recomendamos usar paréntesis en las operaciones y no confiar en las
reglas de precedencia de los compiladores, pues estas pueden cambiar entre versiones
distintas de los compiladores.
Cambia el comportamiento de la función ArrayCopyRates( )
Antes, ArrayCopyRates( ) copiaba los precios en un array bidimensional del tipo
double[][6] . Ahora, debemos hacerlo mediante la estructura, ya vista de MqlRates
Este sería el modo de realizar una llamada a la función ArrayCopyRates( ) con la sintaxis
actual:
Aunque todavía se mantiene la compatibilidad con la nomenclatura antigua, de este
modo:
Se puede tener un máximo de 64 ficheros abiertos, frente a los 32 que soportaba
antes el terminal de MetaTrader. Además, hasta ahora los ficheros se abrían por
defecto en los modos de FILE_SHARE_READ o FILE_SHARE_WRITE. Ahora hay que
especificarlo expresamente.