"""
风控参数 & 策略常量
"""

# ==================== ZigZag 阈值 ====================
ZIGZAG_THRESHOLD_DAILY = 0.15    # 日线：15%
ZIGZAG_THRESHOLD_4H = 0.08      # 4H：8%

# ==================== 下跌段最小跌幅 ====================
DROP_LEG_MIN_DAILY = 0.12        # 日线：12%
DROP_LEG_MIN_4H = 0.07           # 4H：7%

# ==================== 盒子参数 ====================
BOX_MIN_BARS_DAILY = 5           # 日线盒子最少5根K线
BOX_MIN_BARS_4H = 12             # 4H盒子最少12根K线
BOX_MAX_WIDTH_DAILY = 0.15       # 日线盒子最大振幅15%
BOX_MAX_WIDTH_4H = 0.10          # 4H盒子最大振幅10%
BOX_NEW_LOW_TOLERANCE = 0.01     # 盒子扫描容忍1%新低
BOX_MAX_SCAN_BARS = 120          # 盒子最大扫描120根K线

# ==================== 突破参数 ====================
BREAKOUT_VOL_RATIO = 1.5         # 突破量 > 20日均量 × 1.5
BREAKOUT_CONFIRM_DAILY = 3       # 日线突破后3根不跌回
BREAKOUT_CONFIRM_4H = 6          # 4H突破后6根不跌回
BREAKOUT_MAX_WAIT = 60           # 突破后最多等60根K线

# ==================== 多周期共振 ====================
RESONANCE_WINDOW_DAYS = 7        # 4H突破前后7天内有日线突破 = 共振

# ==================== 1H 精准入场 ====================
ENTRY_1H_TOLERANCE = 0.01       # 回踩盒顶 ±1%
ENTRY_1H_MAX_WAIT_BARS = 48     # 48根1H K线（48小时）

# ==================== 止损 ====================
SL_LONG_OFFSET = 0.003          # 做多止损：盒顶下方0.3%
SL_SHORT_OFFSET = 0.005         # 做空止损：入场K线高点上方0.5%
SL_MAX_DISTANCE = 0.07          # 止损距离 > 7% 的信号不做

# ==================== 仓位 ====================
# 单笔风险比例（按账户规模递减）
RISK_PER_TRADE = [
    (10_000,    0.02),    # < $10K: 2%
    (100_000,   0.015),   # $10K-$100K: 1.5%
    (500_000,   0.01),    # $100K-$500K: 1%
    (float('inf'), 0.008) # > $500K: 0.8%
]

# 信号类型仓位上限
POSITION_LIMIT = {
    "共振": 1.00,      # 100%
    "日线": 0.50,      # 50%
    "4H":  0.30,       # 30% (原始，过滤后可能降为25%)
    "做空": 0.15,      # 15%
}

# 单币仓位上限
SINGLE_COIN_LIMIT = 0.25     # 25%保证金
# 总仓位上限
TOTAL_POSITION_LIMIT = 0.80  # 80%保证金

# ==================== 仓位调整 ====================
# 4H信号 + 60日趋势 < -30% → 仓位×0.4
ADJ_TREND_VERY_WEAK = (-0.30, 0.4)
# 4H信号 + 60日趋势 < 0 → 仓位×0.8
ADJ_TREND_WEAK = (0.0, 0.8)
# 入场量比 > 3x → 仓位×0.5
ADJ_VOL_SPIKE = (3.0, 0.5)
# 4H + SL距离1-4% + 趋势<0 → 仓位×0.5
ADJ_4H_SL_WIDE = (0.01, 0.04, 0.5)
# 跨币共振（BTC日线突破14天内）→ 仓位×1.3（上限40%）
ADJ_CROSS_RESONANCE = (14, 1.3, 0.40)

# ==================== 出场 ====================
# trailing激活条件：浮盈 > 5%
TRAILING_ACTIVATE_PCT = 0.05
# 最长持仓
MAX_HOLD_LONG_4H_BARS = 500    # 做多：500根4H ≈ 83天
MAX_HOLD_SHORT_4H_BARS = 200   # 做空：200根4H ≈ 33天

# ==================== 有效权益 ====================
EFFECTIVE_EQUITY_MULTIPLIER = 3  # 有效权益 = min(余额, 月初×3)

# ==================== 手续费 ====================
FEE_MAKER = 0.0005    # 限价单：0.05%双向 → 单边0.025% × 2
FEE_TAKER = 0.0009    # 市价单：0.09%双向
FEE_EXIT = 0.0009     # 出场：0.09%单边（市价）
SLIPPAGE_EXTREME = 0.02  # 极端行情额外滑点2%（单根跌幅>10%触发）

# ==================== 6层过滤 ====================
# 第1层：趋势死区
DEAD_ZONE_LOW = -0.30
DEAD_ZONE_HIGH = -0.15

# 第2层：BTC联动
BTC_TREND_THRESHOLD = 0.0  # BTC 60日趋势 <= 0 → 山寨4H不做

# 第4层：同天去重 — 同一天只做第一个4H信号

# 第5层：连败暂停
CONSECUTIVE_LOSS_PAUSE = 5   # 连续亏损5笔暂停4H信号

# 第6层：同币去重
SAME_COIN_COOLDOWN_DAYS = 3  # 同币3天内不重复开仓

# ==================== 做空过滤 ====================
SHORT_BTC_TREND_MAX = 0.30   # BTC 60日趋势 > 30% → 不做空
SHORT_COIN_TREND_MAX = 0.15  # 本币60日趋势 > 15% → 不做空
SHORT_SAME_COIN_COOLDOWN = 7 # 同币种做空间隔7天

# ==================== 风控熔断 ====================
DAILY_LOSS_HALT = 0.05       # 单日亏损 > 5% 暂停
TOTAL_DD_HALT = 0.25         # 总回撤 > 25% 全部平仓


def get_risk_per_trade(equity: float) -> float:
    """根据账户规模返回单笔风险比例"""
    for threshold, risk in RISK_PER_TRADE:
        if equity < threshold:
            return risk
    return RISK_PER_TRADE[-1][1]
