"""
币种配置 - 12个交易标的的完整参数
"""

from dataclasses import dataclass, field
from typing import Dict, List


@dataclass
class CoinConfig:
    symbol: str
    leverage: int
    trailing_pct: float        # trailing止损回撤百分比
    allow_short: bool
    vol_filter_4h: float       # 4H信号量比过滤阈值（超过则不做）
    vol_filter_reduce: float   # 量比减仓阈值（BTC专用，超过则减仓50%）
    data_start: str            # 数据起始日期
    liquidity_cap: float       # 名义持仓上限（美元）


# 所有交易币种配置
COINS: Dict[str, CoinConfig] = {
    "BTCUSDT": CoinConfig(
        symbol="BTCUSDT", leverage=10, trailing_pct=0.15,
        allow_short=True, vol_filter_4h=999,  # BTC的4H不按量比过滤，而是减仓
        vol_filter_reduce=3.0, data_start="2017-08-01",
        liquidity_cap=50_000_000
    ),
    "ETHUSDT": CoinConfig(
        symbol="ETHUSDT", leverage=5, trailing_pct=0.20,
        allow_short=True, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2017-08-01",
        liquidity_cap=20_000_000
    ),
    "SOLUSDT": CoinConfig(
        symbol="SOLUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-08-01",
        liquidity_cap=5_000_000
    ),
    "DOGEUSDT": CoinConfig(
        symbol="DOGEUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "BNBUSDT": CoinConfig(
        symbol="BNBUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "AVAXUSDT": CoinConfig(
        symbol="AVAXUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-09-01",
        liquidity_cap=5_000_000
    ),
    "LINKUSDT": CoinConfig(
        symbol="LINKUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "ADAUSDT": CoinConfig(
        symbol="ADAUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "XRPUSDT": CoinConfig(
        symbol="XRPUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "DOTUSDT": CoinConfig(
        symbol="DOTUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-08-01",
        liquidity_cap=5_000_000
    ),
    "MATICUSDT": CoinConfig(
        symbol="MATICUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
    "ATOMUSDT": CoinConfig(
        symbol="ATOMUSDT", leverage=5, trailing_pct=0.25,
        allow_short=False, vol_filter_4h=2.0,
        vol_filter_reduce=999, data_start="2020-01-01",
        liquidity_cap=5_000_000
    ),
}

# 按symbol快速查找
def get_coin(symbol: str) -> CoinConfig:
    return COINS[symbol]

def all_symbols() -> List[str]:
    return list(COINS.keys())
