MT5 python没有返回更新的数据

beq87vna  于 2024-01-05  发布在  Python
关注(0)|答案(2)|浏览(191)

MT5没有返回最近指数的数据

  1. import MetaTrader5 as mt5
  2. mt5.initialize()
  3. import pandas as pd
  4. instrument = mt5.copy_rates_from_pos('BTCUSD',mt5.TIMEFRAME_H1,0,20)
  5. instrument = pd.DataFrame(instrument)
  6. instrument['time'] = pd.to_datetime(instrument['time'], unit = 's')
  7. instrument = instrument.set_index(['time'])

字符串
当我每小时运行这段代码时,它总是返回前一个条形图作为最后一个索引(而不是最近的条形图)。它应该返回最近的条形图,因为初始条形图索引设置为0。
未更新的数据示例:

  1. In()
  2. instrument['open'].tail(5)
  3. Out()
  4. 2022-10-29 11:00:00 20767.92
  5. 2022-10-29 12:00:00 20917.95
  6. 2022-10-29 13:00:00 20945.44
  7. 2022-10-29 14:00:00 20763.64
  8. 2022-10-29 15:00:00 20690.48


如果我在10秒后运行相同的代码,它将返回正确的信息(最近的条形图作为最后一个索引)。
正确(更新)数据:

  1. In()
  2. instrument['open'].tail(5)
  3. Out()
  4. 2022-10-29 12:00:00 20917.95
  5. 2022-10-29 13:00:00 20945.44
  6. 2022-10-29 14:00:00 20763.64
  7. 2022-10-29 15:00:00 20690.48
  8. 2022-10-29 16:00:00 20756.35


因此,从我可以告诉终端没有更新的信息时,- mt5.copy_rates_from_pos -被执行。
如何强制终端下载并更新之前的数据?
谢谢你的帮助

cu6pst1q

cu6pst1q1#

如果你想的话,你可以每秒更新收盘价。你必须用datetime运行它,否则你不会从mt5返回更新的日期和时间。

  1. from datetime import datetime
  2. import time
  3. import MetaTrader5 as mt
  4. import pandas as pd
  5. q = 0
  6. while q < 1:
  7. dt = datetime.now()
  8. mt = dt.strftime( '%H:%M:%S' )
  9. if dt.second > dt.second - 1:
  10. pull your data here
  11. print output
  12. time.sleep( 1 )

字符串
记住,只有收盘价会每秒更新,除非新的高点或低点是在酒吧的间隔,那么他们将更新以及。希望这有帮助

展开查看全部
v1l68za4

v1l68za42#

我尝试使用MetaTrader5和copy_rates_from_pos获取几个外汇对的最新1小时酒吧数据。一些对返回最新数据,一些对返回除了最新小时的数据。我四处打探,找到了一个解决方案。我不确定它是否是最好的解决方案,但它似乎有效。
基本上copy_rates_from_pos获取的数据已经在您本地运行的MetaTrader 5中。为了让我的MetaTrade 5尽快加载数据,我需要打开我感兴趣的货币对的图表。如果我不打开货币对的图表,MetaTrade 5不会及时获取数据。这有点道理。

相关问题