API de MQL5 comunes

En anteriores partes del libro hemos estudiado los conceptos básicos, la sintaxis y las reglas de uso de las construcciones del lenguaje MQL5. Sin embargo, esto es sólo una base para escribir programas reales que satisfagan los requisitos de los operadores de trading, como el tratamiento analítico de datos y el trading automático. La resolución de tales tareas no sería posible sin una amplia gama de funciones integradas y medios de interacción con el terminal MetaTrader 5, los cuales conforman la API de MQL5.

En este capítulo comenzaremos a dominar la API de MQL5 y seguiremos haciéndolo hasta el final del libro, familiarizándonos gradualmente con todos los subsistemas especializados.

La lista de tecnologías y capacidades proporcionadas a cualquier programa MQL por el núcleo (el entorno de ejecución de los programas MQL dentro del terminal) es muy amplia. Por eso tiene sentido empezar por las cosas más sencillas que pueden ser útiles en la mayoría de los programas. En concreto, aquí veremos funciones especializadas para trabajar con arrays, cadenas, archivos, transformación de datos, interacción con el usuario, funciones matemáticas y control del entorno.

Anteriormente aprendimos a describir nuestras funciones en MQL5 y a llamarlas. Las funciones integradas de la API de MQL5 están disponibles en el código fuente, como se suele decir, «out of the box», es decir, sin ninguna descripción preliminar.

Es importante señalar que, a diferencia de lo que ocurre en C++, no se necesitan directivas de preprocesador adicionales para incluir un conjunto específico de funciones integradas en un programa. Los nombres de todas las funciones de la API de MQL5 están presentes en el contexto global (espacio de nombres), siempre y sin condiciones.

Por un lado, esto resulta conveniente, pero por otro, exige que usted sea consciente de la posible existencia de un conflicto de nombres. Si accidentalmente intenta utilizar alguno de los nombres de las funciones integradas, ello anulará la implementación estándar, lo que puede tener consecuencias inesperadas: en el mejor de los casos, obtendrá un error del compilador sobre una sobrecarga ambigua, y en el peor, todas las llamadas habituales serán redirigidas a la «nueva» implementación, sin ninguna advertencia.

En teoría, se pueden utilizar nombres similares en otros contextos; por ejemplo, como nombre de método de una clase o en un espacio de nombres dedicado (de usuario). En tales casos, la llamada a una función global puede realizarse utilizando el operador de resolución de contexto: ya hemos abordado esta situación en la sección Tipos anidados, espacios de nombres y operador de contexto '::'.