Чтение истории тиков

Python API включает 2 функции для чтения истории реальных тиков: copy_ticks_from — с указанием количества тиков, начиная с указанной даты, и copy_ticks_range — для всех тиков за указанный период.

Обе функции имеют 4 обязательных неименованных параметра, первый из которых предназначен для указания символа. Второй параметр задает начальное время запрашиваемых тиков. В третьем параметре передается либо требуемое количество тиков (в функции copy_ticks_from), либо конечное время тиков (в функции copy_ticks_range).

Последний параметр определяет, какого рода тики будут возвращены. В нем можно указать один из следующих флагов (COPY_TICKS):

Идентификатор

Описание

COPY_TICKS_ALL

Все тики

COPY_TICKS_INFO

Тики, содержащие изменения цен Bid и/или Ask

COPY_TICKS_TRADE

Тики, содержащие изменения цены Last и/или объема (Volume)

Обе функции возвращают тики в виде массива numpy.ndarray (из пакета numpy) с именованными столбцами time, bid, ask, last и flags. Значение поля flags является комбинацией битовых флагов из перечисления TICK_FLAG: каждый бит означает изменение соответствующего поля со свойством тика.

Идентификатор

Измененное свойство тика

TICK_FLAG_BID

Цена Bid

TICK_FLAG_ASK

Цена Ask

TICK_FLAG_LAST

Цена Last

TICK_FLAG_VOLUME

Объем (Volume)

TICK_FLAG_BUY

Цена последней покупки (Buy)

TICK_FLAG_SELL

Цена последней продажи (Sell)

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

Функция copy_ticks_from запрашивает тики, начиная с указанного времени (date_from) в заданном количестве (count).

Функция является аналогом CopyTicks.

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

Функция copy_ticks_range позволяет получить тики за указанный диапазон времени.

Функция является аналогом CopyTicksRange.

В следующем примере (MQL5/Scripts/MQL5Book/Python/copyticks.py) сгенерируем интерактивную веб-страницу с графиком тиков (внимание: используется пакет plotly — напомним, что для его установки в Python нужно предварительно выполнить команду pip install plotly).

import MetaTrader5 as mt5
import pandas as pd
import pytz
from datetime import datetime
   
подключаемся к терминалу
if not mt5.initialize():
   print("initialize() failed, error code =", mt5.last_error())
   quit()
   
# зададим имя файла для сохранения в "песочницу"
path = mt5.terminal_info().data_path + r'\MQL5\Files\MQL5Book\copyticks.html'
   
# копируем 1000 тиков EURUSD с конкретного момента в истории
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')
   
# завершим подключение к терминалу
mt5.shutdown()
   
# подключаем графический пакет и рисуем 2 ряда цен ask и bid в веб-странице
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)

Вот как может выглядеть результат.

График тиков, полученных в скрипте Python

График тиков, полученных в скрипте Python

Веб-страница copyticks.html сгенерируется в подкаталоге MQL5/Files/MQL5Book.