Files

71 lines
1.7 KiB
Python

"""Timeframe conversion between CCXT and MT5Bridge formats.
CCXT uses short lowercase strings: "1m", "5m", "15m", "30m", "1h", "4h", "1d"
MT5Bridge uses prefixed identifiers: "TIMEFRAME_M1", "TIMEFRAME_M5", ...
"""
# CCXT format -> MT5Bridge format
CCXT_TO_MT5 = {
"1m": "TIMEFRAME_M1",
"5m": "TIMEFRAME_M5",
"15m": "TIMEFRAME_M15",
"30m": "TIMEFRAME_M30",
"1h": "TIMEFRAME_H1",
"4h": "TIMEFRAME_H4",
"1d": "TIMEFRAME_D1",
}
# MT5Bridge format -> CCXT format (reverse mapping)
MT5_TO_CXT = {v: k for k, v in CCXT_TO_MT5.items()}
# Timeframe duration in seconds (used for time-based queries)
CCXT_TIMEFRAME_SECONDS = {
"1m": 60,
"5m": 300,
"15m": 900,
"30m": 1800,
"1h": 3600,
"4h": 14400,
"1d": 86400,
}
def to_mt5(timeframe):
"""Convert CCXT timeframe string to MT5Bridge format.
Args:
timeframe: CCXT timeframe (e.g. "1h", "1d")
Returns:
str: MT5Bridge timeframe (e.g. "TIMEFRAME_H1")
Raises:
ValueError: if timeframe is not supported
"""
if timeframe not in CCXT_TO_MT5:
raise ValueError(
f"Unsupported timeframe '{timeframe}'. "
f"Supported: {sorted(CCXT_TO_MT5.keys())}"
)
return CCXT_TO_MT5[timeframe]
def to_ccxt(timeframe):
"""Convert MT5Bridge timeframe string to CCXT format.
Args:
timeframe: MT5Bridge timeframe (e.g. "TIMEFRAME_H1")
Returns:
str: CCXT timeframe (e.g. "1h")
Raises:
ValueError: if timeframe is unknown
"""
if timeframe not in MT5_TO_CXT:
raise ValueError(
f"Unknown MT5Bridge timeframe '{timeframe}'. "
f"Supported: {sorted(MT5_TO_CXT.values())}"
)
return MT5_TO_CXT[timeframe]