copy_rates_range

Obtiene las barras en el intervalo de fechas indicado del terminal MetaTrader 5.

copy_rates_range(
   symbol,       // nombre del símbolo
   timeframe,    // marco temporal
   date_from,    // fecha a partir de la cual se solicitan las barras
   date_to       // fecha hasta la cual se solicitan las barras
   )

Parámetros

symbol

[in]  Nombre del instrumento financiero, por ejemplo, "EURUSD". Parámetro no nombrado obligatorio.

timeframe

[in]  Marco temporal para el que se solicitan las barras. Se establece con el valor de la enumeración TIMEFRAME. Parámetro no nombrado obligatorio.

date_from

[in]  Fecha a partir de la cual se solicitan las barras. Se establece con el objeto datetime o como número de segundos transcurridos desde el 1970.01.01. Se dan las barras con una hora de apertura >= date_from. Parámetro no nombrado obligatorio.

date_to

[in]  Fecha hasta la cual se solicitan las barras. Se establece con el objeto datetime o como número de segundos transcurridos desde el 1970.01.01. Se dan las barras con una hora de apertura <= date_to. Parámetro no nombrado obligatorio.

Valor retornado

Retona las barras en forma de matriz numpy con las columnas nombradas time, open, high, low, close, tick_volume, spread y real_volume. En caso de error, retorna None; la información sobre el error se puede obtener con la ayuda de last_error().

Observación

Para más información, mire la función CopyRates().

El terminal MetaTrader 5 entrega las barras solo dentro de la historia disponible para el usuario en los gráficos. El número de barras disponibles para el usuario se establece en los ajustes con el parámetro "Máx. de barras en la ventana".

Python, al crear el objeto datetime, usa el huso horario de la hora local, mientras que el terminal MetaTrader 5 guarda la hora de los ticks y la apertura de las barras en el huso horario UTC (sin desplazamiento). Por eso, para ejecutar las funciones que usen la hora, es necesario crear datetime en la hora UTC. Los datos recibidos del terminal MetaTrader 5 tienen la hora UTC.

Ejemplo:

from datetime import datetime
import MetaTrader5 as mt5
# mostramos los datos sobre el paquete MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)
 
# importamos el módulo pandas para mostrar los datos obtenidos en forma de recuadro
import pandas as pd
pd.set_option('display.max_columns', 500# cuántas columnas mostramos
pd.set_option('display.width', 1500)      # máx. anchura del recuadro para la muestra
# importamos el módulo pytz para trabajar con el huso horario
import pytz
 
# establecemos la conexión con el terminal MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# establecemos el huso horario en UTC
timezone = pytz.timezone("Etc/UTC")
# creamos los objetos datetime en el huso horario UTC, para que no se aplique el desplazamiento del huso horario local
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
utc_to = datetime(2020, 1, 11, hour = 13, tzinfo=timezone)
# obtenemos las barras de USDJPY M5 en el intervalo 2020.01.10 00:00 - 2020.01.11 13:00 en el huso horario UTC
rates = mt5.copy_rates_range("USDJPY"mt5.TIMEFRAME_M5utc_from, utc_to)
 
# finalizamos la conexión con el terminal MetaTrader 5
mt5.shutdown()
# mostramos cada elemento de los datos obtenidos en una nueva línea
print("Mostramos los datos obtenidos como son")
counter=0
for rate in rates:
    counter+=1
    if counter<=10:
        print(rate)
 
# creamos un DataFrame de los datos obtenidos
rates_frame = pd.DataFrame(rates)
# convertimos la hora en segundos al formato datetime
rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')
 
# mostramos los datos
print("\nMostramos el frame de datos con la información")
print(rates_frame.head(10))
 
Resultado:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
Mostramos los datos obtenidos como son
(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)
 
Mostramos el frame de datos con la información
                 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

Ver también

CopyRates, copy_rates_from, copy_rates_range, copy_ticks_from, copy_ticks_range