Files
DinQuant/backend_api_python/app/services/live_trading/symbols.py
T
TIANHE f43312a858 creat
Signed-off-by: TIANHE <TIANHE@GMAIL.COM>
2025-12-29 03:06:49 +08:00

56 lines
1.4 KiB
Python

"""
Symbol normalization helpers.
Input symbols may come from UI/strategy config in ccxt-like shape:
- "SOL/USDT:USDT"
- "SOL/USDT"
We convert them into exchange-specific identifiers.
"""
from __future__ import annotations
from typing import Tuple
def _split_base_quote(symbol: str) -> Tuple[str, str]:
s = (symbol or "").strip()
if ":" in s:
s = s.split(":", 1)[0]
if "/" not in s:
# Already exchange-specific (best-effort)
return s, ""
base, quote = s.split("/", 1)
return base.strip().upper(), quote.strip().upper()
def to_binance_futures_symbol(symbol: str) -> str:
base, quote = _split_base_quote(symbol)
if not quote:
return (symbol or "").replace("/", "").replace(":", "").upper()
return f"{base}{quote}"
def to_okx_swap_inst_id(symbol: str) -> str:
base, quote = _split_base_quote(symbol)
if not base or not quote:
return symbol
# OKX perpetual swap instrument id: BASE-QUOTE-SWAP
return f"{base}-{quote}-SWAP"
def to_okx_spot_inst_id(symbol: str) -> str:
base, quote = _split_base_quote(symbol)
if not base or not quote:
return symbol
return f"{base}-{quote}"
def to_bitget_um_symbol(symbol: str) -> str:
base, quote = _split_base_quote(symbol)
if not quote:
return (symbol or "").replace("/", "").replace(":", "").upper()
return f"{base}{quote}"