MT5CopyTicksFrom

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

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

Параметры

symbol

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

from

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

count

[in]  Количество тиков, которое необходимо получить.

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 опять применит смещение для локального времени. Поэтому, полученные данные также необходимо корректировать для визуального представления.

MT5_COPY_TICKS определяет типы тиков, которые могут быть запрошены с помощью функций MT5CopyTicksFrom() and MT5CopyTicksRange().

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

Описание

MT5_COPY_TICKS_ALL

все тики

MT5_COPY_TICKS_INFO

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

MT5_COPY_TICKS_TRADE

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

MT5_TICK_FLAG определяет возможные флаги для тиков. Данные флаги используются для описания тиков,  полученных функциями MT5CopyTicksFrom() и MT5CopyTicksRange().

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

Описание

MT5_TICK_FLAG_BID

изменилась цена Bid

MT5_TICK_FLAG_ASK

изменалась цена Ask

MT5_TICK_FLAG_LAST

изменилась цена Last

MT5_TICK_FLAG_VOLUME

изменился объем (Volume)

MT5_TICK_FLAG_BUY

изменилась цена последней покупки (Buy)

MT5_TICK_FLAG_SELL

изменилась цена последней продажи (Sell)

 

Пример:

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)
# запросим 100000 тиков по EURUSD с 01.04.2019 в таймзоне UTC
ticks = MT5CopyTicksFrom("EURUSD"utc_from100000, 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))
 
Результат:
Получено тиков: 100000
Выведем полученные тики как есть
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 5, 745000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 155000), bid=1.12260, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 497000), bid=1.12272, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 34, 327000), bid=1.12268, ask=1.12336, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 61000), bid=1.12268, ask=1.12339, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 369000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 40, 577000), bid=1.12258, ask=1.12336, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 46, 494000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 47, 288000), bid=1.12248, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 56, 114000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)
 
Выведем датафрейм с тиками
                     time      bid      ask  last  volume  flags
0 2019-04-01 03:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 03:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 03:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 03:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 03:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 03:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 03:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 03:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 03:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 03:02:56.114  1.12250  1.12336   0.0     0.0    130
 
Выведем датафрейм с тиками после корректировки времени
                     time      bid      ask  last  volume  flags
0 2019-04-01 00:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 00:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 00:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 00:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 00:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 00:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 00:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 00:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 00:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 00:02:56.114  1.12250  1.12336   0.0     0.0    130

Смотри также

CopyRates, MT5CopyRatesFromPos, MT5CopyRatesRange, MT5CopyTicksFrom, MT5CopyTicksRange