151 lines
5.1 KiB
Python
151 lines
5.1 KiB
Python
"""
|
||
山寨币板块映射表 + 动态龙头识别
|
||
|
||
板块分类硬编码,龙头动态计算(板块内涨幅最大的就是龙头)
|
||
"""
|
||
|
||
# 板块定义:币种 → 板块名
|
||
# 只包含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']}") |