copy_rates_range

Recebe barras a partir do terminal MetaTrader 5, no intervalo de datas especificado.

copy_rates_range(
   symbol,       // nome do símbolo
   timeframe,    // período gráfico
   date_from,    // data a partir da qual são solicitadas as barras
   date_to       // data para a qual são solicitadas as barras
   )

Parâmetros

symbol

[in]  Nome do instrumento financeiro, por exemplo, "EURUSD". Parâmetro sem nome obrigatório.

timeframe

[in]  Período gráfico para o qual são solicitadas as barras. É definido pelo valor a partir da enumeração TIMEFRAME. Parâmetro sem nome obrigatório.

date_from

[in]  Data a partir da qual são solicitadas as barras. É definido pelo objeto datetime ou pelo número de segundos que passaram desde 1970.01.01. São usadas barras com tempo de abertura >= date_from. Parâmetro sem nome obrigatório.

date_to

[in]  Data para a qual são solicitadas as barras. É definido pelo objeto datetime ou pelo número de segundos que passaram desde 1970.01.01. São usadas barras com tempo de abertura <= date_to. Parâmetro sem nome obrigatório.

Valor retornado

Retorna barras na forma de array numpy contendo colunas nomeadas time, open, high, low, close, tick_volume, spread e real_volume. Em caso de erro, retorna None, enquanto informações sobre o erro podem ser obtidas usando last_error().

Observação

Para mais informações, veja a função CopyRates().

O terminal MetaTrader 5 fornece barras apenas nos limites do histórico disponível para o usuário nos gráficos. O número de barras disponíveis para o usuário é definido nas configurações com o parâmetro "Máx. de barras no gráfico"

Python, ao criar um objeto datetime, usa o fuso horário local, enquanto o terminal MetaTrader 5 armazena o tempo de ticks e de abertura de barras no fuso horário UTC (sem deslocamento). Assim, para executar funções que usam tempo, deve-se criar um datetime no horário UTC. Os dados recebidos do terminal MetaTrader 5 têm hora UTC.

Exemplo:

from datetime import datetime
import MetaTrader5 as mt5
# exibimos dados sobre o pacote MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)
 
# importamos o módulo pandas para exibir os dados recebidos na forma de uma tabela
import pandas as pd
pd.set_option('display.max_columns', 500# número de colunas exibidas
pd.set_option('display.width', 1500)      # max. largura para exibição da tabela
# importamos o módulo pytz para trabalhar com o fuso horário
import pytz
 
# estabelecemos a conexão ao MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# definimos o fuso horário como UTC
timezone = pytz.timezone("Etc/UTC")
# criamos o objeto datatime no fuso horário UTC para que não seja aplicado o deslocamento do fuso horário local
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
utc_to = datetime(2020, 1, 11, hour = 13, tzinfo=timezone)
# obtemos as barras com USDJPY M5 no intervalo 2020.01.10 00:00 - 2020.01.11 13:00 no fuso horário UTC
rates = mt5.copy_rates_range("USDJPY"mt5.TIMEFRAME_M5utc_from, utc_to)
 
# concluímos a conexão ao terminal MetaTrader 5
mt5.shutdown()
# exibimos cada elemento dos dados obtidos numa nova linha
print("Exibimos os dados obtidos como estão")
counter=0
for rate in rates:
    counter+=1
    if counter<=10:
        print(rate)
 
# criamos a partir dos dados obtidos DataFrame
rates_frame = pd.DataFrame(rates)
# convertemos o tempo em segundos no formato datetime
rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')
 
# exibimos dados
print("\nExibimos o dataframe com dados")
print(rates_frame.head(10))
 
Resultado:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
Exibimos os dados como eles são
(1578614400, 109.513, 109.527, 109.505, 109.521, 43, 2, 0)
(1578614700, 109.521, 109.549, 109.518, 109.543, 215, 8, 0)
(1578615000, 109.543, 109.543, 109.466, 109.505, 98, 10, 0)
(1578615300, 109.504, 109.534, 109.502, 109.517, 155, 8, 0)
(1578615600, 109.517, 109.539, 109.513, 109.527, 71, 4, 0)
(1578615900, 109.526, 109.537, 109.484, 109.52, 106, 9, 0)
(1578616200, 109.52, 109.524, 109.508, 109.51, 205, 7, 0)
(1578616500, 109.51, 109.51, 109.491, 109.496, 44, 8, 0)
(1578616800, 109.496, 109.509, 109.487, 109.5, 85, 5, 0)
(1578617100, 109.5, 109.504, 109.487, 109.489, 82, 7, 0)
 
Exibimos o dataframe com dados
                 time     open     high      low    close  tick_volume  spread  real_volume
0 2020-01-10 00:00:00  109.513  109.527  109.505  109.521           43       2            0
1 2020-01-10 00:05:00  109.521  109.549  109.518  109.543          215       8            0
2 2020-01-10 00:10:00  109.543  109.543  109.466  109.505           98      10            0
3 2020-01-10 00:15:00  109.504  109.534  109.502  109.517          155       8            0
4 2020-01-10 00:20:00  109.517  109.539  109.513  109.527           71       4            0
5 2020-01-10 00:25:00  109.526  109.537  109.484  109.520          106       9            0
6 2020-01-10 00:30:00  109.520  109.524  109.508  109.510          205       7            0
7 2020-01-10 00:35:00  109.510  109.510  109.491  109.496           44       8            0
8 2020-01-10 00:40:00  109.496  109.509  109.487  109.500           85       5            0
9 2020-01-10 00:45:00  109.500  109.504  109.487  109.489           82       7            0

Veja também

CopyRates, copy_rates_from, copy_rates_range, copy_ticks_from, copy_ticks_range