Visión general de las funciones del paquete MetaTrader5 para Python

Las funciones de la API disponibles en Python se pueden dividir condicionalmente en 2 grupos: funciones que tienen análogos completos en la API de MQL5 y funciones disponibles solo en Python. La presencia del segundo grupo se debe en parte al hecho de que la conexión entre Python y MetaTrader 5 debe organizarse técnicamente antes de poder utilizar las funciones de la aplicación. Esto explica la presencia y el propósito de un par de funciones initialize y shutdown: la primera establece una conexión con el terminal, y la segunda la termina.

Es importante que durante el proceso de inicialización se pueda lanzar la copia necesaria del terminal (si aún no se ha ejecutado) y se pueda seleccionar una cuenta de trading específica. Además, es posible cambiar la cuenta de trading en el contexto de una conexión ya abierta con el terminal: esto se hace mediante la función inicio de sesión.

Después de conectarse al terminal, un script de Python puede obtener un resumen de la versión del terminal utilizando la función version. Toda la información sobre el terminal está disponible en terminal_info, que es un análogo completo de tres funciones TerminalInfo, como si estuvieran unidas en una sola llamada.

En la siguiente tabla se enumeran las funciones de aplicación de Python y sus equivalentes en la API de MQL5.

Python

MQL5

last_error

GetLastError (¡Atención! Python tiene sus códigos de error nativos)

account_info

AccountInfoInteger, AccountInfoDouble, AccountInfoString

terminal_info

TerminalInfoInteger, TerminalInfoDouble, TerminalInfoDouble

symbols_total

SymbolsTotal (todos los símbolos, incluidos los personalizados y los desactivados)

symbols_get

SymbolsTotal + SymbolInfo (funciones)

symbol_info

SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString

symbol_info_tick

SymbolInfoTick

symbol_select

SymbolSelect

market_book_add

MarketBookAdd

market_book_get

MarketBookGet

market_book_release

MarketBookRelease

copy_rates_from

CopyRates (por el número de barras, a partir de la fecha/hora)

copy_rates_from_pos

CopyRates (por el número de barras, empezando por el número de barra)

copy_rates_range

CopyRates (en el intervalo fecha/hora)

copy_ticks_from

CopyTicks (por el número de ticks, a partir de la hora especificada)

copy_ticks_range

CopyTicksRange (en el intervalo de tiempo especificado)

orders_total

OrdersTotal

orders_get

OrdersTotal + OrderGet (funciones)

order_calc_margin

OrderCalcMargin

order_calc_profit

OrderCalcProfit

order_check

OrderCheck

order_send

OrderSend

positions_total

PositionsTotal

positions_get

PositionsTotal + PositionGet (funciones)

history_orders_total

HistoryOrdersTotal

history_orders_get

HistoryOrdersTotal + HistoryOrderGet (funciones)

history_deals_total

HistoryDealsTotal

history_deals_get

HistoryDealsTotal + HistoryDealGet (funciones)

Las funciones de la API de Python tienen varias características.

Como ya se ha indicado, las funciones pueden tener parámetros con nombre: cuando se llama a una función, dichos parámetros se especifican junto con un nombre y un valor, en cada par de nombre y valor se combinan con el signo igual '='. El orden de especificación de los parámetros con nombre no es importante (a diferencia de los parámetros posicionales, que se utilizan en MQL5 y deben seguir el orden estricto especificado por el prototipo de la función).

Las funciones de Python operan sobre tipos de datos nativos de Python. Esto incluye no sólo las cadenas y números habituales, sino también varios tipos compuestos, algo similar a las estructuras y arrays de MQL5.

Por ejemplo, muchas funciones devuelven estructuras de datos especiales de Python: tuple y namedtuple.

Una tupla es una secuencia de elementos de un tipo arbitrario. Puede considerarse como un array, pero a diferencia de ésta, los elementos de una tupla pueden ser de distintos tipos. También puede considerar una tupla como un conjunto de campos de estructura.

Un parecido aún mayor con la estructura puede encontrarse con las tuplas con nombre, en las que a cada elemento se le asigna un ID. Solo se puede utilizar un índice para acceder a un elemento de una tupla común (entre corchetes, como en MQL5, es decir, [i]). No obstante, podemos aplicar el operador de desreferenciación (punto '.') a una tupla con nombre para obtener su «propiedad» igual que en la estructura de MQL5 (tuple.field).

Además, las tuplas y las tuplas con nombre no pueden editarse en código (es decir, son constantes).

Otro tipo popular es un diccionario: un array asociativo que almacena pares de claves y valores, y los tipos de ambos pueden variar. Se accede al valor del diccionario mediante el operador [], y la clave (sea del tipo que sea, por ejemplo, una cadena) se indica entre corchetes, lo que asemeja los diccionarios a los arrays. Un diccionario no puede tener dos pares con la misma clave, es decir, las claves son siempre únicas. En concreto, una tupla con nombre puede convertirse fácilmente en un diccionario con el método namedtuple._asdict().