128 lines
6.3 KiB
Markdown
128 lines
6.3 KiB
Markdown
# copy_rates_range
|
||
|
||
Get bars in the specified date range from the MetaTrader 5 terminal.
|
||
|
||
```
|
||
copy_rates_range(
|
||
symbol, // symbol name
|
||
timeframe, // timeframe
|
||
date_from, // date the bars are requested from
|
||
date_to // date, up to which the bars are requested
|
||
)
|
||
|
||
```
|
||
|
||
Parameters
|
||
|
||
symbol
|
||
|
||
[in] Financial instrument name, for example, "EURUSD". Required unnamed parameter.
|
||
|
||
timeframe
|
||
|
||
[in] Timeframe the bars are requested for. Set by a value from the [TIMEFRAME](/en/docs/python_metatrader5/mt5copyratesfrom_py#timeframe) enumeration. Required unnamed parameter.
|
||
|
||
date_from
|
||
|
||
[in] Date the bars are requested from. Set by the 'datetime' object or as a number of seconds elapsed since 1970.01.01. Bars with the open time >= date_from are returned. Required unnamed parameter.
|
||
|
||
date_to
|
||
|
||
[in] Date, up to which the bars are requested. Set by the 'datetime' object or as a number of seconds elapsed since 1970.01.01. Bars with the open time <= date_to are returned. Required unnamed parameter.
|
||
|
||
Return Value
|
||
|
||
Returns bars as the numpy array with the named time, open, high, low, close, tick_volume, spread and real_volume columns. Returns None in case of an error. The info on the error can be obtained using [last_error()](/en/docs/python_metatrader5/mt5lasterror_py).
|
||
|
||
Note
|
||
|
||
See the [CopyRates()](/en/docs/series/copyrates) function for more information.
|
||
|
||
MetaTrader 5 terminal provides bars only within a history available to a user on charts. The number of bars available to users is set in the "[Max. bars in chart](https://www.metatrader5.com/en/terminal/help/startworking/settings#max_bars)" parameter.
|
||
|
||
When creating the 'datetime' object, Python uses the local time zone, while MetaTrader 5 stores tick and bar open time in UTC time zone (without the shift). Therefore, 'datetime' should be created in UTC time for executing functions that use time. Data received from the MetaTrader 5 terminal has UTC time.
|
||
|
||
Example:
|
||
|
||
```
|
||
from datetime import datetime
|
||
import MetaTrader5 as mt5
|
||
# display data on the MetaTrader 5 package
|
||
print("MetaTrader5 package author: ",mt5.__author__)
|
||
print("MetaTrader5 package version: ",mt5.__version__)
|
||
|
||
# import the 'pandas' module for displaying data obtained in the tabular form
|
||
import pandas as pd
|
||
pd.set_option('display.max_columns', 500) # number of columns to be displayed
|
||
pd.set_option('display.width', 1500) # max table width to display
|
||
# import pytz module for working with time zone
|
||
import pytz
|
||
|
||
# establish connection to MetaTrader 5 terminal
|
||
if not mt5.initialize():
|
||
print("initialize() failed, error code =",mt5.last_error())
|
||
quit()
|
||
|
||
# set time zone to UTC
|
||
timezone = pytz.timezone("Etc/UTC")
|
||
# create 'datetime' objects in UTC time zone to avoid the implementation of a local time zone offset
|
||
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
|
||
utc_to = datetime(2020, 1, 11, hour = 13, tzinfo=timezone)
|
||
# get bars from USDJPY M5 within the interval of 2020.01.10 00:00 - 2020.01.11 13:00 in UTC time zone
|
||
rates = mt5.copy_rates_range("USDJPY", mt5.TIMEFRAME_M5, utc_from, utc_to)
|
||
|
||
# shut down connection to the MetaTrader 5 terminal
|
||
mt5.shutdown()
|
||
|
||
# display each element of obtained data in a new line
|
||
print("Display obtained data 'as is'")
|
||
counter=0
|
||
for rate in rates:
|
||
counter+=1
|
||
if counter<=10:
|
||
print(rate)
|
||
|
||
# create DataFrame out of the obtained data
|
||
rates_frame = pd.DataFrame(rates)
|
||
# convert time in seconds into the 'datetime' format
|
||
rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')
|
||
|
||
# display data
|
||
print("\nDisplay dataframe with data")
|
||
print(rates_frame.head(10))
|
||
|
||
Result:
|
||
MetaTrader5 package author: MetaQuotes Software Corp.
|
||
MetaTrader5 package version: 5.0.29
|
||
|
||
Display obtained data 'as is'
|
||
(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)
|
||
|
||
Display dataframe with data
|
||
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
|
||
|
||
```
|
||
|
||
See also
|
||
|
||
[CopyRates](/en/docs/series/copyrates), [copy_rates_from](/en/docs/python_metatrader5/mt5copyratesfrom_py), [copy_rates_range](/en/docs/python_metatrader5/mt5copyratesrange_py), [copy_ticks_from](/en/docs/python_metatrader5/mt5copyticksfrom_py), [copy_ticks_range](/en/docs/python_metatrader5/mt5copyticksrange_py)
|