量化交易之One Piece篇 - Forex历史数据落地

import MetaTrader5 as mt5
import pytz
from datetime import datetime
from op_forex.model.MT5Account import MT5AccountInfo
from tqz_extern.tqz_constant import SymbolType

# from tqz_extern.pandas_operator import pandas
import pandas


if not mt5.initialize(login=MT5AccountInfo.get_account_id(), server=MT5AccountInfo.get_account_server(), password=MT5AccountInfo.get_account_password()):
    print("initialize() failed, error code =", mt5.last_error())
    quit()

class MT5HistoryDataDump:
    timezone = pytz.timezone("Etc/UTC")

    utc_from = datetime(2014, 1, 1, tzinfo=timezone)
    utc_to = datetime(2024, 8, 4, hour=0, tzinfo=timezone)

    @classmethod
    def run(cls):
        all_symbols = MT5AccountInfo.get_symbols(symbol_type=SymbolType.STOCK_INDEX) + MT5AccountInfo.get_symbols(symbol_type=SymbolType.SPOTS) + MT5AccountInfo.get_symbols(symbol_type=SymbolType.FOREX) + MT5AccountInfo.get_symbols(symbol_type=SymbolType.CRYPTO)
        for single_symbol in all_symbols:
            for timeframe, mt5_timeframe in MT5AccountInfo.get_timeframe_map().items():
                his_bars = mt5.copy_rates_range(single_symbol, mt5_timeframe, cls.utc_from, cls.utc_to)
                his_bars_df = pandas.DataFrame(his_bars)
                his_bars_df['time'] = pandas.to_datetime(his_bars_df['time'], unit='s')

                his_bars_df.to_csv(
                    f'./his_data/{single_symbol}_{timeframe}.csv',
                    index=False
                )

        print('yes, is login.')
        mt5.shutdown()


if __name__ == '__main__':
    MT5HistoryDataDump.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值