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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.