MT5CopyRatesFrom

Obtiene las barras del terminal MetaTrader 5, a partir de la fecha indicada.

MT5CopyRatesFrom(
   symbol,       // nombre del símbolo
   timeframe,    // marco temporal
   from,         // fecha de apertura de la barra inicial
   count         // número de 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.

from

[in]  Fecha de apertura de la primera barra de la muestra solicitada. Se establece con el objeto datetime o como número de segundos transcurridos desde el 1970.01.01.

count

[in]  Número de barras que se deben obtener.

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.  

MT5_TIMEFRAME es una enumeración con los posibles valores de los periodos del gráfico

Identificador

Descripción

MT5_TIMEFRAME_M1

1 minuto

MT5_TIMEFRAME_M2

2 minutos

MT5_TIMEFRAME_M3

3 minutos

MT5_TIMEFRAME_M4

4 minutos

MT5_TIMEFRAME_M5

5 minutos

MT5_TIMEFRAME_M6

6 minutos

MT5_TIMEFRAME_M10

10 minutos

MT5_TIMEFRAME_M12

12 minutos

MT5_TIMEFRAME_M12

15 minutos

MT5_TIMEFRAME_M20

20 minutos

MT5_TIMEFRAME_M30

30 minutos

MT5_TIMEFRAME_H1

1 hora

MT5_TIMEFRAME_H2

2 horas

MT5_TIMEFRAME_H3

3 horas

MT5_TIMEFRAME_H4

4 horas

MT5_TIMEFRAME_H6

6 horas

MT5_TIMEFRAME_H8

8 horas

MT5_TIMEFRAME_H12

12 horas

MT5_TIMEFRAME_D1

1 día

MT5_TIMEFRAME_W1

1 semana

MT5_TIMEFRAME_MON1

1 mes

 

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
# importamos el módulo pytz para trabajar con el huso horario
import pytz
 
# establecemos la conexión con 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 el objeto datetime en el huso horario UTC, para que no se aplique el desplazamiento del huso horario local
utc_from = datetime(201945tzinfo=timezone)
# obtenemos 10 barras de EURUSD H4 a partir de 01.04.2019 en el huso horario UTC
rates = MT5CopyRatesFrom("EURUSD"MT5_TIMEFRAME_H4utc_from10)
 
# finalizamos la conexión con el terminal MetaTrader 5
MT5Shutdown()
# mostramos cada elemento de los datos obtenidos en una nueva línea
print("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 de las velas de 4 horas sea múltipla de 4
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, 3, 15, 0), open=1.12431, low=1.12543, high=1.12335, close=1.12341, tick_volume=11735, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 19, 0), open=1.12339, low=1.12487, high=1.12247, close=1.12439, tick_volume=15241, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 23, 0), open=1.12439, low=1.12478, high=1.12311, close=1.12312, tick_volume=4973, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 3, 0), open=1.12324, low=1.12472, high=1.12318, close=1.1244, tick_volume=3099, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 7, 0), open=1.1244, low=1.12451, high=1.12364, close=1.12406, tick_volume=3304, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 11, 0), open=1.12406, low=1.12472, high=1.12302, close=1.12313, tick_volume=10119, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 15, 0), open=1.12313, low=1.12359, high=1.12122, close=1.12171, tick_volume=15098, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 19, 0), open=1.12171, low=1.12246, high=1.12056, close=1.12188, tick_volume=15369, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 23, 0), open=1.12187, low=1.12265, high=1.1213, close=1.12191, tick_volume=5156, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 5, 3, 0), open=1.12199, low=1.12286, high=1.1217, close=1.1222, tick_volume=3903, spread=4, real_volume=0)
 
Mostramos el frame de datos con la información
                 time     open      low     high    close  tick_volume  spread  real_volume
0 2019-04-03 15:00:00  1.12431  1.12543  1.12335  1.12341        11735       8            0
1 2019-04-03 19:00:00  1.12339  1.12487  1.12247  1.12439        15241       8            0
2 2019-04-03 23:00:00  1.12439  1.12478  1.12311  1.12312         4973       8            0
3 2019-04-04 03:00:00  1.12324  1.12472  1.12318  1.12440         3099       4            0
4 2019-04-04 07:00:00  1.12440  1.12451  1.12364  1.12406         3304       4            0
5 2019-04-04 11:00:00  1.12406  1.12472  1.12302  1.12313        10119       8            0
6 2019-04-04 15:00:00  1.12313  1.12359  1.12122  1.12171        15098       8            0
7 2019-04-04 19:00:00  1.12171  1.12246  1.12056  1.12188        15369       8            0
8 2019-04-04 23:00:00  1.12187  1.12265  1.12130  1.12191         5156       8            0
9 2019-04-05 03:00:00  1.12200  1.12286  1.12170  1.12220         3903       4            0
 
Mostramos el frame de datos después de corregir la hora de apertura de la vela
                 time     open      low     high    close  tick_volume  spread  real_volume
0 2019-04-03 12:00:00  1.12431  1.12543  1.12335  1.12341        11735       8            0
1 2019-04-03 16:00:00  1.12339  1.12487  1.12247  1.12439        15241       8            0
2 2019-04-03 20:00:00  1.12439  1.12478  1.12311  1.12312         4973       8            0
3 2019-04-04 00:00:00  1.12324  1.12472  1.12318  1.12440         3099       4            0
4 2019-04-04 04:00:00  1.12440  1.12451  1.12364  1.12406         3304       4            0
5 2019-04-04 08:00:00  1.12406  1.12472  1.12302  1.12313        10119       8            0
6 2019-04-04 12:00:00  1.12313  1.12359  1.12122  1.12171        15098       8            0
7 2019-04-04 16:00:00  1.12171  1.12246  1.12056  1.12188        15369       8            0
8 2019-04-04 20:00:00  1.12187  1.12265  1.12130  1.12191         5156       8            0
9 2019-04-05 00:00:00  1.12200  1.12286  1.12170  1.12220         3903       4            0

Ver también

CopyRates, MT5CopyRatesFromPos, MT5CopyRatesRange, MT5CopyTicksFrom, MT5CopyTicksRange