From 5dc5db9a95e94d800b54b5c7958fae9070b38013 Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 15 Sep 2026 19:48:58 +0200 Subject: [PATCH] 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. --- .../sentiment_engine/nlp/sentiment_emotion.py | 474 ++++++++++++++++-- 1 file changed, 430 insertions(+), 44 deletions(-) diff --git a/sentiment_engine/src/sentiment_engine/nlp/sentiment_emotion.py b/sentiment_engine/src/sentiment_engine/nlp/sentiment_emotion.py index 41e0a28..f7841ed 100644 --- a/sentiment_engine/src/sentiment_engine/nlp/sentiment_emotion.py +++ b/sentiment_engine/src/sentiment_engine/nlp/sentiment_emotion.py @@ -269,40 +269,216 @@ class CryptoSentimentCalibrator: """ # Crypto-bullish keywords (should map to index 2 = Bullish) - # Removed: upgrade, upgrades, upgraded, mainnet (protocol events, not price signals) - # Removed: whale, whales (whale movement can be either bullish or bearish) + # Comprehensive vocabulary covering price action, institutional, technical, on-chain, and news catalysts CRYPTO_BULLISH_KEYWORDS = [ - "surge", "pump", "moon", "rally", "breakout", "bullish", "ath", "all.time.high", - "inflow", "inflows", "adoption", "accumulation", "bull", "green", - "profit", "gain", "win", "success", "breakthrough", "approval", "etf", - "all.time.high", "record.high", "new.high", - "approves", "approved", "approval", "approved", - "listing", "listed", "lists", "list", "listings", "launch", "launches", - "partnership", "partner", "collaboration", + # Price action + "surge", "surges", "surged", "surgeing", "pump", "pumps", "pumped", "pumping", + "moon", "mooning", "mooned", "to.the.moon", "rally", "rallies", "rallied", "rallying", + "breakout", "breakouts", "break.out", "breaking.out", "bullish", "bull.run", "bullrun", + "ath", "all.time.high", "all.time.highs", "record.high", "record.highs", "new.high", "new.highs", + "higher.high", "higher.highs", "higher.low", "higher.lows", "uptrend", "uptrending", + "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) - # Added: crashes, crashing, wipes, wiped, wipes out, liquidations + # Comprehensive vocabulary covering price action, institutional, technical, on-chain, regulatory, and news catalysts CRYPTO_BEARISH_KEYWORDS = [ - "crash", "crashes", "crashing", "dump", "panic", "fear", "bearish", "hack", "exploit", "rug", "rugpull", - "liquidation", "liquidations", "bankruptcy", "depeg", "depegs", "depegged", "depegging", - "outflow", "outflows", "sell", "sells", "selling", "sold", - "loss", "lost", "down", "collapse", "ban", "lawsuit", "lawsuits", "enforcement", "delist", - "stolen", "theft", "vulnerability", "drain", "drained", - "hack", "hacked", "exploit", "exploited", "breach", "stolen", "theft", - "unauthorized", "compromise", "drain", "drained", "vulnerability", - "lawsuit", "lawsuits", "enforcement", "ban", "delist", "crackdown", - "depeg", "depegs", "depegged", "depegging", - "crashes", "crashing", "wipes", "wiped", "wipes out", "liquidations", - "sues", "sue", "lawsuit", "enforcement", "ban", "crackdown", "delist", "ban", + # Price action - crashes & dumps + "crash", "crashes", "crashing", "crashed", "crash.down", "flash.crash", "market.crash", + "dump", "dumps", "dumped", "dumping", "violent.dump", "capitulation", "capitulating", + "panic", "panic.sell", "panic.selling", "panic.sold", "fear", "fearful", "bearish", + "bear.market", "bearish.trend", "downtrend", "downtrending", "lower.high", "lower.highs", + "lower.low", "lower.lows", "red", "red.candle", "red.candles", "bleeding", "bleeds", + "free.fall", "freefall", "nose.dive", "nosedive", "plunge", "plunges", "plunged", + "collapse", "collapses", "collapsed", "collapsing", "implosion", "implodes", + "wipe", "wipes", "wiped", "wipes.out", "wiped.out", "wiping.out", + + # 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 buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating", "whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation", "whale entry", "whale enters", "whale positions", "whale positions", "whale positioned", "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 = [ @@ -312,6 +488,23 @@ class CryptoSentimentCalibrator: "whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit", "whale exits", "whale exits", "whale distributes", "whale distributing", "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 @@ -691,40 +884,216 @@ class CryptoSentimentCalibrator: """ # Crypto-bullish keywords (should map to index 2 = Bullish) - # Removed: upgrade, upgrades, upgraded, mainnet (protocol events, not price signals) - # Removed: whale, whales (whale movement can be either bullish or bearish) + # Comprehensive vocabulary covering price action, institutional, technical, on-chain, and news catalysts CRYPTO_BULLISH_KEYWORDS = [ - "surge", "pump", "moon", "rally", "breakout", "bullish", "ath", "all.time.high", - "inflow", "inflows", "adoption", "accumulation", "bull", "green", - "profit", "gain", "win", "success", "breakthrough", "approval", "etf", - "all.time.high", "record.high", "new.high", - "approves", "approved", "approval", "approved", - "listing", "listed", "lists", "list", "listings", "launch", "launches", - "partnership", "partner", "collaboration", + # Price action + "surge", "surges", "surged", "surgeing", "pump", "pumps", "pumped", "pumping", + "moon", "mooning", "mooned", "to.the.moon", "rally", "rallies", "rallied", "rallying", + "breakout", "breakouts", "break.out", "breaking.out", "bullish", "bull.run", "bullrun", + "ath", "all.time.high", "all.time.highs", "record.high", "record.highs", "new.high", "new.highs", + "higher.high", "higher.highs", "higher.low", "higher.lows", "uptrend", "uptrending", + "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) - # Added: crashes, crashing, wipes, wiped, wipes out, liquidations + # Comprehensive vocabulary covering price action, institutional, technical, on-chain, regulatory, and news catalysts CRYPTO_BEARISH_KEYWORDS = [ - "crash", "crashes", "crashing", "dump", "panic", "fear", "bearish", "hack", "exploit", "rug", "rugpull", - "liquidation", "liquidations", "bankruptcy", "depeg", "depegs", "depegged", "depegging", - "outflow", "outflows", "sell", "sells", "selling", "sold", - "loss", "lost", "down", "collapse", "ban", "lawsuit", "lawsuits", "enforcement", "delist", - "stolen", "theft", "vulnerability", "drain", "drained", - "hack", "hacked", "exploit", "exploited", "breach", "stolen", "theft", - "unauthorized", "compromise", "drain", "drained", "vulnerability", - "lawsuit", "lawsuits", "enforcement", "ban", "delist", "crackdown", - "depeg", "depegs", "depegged", "depegging", - "crashes", "crashing", "wipes", "wiped", "wipes out", "liquidations", - "sues", "sue", "lawsuit", "enforcement", "ban", "crackdown", "delist", "ban", + # Price action - crashes & dumps + "crash", "crashes", "crashing", "crashed", "crash.down", "flash.crash", "market.crash", + "dump", "dumps", "dumped", "dumping", "violent.dump", "capitulation", "capitulating", + "panic", "panic.sell", "panic.selling", "panic.sold", "fear", "fearful", "bearish", + "bear.market", "bearish.trend", "downtrend", "downtrending", "lower.high", "lower.highs", + "lower.low", "lower.lows", "red", "red.candle", "red.candles", "bleeding", "bleeds", + "free.fall", "freefall", "nose.dive", "nosedive", "plunge", "plunges", "plunged", + "collapse", "collapses", "collapsed", "collapsing", "implosion", "implodes", + "wipe", "wipes", "wiped", "wipes.out", "wiped.out", "wiping.out", + + # 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 buys", "whale buys", "whale accumulates", "whale accumulates", "whale accumulating", "whale loads", "whale loading", "whale adds", "whale buying", "whale accumulation", "whale entry", "whale enters", "whale positions", "whale positions", "whale positioned", "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 = [ @@ -734,6 +1103,23 @@ class CryptoSentimentCalibrator: "whale takes profit", "whale takes profit", "whale profit taking", "whale takes profit", "whale exits", "whale exits", "whale distributes", "whale distributing", "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