MT5CopyTicksRange

Получает тики за указанный диапазон дат из терминала MetaTrader 5.

MT5CopyTicksRange(
   symbol,       // имя символа
   from,         // дата, с которой запрашиваются тики
   to,           // дата, по которую запрашиваются тики
   flags         // комбинация флагов, определяющая тип запрашиваемых тиков
   )

Параметры

symbol

[in]  Имя финансового инструмента, например, "EURUSD".

from

[in]  Дата, начиная с которой запрашиваются тики. Задается объектом datetime или в виде количества секунд, прошедших  с 1970.01.01.

to

[in]  Дата, по которую запрашиваются тики. Задается объектом datetime или в виде количества секунд, прошедших  с 1970.01.01.

flags

[in]  Флаг, определяющий тип запрашиваемых тиков. MT5_COPY_TICKS_INFO – тики, вызванные изменениями Bid и/или Ask, MT5_COPY_TICKS_TRADE – тики с изменения Last и Volume, MT5_COPY_TICKS_ALL – все тики. Значения флагов описаны в перечислении MT5_COPY_TICKS.

Возвращаемое значение

Возвращает тики в виде кортежей (time, bid, ask, last, flags).  В кортеже переменная flags может быть комбинацией флагов из перечисления MT5_TICK_FLAG.

Примечание

Для дополнительной информации смотрите функцию CopyTicks.

Python при создании объекта datetime использует таймзону локального времени, в то время как треминал MetaTrader 5 хранит время тиков и открытия баров в UTC таймзоне (без смещения). Поэтому, для выолнения функций, использующих время, необходимо создавать datetime в UTC-времени. Данные, полученные из терминала MetaTrader 5, имеют UTC-время, но при попытке вывести их на печать, Python опять применит смещение для локального времени. Поэтому, полученные данные также необходимо корректировать для визуального представления.

Пример:

from datetime import datetime
from MetaTrader5 import *
# импортируем модуль pandas для вывода полученных данных в табличной форме
import pandas as pd
pd.set_option('display.max_columns', 500# сколько столбцов показываем
pd.set_option('display.width', 1500)      # макс. ширина таблицы для показа
# импортируем модуль pytz для работы с таймзоной
import pytz
 
# установим подключение к терминалу MetaTrader 5
MT5Initialize()
# подождем пока MetaTrader 5 подключится к торговому серверу
MT5WaitForTerminal()
 
# установим таймзону в UTC
timezone = pytz.timezone("Etc/UTC")
# создадим объекты datetime в таймзоне UTC, чтобы не применялось смещение локальной таймзоны
utc_from = datetime(2019, 4, 1, tzinfo=timezone)
utc_to = datetime(2019, 4, 5, tzinfo=timezone)
# запросим тики по AUDUSD в интервале 01.04.2019 - 05.04.2019
ticks = MT5CopyTicksFrom("EURUSD"utc_from, utc_to, MT5_COPY_TICKS_ALL)
print("Получено тиков:",len(ticks))
 
# завершим подключение к терминалу MetaTrader 5
MT5Shutdown()
# выведем данные каждого тика на новой строке
print("Выведем полученные тики как есть")
count = 0
for tick in ticks:
    print(tick)
    if(count >= 10):
        break
 
# создадим из полученных данных DataFrame
ticks_frame = pd.DataFrame(list(ticks),
                           columns=['time', 'bid', 'ask', 'last', 'volume', 'flags'])
# выведем данные
print("\nВыведем датафрейм с тиками")
print(ticks_frame.head(10))  # видим, что Python представляет время тиков в локальной таймзоне, со смещением
 
# получим для локального компьютера смещение от времени UTC
UTC_OFFSET_TIMEDELTA = datetime.utcnow() - datetime.now()
 
# создадим простую функцию, которая влоб корректирует смещение
def local_to_utc(dt):
    return dt + UTC_OFFSET_TIMEDELTA
 
# применим смещение для столбца time в датафрейме ticks_frame
ticks_frame['time'] = ticks_frame.apply(lambda ticklocal_to_utc(tick['time']), axis=1)
 
# еще раз выведем данные и убедимся, что теперь время тиков изменилось
print("\nВыведем датафрейм с тиками после корректировки времени")
print(ticks_frame.head(10))
 
Результат:
Получено тиков: 243374
Выведем полученные тики как есть
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 2, 759000), bid=0.71155, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 7, 824000), bid=0.71154, ask=0.71222, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 27, 818000), bid=0.71155, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 43, 794000), bid=0.71159, ask=0.71204, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 67000), bid=0.71145, ask=0.71209, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 140000), bid=0.71157, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 432000), bid=0.71157, ask=0.71225, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 872000), bid=0.71159, ask=0.71204, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 45, 164000), bid=0.71148, ask=0.7121, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 45, 244000), bid=0.71158, ask=0.71223, last=0.0, volume=0.0, flags=134)
 
Выведем датафрейм с тиками
                     time      bid      ask  last  volume  flags
0 2019-04-01 03:02:02.759  0.71155  0.71223   0.0     0.0    134
1 2019-04-01 03:02:07.824  0.71154  0.71222   0.0     0.0    134
2 2019-04-01 03:02:27.818  0.71155  0.71223   0.0     0.0    134
3 2019-04-01 03:02:43.794  0.71159  0.71204   0.0     0.0    134
4 2019-04-01 03:02:44.067  0.71145  0.71209   0.0     0.0    134
5 2019-04-01 03:02:44.140  0.71157  0.71223   0.0     0.0    134
6 2019-04-01 03:02:44.432  0.71157  0.71225   0.0     0.0      4
7 2019-04-01 03:02:44.872  0.71159  0.71204   0.0     0.0    134
8 2019-04-01 03:02:45.164  0.71148  0.71210   0.0     0.0    134
9 2019-04-01 03:02:45.244  0.71158  0.71223   0.0     0.0    134
 
Выведем датафрейм с тиками после корректировки времени
                     time      bid      ask  last  volume  flags
0 2019-04-01 00:02:02.759  0.71155  0.71223   0.0     0.0    134
1 2019-04-01 00:02:07.824  0.71154  0.71222   0.0     0.0    134
2 2019-04-01 00:02:27.818  0.71155  0.71223   0.0     0.0    134
3 2019-04-01 00:02:43.794  0.71159  0.71204   0.0     0.0    134
4 2019-04-01 00:02:44.067  0.71145  0.71209   0.0     0.0    134
5 2019-04-01 00:02:44.140  0.71157  0.71223   0.0     0.0    134
6 2019-04-01 00:02:44.432  0.71157  0.71225   0.0     0.0      4
7 2019-04-01 00:02:44.872  0.71159  0.71204   0.0     0.0    134
8 2019-04-01 00:02:45.164  0.71148  0.71210   0.0     0.0    134
9 2019-04-01 00:02:45.244  0.71158  0.71223   0.0     0.0    134

Смотри также

CopyRates, MT5CopyRatesFromPos, MT5CopyRatesRange, MT5CopyTicksFrom, MT5CopyTicksRange