Leer historial de ticks

La API de Python incluye dos funciones para leer el historial de ticks reales: copy_ticks_from con una indicación del número de ticks a partir de la fecha especificada, y copy_ticks_range para todos los ticks del período especificado.

Ambas funciones tienen cuatro parámetros necesarios sin nombre, el primero de los cuales especifica el símbolo. El segundo parámetro especifica el tiempo inicial de los ticks solicitados. El tercer parámetro indica si se pasa el número requerido de ticks (en la función copy_ticks_from) o el tiempo final de ticks (en la función copy_ticks_range).

El último parámetro determina qué tipo de ticks se devolverán. Puede contener uno de los siguientes indicadores (COPY_TICKS):

Identificador

Descripción

COPY_TICKS_ALL

Todos los ticks

COPY_TICKS_INFO

Ticks que contienen cambios en los precios de compra y/o venta

COPY_TICKS_TRADE

Ticks que contienen cambios en el último precio y/o volumen (Volume)

Ambas funciones devuelven los ticks como un array numpy.ndarray (del paquete numpy) con columnas nombradas time, bid, ask, last y flags. El valor del campo flags es una combinación de banderas de bits de la enumeración TICK_FLAG: cada bit significa un cambio en el campo correspondiente con la propiedad tick.

Identificador

Propiedad tick modificada

TICK_FLAG_BID

Precio de compra (Bid)

TICK_FLAG_ASK

Precio de venta (Ask)

TICK_FLAG_LAST

Último precio

TICK_FLAG_VOLUME

Volumen

TICK_FLAG_BUY

Último precio de compra

TICK_FLAG_SELL

Último precio de venta

numpy.ndarray copy_ticks_from(symbol, date_from, count, flags)

La función copy_ticks_from solicita ticks a partir de la hora especificada (date_from) en la cantidad dada (count).

La función es un análogo de CopyTicks.

numpy.array copy_ticks_range(symbol, date_from, date_to, flags)

La función copy_ticks_range permite obtener los ticks para el intervalo de tiempo especificado.

La función es un análogo de CopyTicksRange.

En el siguiente ejemplo (MQL5/Scripts/MQL5Book/Python/copyticks.py), generamos una página web interactiva con un gráfico de tick (nota: aquí se utiliza el paquete plotly; para instalarlo en Python, ejecute el comando pip install plotly).

import MetaTrader5 as mt5
import pandas as pd
import pytz
from datetime import datetime
   
# connect to terminal
if not mt5.initialize():
   print("initialize() failed, error code =", mt5.last_error())
   quit()
   
# set the name of the file to save to the sandbox
path = mt5.terminal_info().data_path + r'\MQL5\Files\MQL5Book\copyticks.html'
   
# copy 1000 EURUSD ticks from a specific moment in history
utc = pytz.timezone("Etc/UTC"
rates = mt5.copy_ticks_from("EURUSD", \
datetime(2022525115, tzinfo = utc), 1000, mt5.COPY_TICKS_ALL)
bid = [x['bid'for x in rates]
ask = [x['ask'for x in rates]
time = [x['time'for x in rates]
time = pd.to_datetime(time, unit = 's')
   
# terminate the connection to the terminal
mt5.shutdown()
   
# connect the graphics package and draw 2 rows of ask and bid prices on the web page
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
data = [go.Scatter(x = time, y = bid), go.Scatter(x = time, y = ask)]
plot(data, filename = path)

He aquí cuál podría ser el resultado:

Gráfico con ticks recibidos en un script Python

Gráfico con ticks recibidos en un script Python

La página web copyticks.html se genera en el subdirectorio MQL5/Files/MQL5Book.