如何获取 Python MetaTrader 5 的每周数据

发布于 2025-01-11 16:45:10 字数 378 浏览 1 评论 0原文

我正在开发一个脚本来获取历史数据。我正在尝试获取每周数据,但 MetaTrader 5 返回空数据框。我正在使用:

import MetaTrader5 as mt5
import pandas as pd

mt5.initialize()

ticks = mt5.copy_rates_range(
    'WIN$N', 
    mt5.TIMEFRAME_W1, 
    datetime(2022, 2, 28),
    datetime(2022, 3, 4)
)

print (pd.DataFrame(ticks))

为什么我得到一个空数据框?将此脚本与分钟或每小时数据一起使用,效果非常好。我尝试查看 MT5 文档,但没有使用每周或每月数据的示例。

I'm developing a script to get historical data. I'm trying to get weekly data but MetaTrader 5 is returning an empty dataframe. I'm using:

import MetaTrader5 as mt5
import pandas as pd

mt5.initialize()

ticks = mt5.copy_rates_range(
    'WIN$N', 
    mt5.TIMEFRAME_W1, 
    datetime(2022, 2, 28),
    datetime(2022, 3, 4)
)

print (pd.DataFrame(ticks))

Why I'm getting an empty dataframe? Using this script with Minutes or Hourly data it works perfectly. I try to look at MT5 documentation but there is none example using WEEKLY or MONTLHY data.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌︼了一个春 2025-01-18 16:45:10

获取每周和每月数据的解决方案是(将 WIN$N 更改为您的股票):

years = [2001, 2002, 2003, 2004, 2005,
        2006, 2007, 2008, 2009, 2010,
        2011, 2012, 2013, 2014, 2015,
        2016, 2017, 2018, 2019, 2020,
        2021]

months = [1, 2, 3, 4, 5, 6,
         7, 8, 9, 10, 11, 12]

timeframes = {
    'W1' : 1  | 0x8000,
    'MN1': 1  | 0xC000
}        

    
for year in years:
    for month in months:
        for timeframe in timeframes:
            path = day.strftime("data/" + str(timeframe) + "/%Y/%m")
            os.makedirs(path, exist_ok=True)
            # request tick data
            if month != 12:
                ticks = mt5.copy_rates_range(
                    'WIN$N', 
                    timeframes[timeframe], 
                    datetime(year, month, 1), 
                    datetime(year, month + timedelta(month=1), 1)
                )
                ticks = pd.DataFrame(ticks)
                ticks.to_csv(path + "/" + str(year) + '_' + str(month) + ".csv")
            else:
                ticks = mt5.copy_rates_range(
                    'WIN$N', 
                    timeframes[timeframe], 
                    datetime(year, month, 1), 
                    datetime(year, month, calendar.monthrange(ano,mes)[1])
                )
                ticks = pd.DataFrame(ticks)
                ticks.to_csv(path + "/" + str(year) + '_' + str(month) + ".csv")
            

The solution to get weekly and monthly data is (change WIN$N for your stock):

years = [2001, 2002, 2003, 2004, 2005,
        2006, 2007, 2008, 2009, 2010,
        2011, 2012, 2013, 2014, 2015,
        2016, 2017, 2018, 2019, 2020,
        2021]

months = [1, 2, 3, 4, 5, 6,
         7, 8, 9, 10, 11, 12]

timeframes = {
    'W1' : 1  | 0x8000,
    'MN1': 1  | 0xC000
}        

    
for year in years:
    for month in months:
        for timeframe in timeframes:
            path = day.strftime("data/" + str(timeframe) + "/%Y/%m")
            os.makedirs(path, exist_ok=True)
            # request tick data
            if month != 12:
                ticks = mt5.copy_rates_range(
                    'WIN$N', 
                    timeframes[timeframe], 
                    datetime(year, month, 1), 
                    datetime(year, month + timedelta(month=1), 1)
                )
                ticks = pd.DataFrame(ticks)
                ticks.to_csv(path + "/" + str(year) + '_' + str(month) + ".csv")
            else:
                ticks = mt5.copy_rates_range(
                    'WIN$N', 
                    timeframes[timeframe], 
                    datetime(year, month, 1), 
                    datetime(year, month, calendar.monthrange(ano,mes)[1])
                )
                ticks = pd.DataFrame(ticks)
                ticks.to_csv(path + "/" + str(year) + '_' + str(month) + ".csv")
            
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文