使用python在MetaTrader5中复制速率范围时间帧M1



我最近尝试使用python在Jupyter Notebook中使用metatrader5。我已经安装metatrader5使用:

pip install MetaTrader5

当我使用此代码为复制EUR_USD数据复制费率时,出现了一个错误。代码如下所示:

from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
import MetaTrader5 as mt5
import pytz
mt5.initialize()
print(mt5.terminal_info())   
print(mt5.version())
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1500)  
timezone = pytz.timezone("Etc/UTC")
utc_from = datetime(2017, 1, 5, tzinfo=timezone)
utc_to = datetime(2019, 12, 27, hour = 23, tzinfo=timezone) 
rates = mt5.copy_rates_range("EURUSD", mt5.TIMEFRAME_M1, utc_from, utc_to)
print("Display obtained data 'as is'")
counter=0
for rate in rates:
counter+=1
if counter<=10:
print(rate)

然后出现错误:

Display obtained data 'as is'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-5307ec9302f7> in <module>
2 print("Display obtained data 'as is'")
3 counter=0
----> 4 for rate in rates:
5     counter+=1
6     if counter<=10:
TypeError: 'NoneType' object is not iterable

我发现rate中没有值,这意味着mt5.copy_rates_range((似乎不起作用。与时间帧D1、H1一起工作但与时间帧M1一起工作的代码不起作用。

有什么解决办法吗。。。?谢谢

如文档中所述

MetaTrader 5终端只提供图表上用户可用的历史记录中的条形图。可供用户使用的条数设置在";图表中的最大条形图";参数

因此,如果你打算复制大量数据,你应该首先打开metatrader5平台,选择工具菜单,然后选择选项,然后绘制图表,并将图表中的最大条形图最大化(用9填充所有可用数字(。之后,如果之前没有打开符号的图表,则必须打开该图表,并允许平台更新图表。您可以尝试滚动图表来下载整个范围。

现在就试试你的代码,别担心。我复制了多年的1M数据,没有任何问题。

您只能复制设置数量的条形图。我不知道这是故意的还是错误。使用较小的日期范围或较大的时间范围。一年的最短时间为5分钟。

您的时间范围非常大(对于mt5.TIMEFRAME_M1(。缩小的范围(例如30天(

另一件事是您的符号。我使用的是欧元兑美元,但当我检查我的符号时,实际上是EURUSDm