""" 山寨币板块映射表 + 动态龙头识别 板块分类硬编码,龙头动态计算(板块内涨幅最大的就是龙头) """ # 板块定义:币种 → 板块名 # 只包含Binance上线的主流山寨币 SECTOR_MEMBERS = { "AI_DePIN": [ "FET/USDT", "RENDER/USDT", "TAO/USDT", "AKT/USDT", "AETH/USDT", "WLD/USDT", "RNDR/USDT", "OCEAN/USDT", "INJ/USDT", "ATH/USDT", "AI/USDT", "VANA/USDT", ], "Layer2": [ "ARB/USDT", "OP/USDT", "MATIC/USDT", "IMX/USDT", "STRK/USDT", "METIS/USDT", "SKL/USDT", "CELO/USDT", "LRC/USDT", "POL/USDT", ], "DeFi": [ "AAVE/USDT", "UNI/USDT", "COMP/USDT", "CRV/USDT", "MKR/USDT", "SNX/USDT", "SUSHI/USDT", "1INCH/USDT", "YFI/USDT", "LDO/USDT", "RPL/USDT", "PENDLE/USDT", "ENA/USDT", "EIGEN/USDT", "API3/USDT", "BIO/USDT", "ENSO/USDT", "LINK/USDT", "SPK/USDT", "TRB/USDT", "WLFI/USDT", ], "MEME": [ "PEPE/USDT", "WIF/USDT", "BONK/USDT", "FLOKI/USDT", "DOGE/USDT", "SHIB/USDT", "MEME/USDT", "TRUMP/USDT", "BOME/USDT", "BANANAS31/USDT", "KAT/USDT", "NEIRO/USDT", ], "Solana_eco": [ "SOL/USDT", "JUP/USDT", "JTO/USDT", "PYTH/USDT", "BONK/USDT", "WIF/USDT", "HNT/USDT", "RAY/USDT", ], "BTC_eco": [ "STX/USDT", "ORDI/USDT", "SATS/USDT", "RIF/USDT", ], "Gaming_Metaverse": [ "AXS/USDT", "MANA/USDT", "SAND/USDT", "ENJ/USDT", "GALA/USDT", "ALICE/USDT", "ILV/USDT", "MAGIC/USDT", "YGG/USDT", "APE/USDT", "CHZ/USDT", ], "Storage_Computing": [ "FIL/USDT", "AR/USDT", "CHIA/USDT", "RNDR/USDT", "AKT/USDT", "ETHFI/USDT", ], "RWA": [ "POLYX/USDT", "TRU/USDT", "CFG/USDT", "MPL/USDT", "PLUME/USDT", ], "Layer1_alt": [ "ADA/USDT", "ATOM/USDT", "DOT/USDT", "AVAX/USDT", "NEAR/USDT", "ALGO/USDT", "FTM/USDT", "SEI/USDT", "SUI/USDT", "APT/USDT", "TON/USDT", "KAS/USDT", "TIA/USDT", "AXL/USDT", "DASH/USDT", "HBAR/USDT", "LTC/USDT", "MOVR/USDT", "TRX/USDT", "XRP/USDT", "ZEN/USDT", ], } # MEME板块的特殊阈值(波动大,阈值不同) MEME_SECTORS = {"MEME", "Solana_eco"} # Solana生态也包含很多MEME # 构建反向映射:币种 → 所属板块列表(一个币可能属于多个板块) COIN_TO_SECTORS = {} for sector, coins in SECTOR_MEMBERS.items(): for coin in coins: if coin not in COIN_TO_SECTORS: COIN_TO_SECTORS[coin] = [] COIN_TO_SECTORS[coin].append(sector) # 排除列表(不监控的币种) EXCLUDE_SYMBOLS = set() # 稳定币、Wrapped代币在粗筛中过滤 # 市值Top200门槛:24h成交量最低要求 MIN_24H_VOLUME_USD = 5_000_000 # $5M # MEME板块最低成交量更低(MEME流动性更差) MEME_MIN_24H_VOLUME_USD = 2_000_000 # $2M def get_sector_for_coin(symbol): """获取币种所属的所有板块""" return COIN_TO_SECTORS.get(symbol, []) def is_meme_coin(symbol): """判断是否是MEME类币种(阈值不同)""" sectors = set(get_sector_for_coin(symbol)) return bool(sectors & MEME_SECTORS) def get_burst_threshold(symbol): """获取爆发涨幅阈值(MEME更高)""" if is_meme_coin(symbol): return 10.0 # MEME: 10%才算爆发 return 5.0 # 主流: 5%算爆发 def get_stop_loss_pct(symbol): """获取止损百分比(MEME更大)""" if is_meme_coin(symbol): return 5.0 # MEME: -5%止损 return 3.0 # 主流: -3%止损 def dynamic_leader_detection(sector_perf): """ 动态龙头识别 sector_perf: {sector: {symbol: pct_change_4h}} 返回: {sector: {"leader": symbol, "leader_pct": float, "is_leader_hot": bool}} """ results = {} for sector, coin_perf in sector_perf.items(): if not coin_perf: results[sector] = {"leader": None, "leader_pct": 0, "is_leader_hot": False} continue # 找涨幅最大的作为龙头 sorted_perf = sorted(coin_perf.items(), key=lambda x: x[1], reverse=True) leader = sorted_perf[0][0] leader_pct = sorted_perf[0][1] # MEME板块龙头启动阈值更高 threshold = 8.0 if sector in MEME_SECTORS else 5.0 results[sector] = { "leader": leader, "leader_pct": leader_pct, "is_leader_hot": leader_pct >= threshold, } return results if __name__ == "__main__": # 测试 print("币种 → 板块映射示例:") for coin in ["FET/USDT", "JUP/USDT", "PEPE/USDT", "ARB/USDT"]: print(f" {coin} → {get_sector_for_coin(coin)}") print(f" 爆发阈值: {get_burst_threshold(coin)}%, 止损: {get_stop_loss_pct(coin)}%") # 测试动态龙头 test_perf = { "AI_DePIN": {"FET/USDT": 7.2, "RENDER/USDT": 3.1, "TAO/USDT": 1.5}, "MEME": {"PEPE/USDT": 12.0, "WIF/USDT": 4.5, "DOGE/USDT": 2.1}, } leaders = dynamic_leader_detection(test_perf) print("\n动态龙头检测结果:") for sector, info in leaders.items(): print(f" {sector}: 龙头={info['leader']}, 涨幅={info['leader_pct']}%, 热度={info['is_leader_hot']}")