MT5CopyRatesRange

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

MT5CopyRatesRange(
   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".

timeframe

[in]  Marco temporal para el que se solicitan las barras. Se establece con un valor de la enumeración MT5_TIMEFRAME.

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.

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.

Valor retornado

Retona las barras en forma de tuplas (time, open, high, low, close, tick_volume, spread, real_volume).

Observación

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

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, pero al intentar imprimirlos, Python aplicará el desplazamiento a la hora local. Por eso, los datos obtenidos también deben ser corregidos para la representación visual.

Ejemplo:

from datetime import datetime
from MetaTrader5 import *
# 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)      # anchura máx. del recuadro para la muestra
 
# establecemos la conexión con el terminal MetaTrader 5
MT5Initialize()
# esperamos a que MetaTrader 5 se conecte al servidor comercial
MT5WaitForTerminal()
 
# 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 localutc_from = datetime(201945tzinfo=timezone)
utc_to = datetime(2019, 4, 5, hour = 13, tzinfo=timezone)
# obtenemos 10 barras de EURPLN M5 a partir de 01.04.2019 en el huso horario UTC
rates = MT5CopyRatesFrom("EURPLN"MT5_TIMEFRAME_M5utc_from, utc_to)
 
# finalizamos la conexión con el terminal MetaTrader 5
MT5Shutdown()
# mostramos cada elemento de los datos obtenidos en una nueva líneaprint("Mostramos los datos obtenidos como son")
for rate in rates:
    print(rate)
 
# creamos un DataFrame de los datos obtenidos
rates_frame = pd.DataFrame(list(rates),
                           columns=['time', 'open', 'low', 'high', 'close', 'tick_volume', 'spread', 'real_volume'])
# mostramos los datos
print("\nMostramos el frame de datos con la información")
print(rates_frame)  # vemos que Python representa la hora de apertura de las barras en el huso horario local, con desplazamiento
 
# obtenemos para la computadora local el desplazamiento con respecto a UTC
UTC_OFFSET_TIMEDELTA = datetime.utcnow() - datetime.now()
 
# creamos una función sencilla que corrige el desplazamiento
def local_to_utc(dt):
    return dt + UTC_OFFSET_TIMEDELTA
 
# aplicamos el desplazamiento para la columna time en el frame de datos rates_frame
rates_frame['time'] = rates_frame.apply(lambda ratelocal_to_utc(rate['time']), axis=1)
 
# mostramos de nuevo los datos y comprobamos que la hora de apertura ha cambiado
print("\nMostramos el frame de datos tras corregir la hora")
print(rates_frame)
 
Resultado:
Mostramos los datos obtenidos como son
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)
 
Mostramos del frame de datos los primeros 10 valores
                 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
 
Mostramos del frame de datos los primeros 10 valores después de la corrección de la hora
                 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

Ver también

CopyRates, MT5CopyRatesFrom, MT5CopyRatesRange, MT5CopyTicksFrom, MT5CopyTicksRange