copy_rates_from

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

copy_rates_from(
   symbol,       // nombre del símbolo
   timeframe,    // marco temporal
   date_from,    // fecha de apertura de la barra inicial
   count         // número de 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 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. Parámetro no nombrado obligatorio.

count

[in]  Número de barras que se deben obtener. 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().

Sólo se devuelven los datos cuya fecha es menor (anterior) o igual a la especificada. Este intervalo se establece y se cuenta con la precisión de segundos. Es decir, la fecha de apertura de cualquier barra siempre es igual o menor que la especificada.

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.  

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

Identificador

Descripción

TIMEFRAME_M1

1 minuto

TIMEFRAME_M2

2 minutos

TIMEFRAME_M3

3 minutos

TIMEFRAME_M4

4 minutos

TIMEFRAME_M5

5 minutos

TIMEFRAME_M6

6 minutos

TIMEFRAME_M10

10 minutos

TIMEFRAME_M12

12 minutos

TIMEFRAME_M12

15 minutos

TIMEFRAME_M20

20 minutos

TIMEFRAME_M30

30 minutos

TIMEFRAME_H1

1 hora

TIMEFRAME_H2

2 horas

TIMEFRAME_H3

3 horas

TIMEFRAME_H4

4 horas

TIMEFRAME_H6

6 horas

TIMEFRAME_H8

8 horas

TIMEFRAME_H12

12 horas

TIMEFRAME_D1

1 día

TIMEFRAME_W1

1 semana

TIMEFRAME_MN1

1 mes

 

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)      # 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 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 el objeto 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)
# obtenemos 10 barras de EURUSD H4 a partir del 01.10.2020 en el huso horario UTC
rates = mt5.copy_rates_from("EURUSD"mt5.TIMEFRAME_H4utc_from10)
 
# 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")
for rate in rates:
    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)  
 
Resultado:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
Mostramos los datos obtenidos como son
(1578484800, 1.11382, 1.11385, 1.1111, 1.11199, 9354, 1, 0)
(1578499200, 1.11199, 1.11308, 1.11086, 1.11179, 10641, 1, 0)
(1578513600, 1.11178, 1.11178, 1.11016, 1.11053, 4806, 1, 0)
(1578528000, 1.11053, 1.11193, 1.11033, 1.11173, 3480, 1, 0)
(1578542400, 1.11173, 1.11189, 1.11126, 1.11182, 2236, 1, 0)
(1578556800, 1.11181, 1.11203, 1.10983, 1.10993, 7984, 1, 0)
(1578571200, 1.10994, 1.11173, 1.10965, 1.11148, 7406, 1, 0)
(1578585600, 1.11149, 1.11149, 1.10923, 1.11046, 7468, 1, 0)
(1578600000, 1.11046, 1.11097, 1.11033, 1.11051, 3450, 1, 0)
(1578614400, 1.11051, 1.11093, 1.11017, 1.11041, 2448, 1, 0)
 
Mostramos el frame de datos con la información
                 time     open     high      low    close  tick_volume  spread  real_volume
0 2020-01-08 12:00:00  1.11382  1.11385  1.11110  1.11199         9354       1            0
1 2020-01-08 16:00:00  1.11199  1.11308  1.11086  1.11179        10641       1            0
2 2020-01-08 20:00:00  1.11178  1.11178  1.11016  1.11053         4806       1            0
3 2020-01-09 00:00:00  1.11053  1.11193  1.11033  1.11173         3480       1            0
4 2020-01-09 04:00:00  1.11173  1.11189  1.11126  1.11182         2236       1            0
5 2020-01-09 08:00:00  1.11181  1.11203  1.10983  1.10993         7984       1            0
6 2020-01-09 12:00:00  1.10994  1.11173  1.10965  1.11148         7406       1            0
7 2020-01-09 16:00:00  1.11149  1.11149  1.10923  1.11046         7468       1            0
8 2020-01-09 20:00:00  1.11046  1.11097  1.11033  1.11051         3450       1            0
9 2020-01-10 00:00:00  1.11051  1.11093  1.11017  1.11041         2448       1            0

Ver también

CopyRates, copy_rates_from_pos, copy_rates_range, copy_ticks_from, copy_ticks_range