Files
2025-03-02 22:25:33 +01:00

32 lines
1.2 KiB
Python

# data_loader.py
import MetaTrader5 as mt5
import pandas as pd
import numpy as np
from datetime import datetime
def get_data_mt5(symbol: str, n_bars: int, timeframe, start_pos=None) -> pd.DataFrame:
"""
Fetch historical data from MetaTrader 5.
- `symbol`: Trading instrument (e.g., "BTCUSD").
- `n_bars`: Number of bars to retrieve.
- `timeframe`: MT5 timeframe (e.g., mt5.TIMEFRAME_H1).
- `start_pos`: Offset from the most recent bar (default `None` for live trading).
If `start_pos` is `None`, fetches the latest `n_bars` (useful for live trading).
If `start_pos` is given, fetches `n_bars` from that historical position (useful for backtesting).
"""
if start_pos is None:
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, n_bars) # Latest n_bars for live trading
else:
rates = mt5.copy_rates_from_pos(symbol, timeframe, start_pos, n_bars) # Historical data for backtesting
if rates is None:
raise ValueError(f"Could not retrieve data for {symbol}")
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
df.set_index('time', inplace=True)
return df