MT5CopyRatesRange

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

MT5CopyRatesRange(
   symbol,       // имя символа
   timeframe,    // таймфрейм
   date_from,    // дата, с которой запрашиваются бары
   date_to       // дата, по которую запрашиваются бары
   )

Параметры

symbol

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

timeframe

[in]  Таймфрейм, для которого запрашиваются бары. Задается значением из перечисления MT5_TIMEFRAME.

date_from

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

date_to

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

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

Возвращает бары в виде кортежей (time, open, high, low, close, tick_volume, spread, real_volume).

Примечание

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

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)      # макс. ширина таблицы для показа
 
# установим подключение к терминалу MetaTrader 5
MT5Initialize()
# подождем пока MetaTrader 5 подключится к торговому серверу
MT5WaitForTerminal()
 
# установим таймзону в UTC
timezone = pytz.timezone("Etc/UTC")
# создадим объекты datetime в таймзоне UTC, чтобы не применялось смещение локальной таймзоны
utc_from = datetime(201945tzinfo=timezone)
utc_to = datetime(2019, 4, 5, hour = 13, tzinfo=timezone)
# получим 10 баров с EURPLN M5 начиная с 01.04.2019 в таймзоне UTC
rates = MT5CopyRatesFrom("EURPLN"MT5_TIMEFRAME_M5utc_from, utc_to)
 
# завершим подключение к терминалу MetaTrader 5
MT5Shutdown()
# выведем каждый элемент полученных данных на новой строке
print("Выведем полученные данные как есть")
for rate in rates:
    print(rate)
 
# создадим из полученных данных DataFrame
rates_frame = pd.DataFrame(list(rates),
                           columns=['time', 'open', 'low', 'high', 'close', 'tick_volume', 'spread', 'real_volume'])
# выведем данные
print("\nВыведем датафрейм с данными")
print(rates_frame)  # видим, что Python представляет время открытия баров в локальной таймзоне, со смещением
 
# получим для локального компьютера смещение от времени UTC
UTC_OFFSET_TIMEDELTA = datetime.utcnow() - datetime.now()
 
# создадим простую функцию, которая влоб корректирует смещение
def local_to_utc(dt):
    return dt + UTC_OFFSET_TIMEDELTA
 
# применим смещение для столбца time в датафрейме rates_frame
rates_frame['time'] = rates_frame.apply(lambda ratelocal_to_utc(rate['time']), axis=1)
 
# еще раз выведем данные и убедимся, что теперь время открытия изменилось
print("\nВыведем датафрейм после корректировки времени")
print(rates_frame)
 
Результат:
Выведем полученные данные как есть
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 30), open=4.2988, low=4.2993, high=4.2986, close=4.2989, tick_volume=853, spread=540, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 35), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=1, spread=630, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 40), open=4.2989, low=4.2991, high=4.2987, close=4.2989, tick_volume=10, spread=560, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 45), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=2, spread=600, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 50), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=4, spread=640, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 55), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=4, spread=640, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 0), open=4.2989, low=4.2995, high=4.29872, close=4.2994, tick_volume=40, spread=500, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 5), open=4.2995, low=4.2998, high=4.299, close=4.2998, tick_volume=38, spread=440, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 10), open=4.2998, low=4.2998, high=4.2991, close=4.2992, tick_volume=35, spread=440, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 15), open=4.2992, low=4.2995, high=4.2989, close=4.2993, tick_volume=379, spread=500, real_volume=0)
 
Выведем из датафрейма первые 10 значений
                 time    open     low     high   close  tick_volume  spread  real_volume
0 2019-04-01 03:30:00  4.2988  4.2993  4.29860  4.2989          853     540            0
1 2019-04-01 03:35:00  4.2989  4.2989  4.29890  4.2989            1     630            0
2 2019-04-01 03:40:00  4.2989  4.2991  4.29870  4.2989           10     560            0
3 2019-04-01 03:45:00  4.2989  4.2989  4.29890  4.2989            2     600            0
4 2019-04-01 03:50:00  4.2989  4.2989  4.29890  4.2989            4     640            0
5 2019-04-01 03:55:00  4.2989  4.2989  4.29890  4.2989            4     640            0
6 2019-04-01 04:00:00  4.2989  4.2995  4.29872  4.2994           40     500            0
7 2019-04-01 04:05:00  4.2995  4.2998  4.29900  4.2998           38     440            0
8 2019-04-01 04:10:00  4.2998  4.2998  4.29910  4.2992           35     440            0
9 2019-04-01 04:15:00  4.2992  4.2995  4.29890  4.2993          379     500            0
 
Выведем из датафрейма первые 10 значений после корректировки времени 
                 time    open     low     high   close  tick_volume  spread  real_volume
0 2019-04-01 00:30:00  4.2988  4.2993  4.29860  4.2989          853     540            0
1 2019-04-01 00:35:00  4.2989  4.2989  4.29890  4.2989            1     630            0
2 2019-04-01 00:40:00  4.2989  4.2991  4.29870  4.2989           10     560            0
3 2019-04-01 00:45:00  4.2989  4.2989  4.29890  4.2989            2     600            0
4 2019-04-01 00:50:00  4.2989  4.2989  4.29890  4.2989            4     640            0
5 2019-04-01 00:55:00  4.2989  4.2989  4.29890  4.2989            4     640            0
6 2019-04-01 01:00:00  4.2989  4.2995  4.29872  4.2994           40     500            0
7 2019-04-01 01:05:00  4.2995  4.2998  4.29900  4.2998           38     440            0
8 2019-04-01 01:10:00  4.2998  4.2998  4.29910  4.2992           35     440            0
9 2019-04-01 01:15:00  4.2992  4.2995  4.29890  4.2993          379     500            0

Смотри также

CopyRates, MT5CopyRatesFrom, MT5CopyRatesRange, MT5CopyTicksFrom, MT5CopyTicksRange