feat: massively expand crypto sentiment vocabulary

- CRYPTO_BULLISH_KEYWORDS: ~200+ terms covering price action, institutional/ETF, exchange listings, partnerships, technical indicators, on-chain, DeFi yield, macro narratives, sentiment/social
- CRYPTO_BEARISH_KEYWORDS: ~350+ terms covering crashes/dumps, liquidations, hacks/exploits, depeg, outflows/selling, regulatory/legal, bankruptcy, technical indicators, on-chain, DeFi issues, macro risk-off, sentiment/social
- WHALE_BULLISH_PHRASES: ~50+ context-aware phrases for whale accumulation/buying
- WHALE_BEARISH_PHRASES: ~70+ context-aware phrases for whale distribution/selling

Both keyword lists duplicated in CryptoSentimentCalibrator class for backward compatibility.

Result: 15/15 critical sentiment tests still pass with vastly expanded coverage.
This commit is contained in:
Codex
2026-09-15 19:48:58 +02:00
parent aed9d52ef6
commit 5dc5db9a95

View File

@@ -269,40 +269,216 @@ class CryptoSentimentCalibrator:
""" """
# Crypto-bullish keywords (should map to index 2 = Bullish) # Crypto-bullish keywords (should map to index 2 = Bullish)
# Removed: upgrade, upgrades, upgraded, mainnet (protocol events, not price signals) # Comprehensive vocabulary covering price action, institutional, technical, on-chain, and news catalysts
# Removed: whale, whales (whale movement can be either bullish or bearish)
CRYPTO_BULLISH_KEYWORDS = [ CRYPTO_BULLISH_KEYWORDS = [
"surge", "pump", "moon", "rally", "breakout", "bullish", "ath", "all.time.high", # Price action
"inflow", "inflows", "adoption", "accumulation", "bull", "green", "surge", "surges", "surged", "surgeing", "pump", "pumps", "pumped", "pumping",
"profit", "gain", "win", "success", "breakthrough", "approval", "etf", "moon", "mooning", "mooned", "to.the.moon", "rally", "rallies", "rallied", "rallying",
"all.time.high", "record.high", "new.high", "breakout", "breakouts", "break.out", "breaking.out", "bullish", "bull.run", "bullrun",
"approves", "approved", "approval", "approved", "ath", "all.time.high", "all.time.highs", "record.high", "record.highs", "new.high", "new.highs",
"listing", "listed", "lists", "list", "listings", "launch", "launches", "higher.high", "higher.highs", "higher.low", "higher.lows", "uptrend", "uptrending",
"partnership", "partner", "collaboration", "green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow",
"adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong",
"buy.the.dip", "buying.the.dip", "dip.bought", "dca", "dollar.cost.average",
# Institutional & ETF
"etf", "etfs", "spot.etf", "spot.etfs", "bitcoin.etf", "ethereum.etf", "etf.approval",
"etf.approved", "etf.approves", "etf.launch", "etf.launches", "etf.listed", "etf.inflow",
"etf.inflows", "blackrock", "fidelity", "vanguard", "grayscale", "ark.invest", "institutional",
"institutions", "institutional.adoption", "corporate.treasury", "corporate.adoption",
"microstrategy", "tesla", "public.company", "balance.sheet", "treasury.reserve",
"approval", "approvals", "approved", "approves", "sec.approval", "regulatory.approval",
"regulatory.clarity", "clear.regulation", "friendly.regulation", "pro.crypto",
# Exchange & listing
"listing", "listings", "listed", "lists", "list", "new.listing", "major.listing",
"tier1.listing", "tier1.exchange", "binance.listing", "coinbase.listing", "kraken.listing",
"bybit.listing", "okx.listing", "upbit.listing", "launch", "launches", "launched",
"mainnet.launch", "testnet.launch", "token.launch", "fair.launch", "ido", "ico", "ieo",
# Partnerships & development
"partnership", "partnerships", "partner", "partners", "collaboration", "collaborations",
"integration", "integrations", "integrated", "integrates", "ecosystem", "ecosystem.growth",
"developer.activity", "dev.activity", "github.activity", "commits", "contributors",
"grant", "grants", "funding", "funded", "investment", "investments", "vc.funding",
"strategic.investment", "ecosystem.fund", "developer.fund", "bug.bounty",
# Profit & gains
"profit", "profits", "profitable", "gain", "gains", "gaining", "win", "wins", "winning",
"success", "successful", "breakthrough", "milestone", "milestones", "target.hit",
"price.target", "target.achieved", "allocation", "portfolio.allocation", "diversification",
# Technical indicators (bullish)
"golden.cross", "golden.cross", "macd.crossover", "macd.bullish", "rsi.oversold",
"rsi.recovery", "moving.average", "ma.support", "support.held", "support.holds",
"bounce", "bounces", "bounced", "bouncing", "reversal", "reverses", "reversed",
"bottom", "bottomed", "local.bottom", "macro.bottom", "capitulation.over",
"oversold", "oversold.rsi", "bullish.divergence", "hidden.bullish.divergence",
# On-chain bullish
"whale.accumulation", "whale.buying", "large.holder.accumulation", "exchange.outflow",
"exchange.outflows", "balance.decreasing", "off.exchange", "cold.storage",
"staking", "staked", "staking.rewards", "validator", "validators", "delegation",
"hashrate.up", "hashrate.rising", "difficulty.up", "network.growth", "addresses.growing",
"active.addresses", "new.addresses", "transaction.count", "tx.count.rising",
# DeFi & yield
"yield", "yield.farming", "liquidity.mining", "apy", "apr", "high.yield",
"tvl.growth", "tvl.rising", "total.value.locked", "tvl.all.time.high",
"protocol.revenue", "fees.growing", "revenue.growth", "buyback", "buybacks",
"token.burn", "burns", "burning", "deflationary", "supply.decreasing",
# Macro & narrative
"halving", "bitcoin.halving", "supply.shock", "supply.squeeze", "scarcity",
"inflation.hedge", "store.of.value", "digital.gold", "monetary.policy",
"rate.cut", "rate.cuts", "pivot", "fed.pivot", "liquidity", "m2.growth",
"global.liquidity", "dollar.weakness", "dxy.down", "risk.on", "risk.on.environment",
# Sentiment & social
"fomo", "fear.of.missing.out", "euphoria", "optimism", "optimistic", "bullish.sentiment",
"greed", "extreme.greed", "fear.and.greed", "greed.index", "social.dominance",
"mentions.rising", "trending", "trending.on.twitter", "trending.on.reddit",
"google.trends", "search.interest", "retail.fomo", "new.entrants", "onboarding",
] ]
# Crypto-bearish keywords (should map to index 0 = Bearish) # Crypto-bearish keywords (should map to index 0 = Bearish)
# Added: crashes, crashing, wipes, wiped, wipes out, liquidations # Comprehensive vocabulary covering price action, institutional, technical, on-chain, regulatory, and news catalysts
CRYPTO_BEARISH_KEYWORDS = [ CRYPTO_BEARISH_KEYWORDS = [
"crash", "crashes", "crashing", "dump", "panic", "fear", "bearish", "hack", "exploit", "rug", "rugpull", # Price action - crashes & dumps
"liquidation", "liquidations", "bankruptcy", "depeg", "depegs", "depegged", "depegging", "crash", "crashes", "crashing", "crashed", "crash.down", "flash.crash", "market.crash",
"outflow", "outflows", "sell", "sells", "selling", "sold", "dump", "dumps", "dumped", "dumping", "violent.dump", "capitulation", "capitulating",
"loss", "lost", "down", "collapse", "ban", "lawsuit", "lawsuits", "enforcement", "delist", "panic", "panic.sell", "panic.selling", "panic.sold", "fear", "fearful", "bearish",
"stolen", "theft", "vulnerability", "drain", "drained", "bear.market", "bearish.trend", "downtrend", "downtrending", "lower.high", "lower.highs",
"hack", "hacked", "exploit", "exploited", "breach", "stolen", "theft", "lower.low", "lower.lows", "red", "red.candle", "red.candles", "bleeding", "bleeds",
"unauthorized", "compromise", "drain", "drained", "vulnerability", "free.fall", "freefall", "nose.dive", "nosedive", "plunge", "plunges", "plunged",
"lawsuit", "lawsuits", "enforcement", "ban", "delist", "crackdown", "collapse", "collapses", "collapsed", "collapsing", "implosion", "implodes",
"depeg", "depegs", "depegged", "depegging", "wipe", "wipes", "wiped", "wipes.out", "wiped.out", "wiping.out",
"crashes", "crashing", "wipes", "wiped", "wipes out", "liquidations",
"sues", "sue", "lawsuit", "enforcement", "ban", "crackdown", "delist", "ban", # Liquidations & leverage
"liquidation", "liquidations", "liquidated", "liquidating", "mass.liquidation",
"cascade.liquidation", "liquidation.cascade", "long.liquidation", "long.liquidations",
"short.liquidation", "short.liquidations", "forced.liquidation", "margin.call",
"margin.calls", "leverage.flush", "leverage.flush.out", "overleveraged", "over.leverage",
"liquidation.price", "liq.price", "rekt", "getting.rekt", "blown.up", "account.blown",
# Hacks, exploits, security
"hack", "hacks", "hacked", "hacking", "exploit", "exploits", "exploited", "exploiting",
"rug", "rugpull", "rug.pull", "rugged", "rug.pulled", "exit.scam", "exit.scams",
"stolen", "theft", "thefts", "stolen.funds", "drain", "drains", "drained", "draining",
"vulnerability", "vulnerabilities", "vuln", "bug", "bugs", "breach", "breaches",
"compromise", "compromised", "unauthorized", "unauthorized.access", "private.key.leak",
"seed.phrase", "phishing", "phished", "social.engineering", "insider.attack",
"smart.contract.bug", "reentrancy", "oracle.manipulation", "price.manipulation",
"governance.attack", "flash.loan.attack", "mev.attack", "sandwich.attack",
# Depeg & stablecoin
"depeg", "depegs", "depegged", "depegging", "depeg.risk", "depeg.fear",
"stablecoin.depeg", "usdc.depeg", "usdt.depeg", "dai.depeg", "frax.depeg",
"peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight",
"sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling",
"distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
"profit.taking", "take.profit", "taking.profit", "realized.gains", "realize.gains",
"paper.hands", "weak.hands", "capitulation.selling", "tax.loss.harvesting",
# Losses & downside
"loss", "losses", "lost", "losing", "unrealized.loss", "drawdown", "max.drawdown",
"down", "downward", "declining", "decline", "declines", "dropping", "drops", "dropped",
"correction", "corrections", "pullback", "pullbacks", "retrace", "retraces", "retraced",
"bear.trap", "fake.out", "fakeout", "bull.trap", "failed.breakout", "failed.rally",
# Regulatory & legal
"ban", "bans", "banned", "banning", "prohibition", "prohibited", "illegal",
"lawsuit", "lawsuits", "sued", "sues", "sue", "litigation", "legal.action",
"enforcement", "enforcement.action", "sec.enforcement", "cftc.enforcement",
"crackdown", "crackdowns", "cracking.down", "regulatory.crackdown",
"delist", "delists", "delisted", "delisting", "exchange.delisting", "delisting.announcement",
"wells.notice", "wells.notices", "subpoena", "subpoenas", "investigation", "investigations",
"sec.investigation", "doj.investigation", "fraud.charges", "securities.fraud",
"unregistered.securities", "securities.violation", "compliance", "non.compliant",
"license.revoked", "license.denied", "cease.and.desist", "cease.desist",
# Bankruptcy & insolvency
"bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7",
"liquidation", "wind.down", "winding.down", "cease.operations", "shut.down",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
"terra", "luna", "ust", "algorithmic.stablecoin", "ponzi", "pyramid.scheme",
# Technical indicators (bearish)
"death.cross", "death.cross", "macd.bearish", "macd.crossunder", "rsi.overbought",
"rsi.rejection", "moving.average.resistance", "resistance.held", "resistance.holds",
"rejection", "rejects", "rejected", "rejecting", "failed.breakout", "fake.breakout",
"top", "topped", "local.top", "macro.top", "distribution.phase", "wyckoff.distribution",
"overbought", "overbought.rsi", "bearish.divergence", "hidden.bearish.divergence",
"head.and.shoulders", "double.top", "triple.top", "rising.wedge", "bearish.pattern",
# On-chain bearish
"whale.selling", "whale.sells", "whale.dump", "whale.dumps", "large.holder.selling",
"exchange.inflow", "exchange.inflows", "balance.increasing", "on.exchange",
"hot.wallet", "exchange.deposit", "deposit.spike", "whale.deposit", "large.deposit",
"unstaking", "unstaked", "unstake", "unstakes", "withdrawal", "withdrawals",
"mass.withdrawal", "bank.run", "run.on.exchange", "solvency.concerns", "proof.of.reserves",
"hashrate.down", "hashrate.dropping", "difficulty.down", "miners.capitulation",
"miner.surrender", "miner.outflow", "miner.selling", "hash.ribbons",
# DeFi & protocol issues
"tvl.drop", "tvl.dropping", "tvl.crash", "total.value.locked.drop", "tvl.outflow",
"protocol.exploit", "protocol.hack", "smart.contract.exploit", "oracle.failure",
"liquidation.crisis", "bad.debt", "insolvent.protocol", "undercollateralized.vault",
"liquidation.bot", "mev.bot", "sandwich.attack", "front.run", "front.running",
"inflationary", "supply.increasing", "token.inflation", "emission", "emissions.high",
"unlock", "unlocks", "token.unlock", "vesting.unlock", "team.unlock", "investor.unlock",
"cliff.unlock", "linear.unlock", "supply.shock", "dilution", "dilutive",
# Macro & risk-off
"rate.hike", "rate.hikes", "fed.hawkish", "hawkish.fed", "tightening", "qt",
"quantitative.tightening", "liquidity.drain", "liquidity.crunch", "credit.crunch",
"recession", "recession.fears", "recession.risk", "economic.slowdown", "gdp.slowing",
"inflation.high", "cpi.high", "ppi.high", "sticky.inflation", "core.inflation",
"dollar.strength", "dxy.up", "dxy.rising", "risk.off", "risk.off.environment",
"flight.to.safety", "safe.haven", "treasury.yields", "yields.rising", "bond.yields",
"correlation", "correlated.selloff", "broad.selloff", "market.wide.selloff",
"contagion", "contagion.risk", "systemic.risk", "domino.effect", "spillover",
# Sentiment & social
"fud", "fear.uncertainty.doubt", "fear", "extreme.fear", "fear.and.greed",
"fear.index", "capitulation", "despair", "depression", "anger", "rage",
"selling.panic", "blind.panic", "herd.mentality", "herd.selling", "lemmings",
"social.dominance.drop", "mentions.falling", "interest.fading", "google.trends.down",
"search.interest.declining", "retail.exodus", "users.leaving", "offboarding",
"narrative.broken", "narrative.shift", "thesis.broken", "thesis.invalidated",
"disappointment", "missed.expectations", "guidance.lowered", "warn", "warning",
] ]
# Whale action phrases - context-dependent sentiment # Whale action phrases - context-dependent sentiment (bullish)
WHALE_BULLISH_PHRASES = [ WHALE_BULLISH_PHRASES = [
"whale buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating", "whale buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating",
"whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation", "whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation",
"whale entry", "whale enters", "whale positions", "whale positions", "whale positioned", "whale entry", "whale enters", "whale positions", "whale positions", "whale positioned",
"whale accumulation", "whale buying", "whale buys more", "whale adds more", "whale accumulation", "whale buying", "whale buys more", "whale adds more",
"whale buy", "whale buy", "whale bought", "whale has bought", "whale purchased",
"whale purchases", "whale acquiring", "whale acquires", "whale acquired",
"whale stacking", "whale stacks", "whale stacked", "whale building", "whale builds",
"whale building.position", "whale building.position", "whale increasing.position",
"whale adds.to.position", "whale adding.to.position", "whale scaled.in", "whale scaling.in",
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.accumulates",
"large.holder.accumulating", "large.holder.buys", "large.holder.accumulates",
"whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls",
"massive.buy", "massive.buys", "huge.buy", "huge.buys", "large.buy", "large.buys",
] ]
WHALE_BEARISH_PHRASES = [ WHALE_BEARISH_PHRASES = [
@@ -312,6 +488,23 @@ class CryptoSentimentCalibrator:
"whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit", "whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit",
"whale exits", "whale exits", "whale distributes", "whale distributing", "whale exits", "whale exits", "whale distributes", "whale distributing",
"whale sells", "whale sells", "whale sells", "whale unloads", "whale unloads", "whale sells", "whale sells", "whale sells", "whale unloads", "whale unloads",
"whale sell", "whale sell", "whale sold", "whale has sold", "whale selling",
"whale offloading", "whale offloads", "whale offloaded", "whale unloading",
"whale distributes", "whale distributing", "whale distribution", "whale.distributing",
"whale taking.profit", "whale.take.profit", "whale.profit.taking", "whale.realized",
"whale.realizing", "whale.realizes", "whale.realize", "profit.realized",
"whale.exits", "whale.exiting", "whale.exited", "whale.exit", "whale.exits.market",
"whale.reducing", "whale.reduces", "whale.reduced", "whale.trimmed", "whale.trims",
"whale.trimming", "whale.scaling.out", "whale.scales.out", "whale.scaled.out",
"smart.money.selling", "smart.money.sells", "smart.money.distributes",
"institutional.selling", "institutional.distributes", "institutional.exits",
"large.holder.selling", "large.holder.distributes", "large.holder.exits",
"whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall",
"whale.ask", "whale.asks", "large.ask", "large.asks", "heavy.asks", "ask.side.heavy",
"whale.market.sell", "whale.market.sells", "market.sell", "market.sells",
"aggressive.selling", "aggressive.seller", "aggressive.sells", "market.order.sell",
] ]
@classmethod @classmethod
@@ -691,40 +884,216 @@ class CryptoSentimentCalibrator:
""" """
# Crypto-bullish keywords (should map to index 2 = Bullish) # Crypto-bullish keywords (should map to index 2 = Bullish)
# Removed: upgrade, upgrades, upgraded, mainnet (protocol events, not price signals) # Comprehensive vocabulary covering price action, institutional, technical, on-chain, and news catalysts
# Removed: whale, whales (whale movement can be either bullish or bearish)
CRYPTO_BULLISH_KEYWORDS = [ CRYPTO_BULLISH_KEYWORDS = [
"surge", "pump", "moon", "rally", "breakout", "bullish", "ath", "all.time.high", # Price action
"inflow", "inflows", "adoption", "accumulation", "bull", "green", "surge", "surges", "surged", "surgeing", "pump", "pumps", "pumped", "pumping",
"profit", "gain", "win", "success", "breakthrough", "approval", "etf", "moon", "mooning", "mooned", "to.the.moon", "rally", "rallies", "rallied", "rallying",
"all.time.high", "record.high", "new.high", "breakout", "breakouts", "break.out", "breaking.out", "bullish", "bull.run", "bullrun",
"approves", "approved", "approval", "approved", "ath", "all.time.high", "all.time.highs", "record.high", "record.highs", "new.high", "new.highs",
"listing", "listed", "lists", "list", "listings", "launch", "launches", "higher.high", "higher.highs", "higher.low", "higher.lows", "uptrend", "uptrending",
"partnership", "partner", "collaboration", "green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow",
"adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong",
"buy.the.dip", "buying.the.dip", "dip.bought", "dca", "dollar.cost.average",
# Institutional & ETF
"etf", "etfs", "spot.etf", "spot.etfs", "bitcoin.etf", "ethereum.etf", "etf.approval",
"etf.approved", "etf.approves", "etf.launch", "etf.launches", "etf.listed", "etf.inflow",
"etf.inflows", "blackrock", "fidelity", "vanguard", "grayscale", "ark.invest", "institutional",
"institutions", "institutional.adoption", "corporate.treasury", "corporate.adoption",
"microstrategy", "tesla", "public.company", "balance.sheet", "treasury.reserve",
"approval", "approvals", "approved", "approves", "sec.approval", "regulatory.approval",
"regulatory.clarity", "clear.regulation", "friendly.regulation", "pro.crypto",
# Exchange & listing
"listing", "listings", "listed", "lists", "list", "new.listing", "major.listing",
"tier1.listing", "tier1.exchange", "binance.listing", "coinbase.listing", "kraken.listing",
"bybit.listing", "okx.listing", "upbit.listing", "launch", "launches", "launched",
"mainnet.launch", "testnet.launch", "token.launch", "fair.launch", "ido", "ico", "ieo",
# Partnerships & development
"partnership", "partnerships", "partner", "partners", "collaboration", "collaborations",
"integration", "integrations", "integrated", "integrates", "ecosystem", "ecosystem.growth",
"developer.activity", "dev.activity", "github.activity", "commits", "contributors",
"grant", "grants", "funding", "funded", "investment", "investments", "vc.funding",
"strategic.investment", "ecosystem.fund", "developer.fund", "bug.bounty",
# Profit & gains
"profit", "profits", "profitable", "gain", "gains", "gaining", "win", "wins", "winning",
"success", "successful", "breakthrough", "milestone", "milestones", "target.hit",
"price.target", "target.achieved", "allocation", "portfolio.allocation", "diversification",
# Technical indicators (bullish)
"golden.cross", "golden.cross", "macd.crossover", "macd.bullish", "rsi.oversold",
"rsi.recovery", "moving.average", "ma.support", "support.held", "support.holds",
"bounce", "bounces", "bounced", "bouncing", "reversal", "reverses", "reversed",
"bottom", "bottomed", "local.bottom", "macro.bottom", "capitulation.over",
"oversold", "oversold.rsi", "bullish.divergence", "hidden.bullish.divergence",
# On-chain bullish
"whale.accumulation", "whale.buying", "large.holder.accumulation", "exchange.outflow",
"exchange.outflows", "balance.decreasing", "off.exchange", "cold.storage",
"staking", "staked", "staking.rewards", "validator", "validators", "delegation",
"hashrate.up", "hashrate.rising", "difficulty.up", "network.growth", "addresses.growing",
"active.addresses", "new.addresses", "transaction.count", "tx.count.rising",
# DeFi & yield
"yield", "yield.farming", "liquidity.mining", "apy", "apr", "high.yield",
"tvl.growth", "tvl.rising", "total.value.locked", "tvl.all.time.high",
"protocol.revenue", "fees.growing", "revenue.growth", "buyback", "buybacks",
"token.burn", "burns", "burning", "deflationary", "supply.decreasing",
# Macro & narrative
"halving", "bitcoin.halving", "supply.shock", "supply.squeeze", "scarcity",
"inflation.hedge", "store.of.value", "digital.gold", "monetary.policy",
"rate.cut", "rate.cuts", "pivot", "fed.pivot", "liquidity", "m2.growth",
"global.liquidity", "dollar.weakness", "dxy.down", "risk.on", "risk.on.environment",
# Sentiment & social
"fomo", "fear.of.missing.out", "euphoria", "optimism", "optimistic", "bullish.sentiment",
"greed", "extreme.greed", "fear.and.greed", "greed.index", "social.dominance",
"mentions.rising", "trending", "trending.on.twitter", "trending.on.reddit",
"google.trends", "search.interest", "retail.fomo", "new.entrants", "onboarding",
] ]
# Crypto-bearish keywords (should map to index 0 = Bearish) # Crypto-bearish keywords (should map to index 0 = Bearish)
# Added: crashes, crashing, wipes, wiped, wipes out, liquidations # Comprehensive vocabulary covering price action, institutional, technical, on-chain, regulatory, and news catalysts
CRYPTO_BEARISH_KEYWORDS = [ CRYPTO_BEARISH_KEYWORDS = [
"crash", "crashes", "crashing", "dump", "panic", "fear", "bearish", "hack", "exploit", "rug", "rugpull", # Price action - crashes & dumps
"liquidation", "liquidations", "bankruptcy", "depeg", "depegs", "depegged", "depegging", "crash", "crashes", "crashing", "crashed", "crash.down", "flash.crash", "market.crash",
"outflow", "outflows", "sell", "sells", "selling", "sold", "dump", "dumps", "dumped", "dumping", "violent.dump", "capitulation", "capitulating",
"loss", "lost", "down", "collapse", "ban", "lawsuit", "lawsuits", "enforcement", "delist", "panic", "panic.sell", "panic.selling", "panic.sold", "fear", "fearful", "bearish",
"stolen", "theft", "vulnerability", "drain", "drained", "bear.market", "bearish.trend", "downtrend", "downtrending", "lower.high", "lower.highs",
"hack", "hacked", "exploit", "exploited", "breach", "stolen", "theft", "lower.low", "lower.lows", "red", "red.candle", "red.candles", "bleeding", "bleeds",
"unauthorized", "compromise", "drain", "drained", "vulnerability", "free.fall", "freefall", "nose.dive", "nosedive", "plunge", "plunges", "plunged",
"lawsuit", "lawsuits", "enforcement", "ban", "delist", "crackdown", "collapse", "collapses", "collapsed", "collapsing", "implosion", "implodes",
"depeg", "depegs", "depegged", "depegging", "wipe", "wipes", "wiped", "wipes.out", "wiped.out", "wiping.out",
"crashes", "crashing", "wipes", "wiped", "wipes out", "liquidations",
"sues", "sue", "lawsuit", "enforcement", "ban", "crackdown", "delist", "ban", # Liquidations & leverage
"liquidation", "liquidations", "liquidated", "liquidating", "mass.liquidation",
"cascade.liquidation", "liquidation.cascade", "long.liquidation", "long.liquidations",
"short.liquidation", "short.liquidations", "forced.liquidation", "margin.call",
"margin.calls", "leverage.flush", "leverage.flush.out", "overleveraged", "over.leverage",
"liquidation.price", "liq.price", "rekt", "getting.rekt", "blown.up", "account.blown",
# Hacks, exploits, security
"hack", "hacks", "hacked", "hacking", "exploit", "exploits", "exploited", "exploiting",
"rug", "rugpull", "rug.pull", "rugged", "rug.pulled", "exit.scam", "exit.scams",
"stolen", "theft", "thefts", "stolen.funds", "drain", "drains", "drained", "draining",
"vulnerability", "vulnerabilities", "vuln", "bug", "bugs", "breach", "breaches",
"compromise", "compromised", "unauthorized", "unauthorized.access", "private.key.leak",
"seed.phrase", "phishing", "phished", "social.engineering", "insider.attack",
"smart.contract.bug", "reentrancy", "oracle.manipulation", "price.manipulation",
"governance.attack", "flash.loan.attack", "mev.attack", "sandwich.attack",
# Depeg & stablecoin
"depeg", "depegs", "depegged", "depegging", "depeg.risk", "depeg.fear",
"stablecoin.depeg", "usdc.depeg", "usdt.depeg", "dai.depeg", "frax.depeg",
"peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight",
"sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling",
"distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
"profit.taking", "take.profit", "taking.profit", "realized.gains", "realize.gains",
"paper.hands", "weak.hands", "capitulation.selling", "tax.loss.harvesting",
# Losses & downside
"loss", "losses", "lost", "losing", "unrealized.loss", "drawdown", "max.drawdown",
"down", "downward", "declining", "decline", "declines", "dropping", "drops", "dropped",
"correction", "corrections", "pullback", "pullbacks", "retrace", "retraces", "retraced",
"bear.trap", "fake.out", "fakeout", "bull.trap", "failed.breakout", "failed.rally",
# Regulatory & legal
"ban", "bans", "banned", "banning", "prohibition", "prohibited", "illegal",
"lawsuit", "lawsuits", "sued", "sues", "sue", "litigation", "legal.action",
"enforcement", "enforcement.action", "sec.enforcement", "cftc.enforcement",
"crackdown", "crackdowns", "cracking.down", "regulatory.crackdown",
"delist", "delists", "delisted", "delisting", "exchange.delisting", "delisting.announcement",
"wells.notice", "wells.notices", "subpoena", "subpoenas", "investigation", "investigations",
"sec.investigation", "doj.investigation", "fraud.charges", "securities.fraud",
"unregistered.securities", "securities.violation", "compliance", "non.compliant",
"license.revoked", "license.denied", "cease.and.desist", "cease.desist",
# Bankruptcy & insolvency
"bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7",
"liquidation", "wind.down", "winding.down", "cease.operations", "shut.down",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
"terra", "luna", "ust", "algorithmic.stablecoin", "ponzi", "pyramid.scheme",
# Technical indicators (bearish)
"death.cross", "death.cross", "macd.bearish", "macd.crossunder", "rsi.overbought",
"rsi.rejection", "moving.average.resistance", "resistance.held", "resistance.holds",
"rejection", "rejects", "rejected", "rejecting", "failed.breakout", "fake.breakout",
"top", "topped", "local.top", "macro.top", "distribution.phase", "wyckoff.distribution",
"overbought", "overbought.rsi", "bearish.divergence", "hidden.bearish.divergence",
"head.and.shoulders", "double.top", "triple.top", "rising.wedge", "bearish.pattern",
# On-chain bearish
"whale.selling", "whale.sells", "whale.dump", "whale.dumps", "large.holder.selling",
"exchange.inflow", "exchange.inflows", "balance.increasing", "on.exchange",
"hot.wallet", "exchange.deposit", "deposit.spike", "whale.deposit", "large.deposit",
"unstaking", "unstaked", "unstake", "unstakes", "withdrawal", "withdrawals",
"mass.withdrawal", "bank.run", "run.on.exchange", "solvency.concerns", "proof.of.reserves",
"hashrate.down", "hashrate.dropping", "difficulty.down", "miners.capitulation",
"miner.surrender", "miner.outflow", "miner.selling", "hash.ribbons",
# DeFi & protocol issues
"tvl.drop", "tvl.dropping", "tvl.crash", "total.value.locked.drop", "tvl.outflow",
"protocol.exploit", "protocol.hack", "smart.contract.exploit", "oracle.failure",
"liquidation.crisis", "bad.debt", "insolvent.protocol", "undercollateralized.vault",
"liquidation.bot", "mev.bot", "sandwich.attack", "front.run", "front.running",
"inflationary", "supply.increasing", "token.inflation", "emission", "emissions.high",
"unlock", "unlocks", "token.unlock", "vesting.unlock", "team.unlock", "investor.unlock",
"cliff.unlock", "linear.unlock", "supply.shock", "dilution", "dilutive",
# Macro & risk-off
"rate.hike", "rate.hikes", "fed.hawkish", "hawkish.fed", "tightening", "qt",
"quantitative.tightening", "liquidity.drain", "liquidity.crunch", "credit.crunch",
"recession", "recession.fears", "recession.risk", "economic.slowdown", "gdp.slowing",
"inflation.high", "cpi.high", "ppi.high", "sticky.inflation", "core.inflation",
"dollar.strength", "dxy.up", "dxy.rising", "risk.off", "risk.off.environment",
"flight.to.safety", "safe.haven", "treasury.yields", "yields.rising", "bond.yields",
"correlation", "correlated.selloff", "broad.selloff", "market.wide.selloff",
"contagion", "contagion.risk", "systemic.risk", "domino.effect", "spillover",
# Sentiment & social
"fud", "fear.uncertainty.doubt", "fear", "extreme.fear", "fear.and.greed",
"fear.index", "capitulation", "despair", "depression", "anger", "rage",
"selling.panic", "blind.panic", "herd.mentality", "herd.selling", "lemmings",
"social.dominance.drop", "mentions.falling", "interest.fading", "google.trends.down",
"search.interest.declining", "retail.exodus", "users.leaving", "offboarding",
"narrative.broken", "narrative.shift", "thesis.broken", "thesis.invalidated",
"disappointment", "missed.expectations", "guidance.lowered", "warn", "warning",
] ]
# Whale action phrases - context-dependent sentiment # Whale action phrases - context-dependent sentiment (bullish)
WHALE_BULLISH_PHRASES = [ WHALE_BULLISH_PHRASES = [
"whale buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating", "whale buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating",
"whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation", "whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation",
"whale entry", "whale enters", "whale positions", "whale positions", "whale positioned", "whale entry", "whale enters", "whale positions", "whale positions", "whale positioned",
"whale accumulation", "whale buying", "whale buys more", "whale adds more", "whale accumulation", "whale buying", "whale buys more", "whale adds more",
"whale buy", "whale buy", "whale bought", "whale has bought", "whale purchased",
"whale purchases", "whale acquiring", "whale acquires", "whale acquired",
"whale stacking", "whale stacks", "whale stacked", "whale building", "whale builds",
"whale building.position", "whale building.position", "whale increasing.position",
"whale adds.to.position", "whale adding.to.position", "whale scaled.in", "whale scaling.in",
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.accumulates",
"large.holder.accumulating", "large.holder.buys", "large.holder.accumulates",
"whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls",
"massive.buy", "massive.buys", "huge.buy", "huge.buys", "large.buy", "large.buys",
] ]
WHALE_BEARISH_PHRASES = [ WHALE_BEARISH_PHRASES = [
@@ -734,6 +1103,23 @@ class CryptoSentimentCalibrator:
"whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit", "whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit",
"whale exits", "whale exits", "whale distributes", "whale distributing", "whale exits", "whale exits", "whale distributes", "whale distributing",
"whale sells", "whale sells", "whale sells", "whale unloads", "whale unloads", "whale sells", "whale sells", "whale sells", "whale unloads", "whale unloads",
"whale sell", "whale sell", "whale sold", "whale has sold", "whale selling",
"whale offloading", "whale offloads", "whale offloaded", "whale unloading",
"whale distributes", "whale distributing", "whale distribution", "whale.distributing",
"whale taking.profit", "whale.take.profit", "whale.profit.taking", "whale.realized",
"whale.realizing", "whale.realizes", "whale.realize", "profit.realized",
"whale.exits", "whale.exiting", "whale.exited", "whale.exit", "whale.exits.market",
"whale.reducing", "whale.reduces", "whale.reduced", "whale.trimmed", "whale.trims",
"whale.trimming", "whale.scaling.out", "whale.scales.out", "whale.scaled.out",
"smart.money.selling", "smart.money.sells", "smart.money.distributes",
"institutional.selling", "institutional.distributes", "institutional.exits",
"large.holder.selling", "large.holder.distributes", "large.holder.exits",
"whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall",
"whale.ask", "whale.asks", "large.ask", "large.asks", "heavy.asks", "ask.side.heavy",
"whale.market.sell", "whale.market.sells", "market.sell", "market.sells",
"aggressive.selling", "aggressive.seller", "aggressive.sells", "market.order.sell",
] ]
@classmethod @classmethod