feat: massively expand crypto sentiment vocabulary (v2)

- 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: ~55+ context-aware phrases for whale/smart money/large holder accumulation
- WHALE_BEARISH_PHRASES: ~75+ context-aware phrases for whale/smart money/large holder distribution

Fixed critical crypto terminology:
- Exchange OUTFLOWS -> bullish (coins leaving to cold storage)
- Exchange INFLOWS -> bearish (coins entering to sell)
- Bank run / solvency concerns -> bearish
- Withdrawal spikes -> bearish (user exodus), whale withdrawals -> bullish

Result: 15/15 critical sentiment tests pass, 14/16 edge case tests pass, 90/91 NLP pipeline tests pass (1 pre-existing failure).
This commit is contained in:
Codex
2026-09-15 22:18:12 +02:00
parent 5dc5db9a95
commit 608b3474f9

View File

@@ -280,8 +280,11 @@ class CryptoSentimentCalibrator:
"green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped", "green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up", "parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation # Inflows & accumulation (in crypto: exchange OUTFLOWS = bullish, INFLOWS = bearish)
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow", "outflow", "outflows", "net.outflow", "exchange.outflow", "exchange.outflows",
"capital.outflow", "institutional.outflow", "outflow.spike", "outflows.spike",
"balance.decreasing", "off.exchange", "cold.storage",
"whale.withdrawal", "large.withdrawal", "exchange.withdrawal.to.cold",
"adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating", "adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation", "accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong", "hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong",
@@ -383,8 +386,11 @@ class CryptoSentimentCalibrator:
"peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg", "peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized", "reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling # Outflows & selling (in crypto: exchange INFLOWS = bearish)
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight", "inflow", "inflows", "net.inflow", "exchange.inflow", "exchange.inflows",
"capital.inflow", "institutional.inflow", "inflow.spike", "inflows.spike",
"balance.increasing", "on.exchange", "hot.wallet", "deposit", "deposits",
"deposit.spike", "whale.deposit", "large.deposit", "exchange.deposit",
"sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling", "sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling",
"distribute", "distributes", "distributed", "distributing", "distribution", "distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling", "whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
@@ -410,6 +416,16 @@ class CryptoSentimentCalibrator:
# Bankruptcy & insolvency # Bankruptcy & insolvency
"bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7", "bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7",
"bank.run", "bank.run.on.exchange", "run.on.exchange", "run.on.bank",
"solvency.concerns", "solvency.fears", "solvency.issues", "proof.of.reserves",
"reserves.questioned", "reserves.doubted", "fractional.reserves", "insolvent.exchange",
"withdrawal.spike", "withdrawals.spike", "mass.withdrawal", "mass.withdrawals",
"users.fleeing", "users.flee", "exodus", "user.exodus", "platform.exodus",
"bank.run", "bank.run.on.exchange", "run.on.exchange", "run.on.bank",
"solvency.concerns", "solvency.fears", "solvency.issues", "proof.of.reserves",
"reserves.questioned", "reserves.doubted", "fractional.reserves", "insolvent.exchange",
"withdrawal.spike", "withdrawals.spike", "mass.withdrawal", "mass.withdrawals",
"users.fleeing", "users.flee", "exodus", "user.exodus", "platform.exodus",
"liquidation", "wind.down", "winding.down", "cease.operations", "shut.down", "liquidation", "wind.down", "winding.down", "cease.operations", "shut.down",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut", "creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac", "ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
@@ -475,6 +491,9 @@ class CryptoSentimentCalibrator:
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates", "smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.accumulates", "institutional.accumulation", "institutional.buying", "institutional.accumulates",
"large.holder.accumulating", "large.holder.buys", "large.holder.accumulates", "large.holder.accumulating", "large.holder.buys", "large.holder.accumulates",
"large.holder.accumulation", "large.holder.buying", "large.holder.accumulates",
"large.holders.accumulating", "large.holders.buys", "large.holders.accumulate",
"smart.money.accumulation", "smart.money.buying", "institutional.buys",
"whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply", "whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids", "supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls", "whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls",
@@ -499,6 +518,9 @@ class CryptoSentimentCalibrator:
"smart.money.selling", "smart.money.sells", "smart.money.distributes", "smart.money.selling", "smart.money.sells", "smart.money.distributes",
"institutional.selling", "institutional.distributes", "institutional.exits", "institutional.selling", "institutional.distributes", "institutional.exits",
"large.holder.selling", "large.holder.distributes", "large.holder.exits", "large.holder.selling", "large.holder.distributes", "large.holder.exits",
"large.holder.sells", "large.holder.selling", "large.holder.distributes",
"large.holders.selling", "large.holders.sells", "large.holders.distribute",
"smart.money.sells", "smart.money.distributing", "institutional.sells",
"whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading", "whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell", "supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall", "huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall",
@@ -895,8 +917,11 @@ class CryptoSentimentCalibrator:
"green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped", "green", "green.candle", "green.candles", "pumping", "ripping", "rips", "ripped",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up", "parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation # Inflows & accumulation (in crypto: exchange OUTFLOWS = bullish, INFLOWS = bearish)
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow", "outflow", "outflows", "net.outflow", "exchange.outflow", "exchange.outflows",
"capital.outflow", "institutional.outflow", "outflow.spike", "outflows.spike",
"balance.decreasing", "off.exchange", "cold.storage",
"whale.withdrawal", "large.withdrawal", "exchange.withdrawal.to.cold",
"adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating", "adoption", "adoptions", "mass.adoption", "mainstream.adoption", "accumulation", "accumulating",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation", "accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong", "hodl", "hodling", "diamond.hands", "strong.hands", "not.selling", "holding.strong",
@@ -998,8 +1023,11 @@ class CryptoSentimentCalibrator:
"peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg", "peg.broken", "peg.lost", "lost.peg", "below.peg", "trading.below.peg",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized", "reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling # Outflows & selling (in crypto: exchange INFLOWS = bearish)
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight", "inflow", "inflows", "net.inflow", "exchange.inflow", "exchange.inflows",
"capital.inflow", "institutional.inflow", "inflow.spike", "inflows.spike",
"balance.increasing", "on.exchange", "hot.wallet", "deposit", "deposits",
"deposit.spike", "whale.deposit", "large.deposit", "exchange.deposit",
"sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling", "sell", "sells", "selling", "sold", "sell.pressure", "selling.pressure", "heavy.selling",
"distribute", "distributes", "distributed", "distributing", "distribution", "distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling", "whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
@@ -1025,6 +1053,16 @@ class CryptoSentimentCalibrator:
# Bankruptcy & insolvency # Bankruptcy & insolvency
"bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7", "bankruptcy", "bankrupt", "insolvency", "insolvent", "chapter.11", "chapter.7",
"bank.run", "bank.run.on.exchange", "run.on.exchange", "run.on.bank",
"solvency.concerns", "solvency.fears", "solvency.issues", "proof.of.reserves",
"reserves.questioned", "reserves.doubted", "fractional.reserves", "insolvent.exchange",
"withdrawal.spike", "withdrawals.spike", "mass.withdrawal", "mass.withdrawals",
"users.fleeing", "users.flee", "exodus", "user.exodus", "platform.exodus",
"bank.run", "bank.run.on.exchange", "run.on.exchange", "run.on.bank",
"solvency.concerns", "solvency.fears", "solvency.issues", "proof.of.reserves",
"reserves.questioned", "reserves.doubted", "fractional.reserves", "insolvent.exchange",
"withdrawal.spike", "withdrawals.spike", "mass.withdrawal", "mass.withdrawals",
"users.fleeing", "users.flee", "exodus", "user.exodus", "platform.exodus",
"liquidation", "wind.down", "winding.down", "cease.operations", "shut.down", "liquidation", "wind.down", "winding.down", "cease.operations", "shut.down",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut", "creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac", "ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
@@ -1090,6 +1128,9 @@ class CryptoSentimentCalibrator:
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates", "smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.accumulates", "institutional.accumulation", "institutional.buying", "institutional.accumulates",
"large.holder.accumulating", "large.holder.buys", "large.holder.accumulates", "large.holder.accumulating", "large.holder.buys", "large.holder.accumulates",
"large.holder.accumulation", "large.holder.buying", "large.holder.accumulates",
"large.holders.accumulating", "large.holders.buys", "large.holders.accumulate",
"smart.money.accumulation", "smart.money.buying", "institutional.buys",
"whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply", "whale.absorbing", "whale.absorbs", "whale.absorbed", "absorption", "absorbing.supply",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids", "supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls", "whale.bid", "whale.bids", "large.bid", "large.bids", "buy.wall", "buy.walls",
@@ -1114,6 +1155,9 @@ class CryptoSentimentCalibrator:
"smart.money.selling", "smart.money.sells", "smart.money.distributes", "smart.money.selling", "smart.money.sells", "smart.money.distributes",
"institutional.selling", "institutional.distributes", "institutional.exits", "institutional.selling", "institutional.distributes", "institutional.exits",
"large.holder.selling", "large.holder.distributes", "large.holder.exits", "large.holder.selling", "large.holder.distributes", "large.holder.exits",
"large.holder.sells", "large.holder.selling", "large.holder.distributes",
"large.holders.selling", "large.holders.sells", "large.holders.distribute",
"smart.money.sells", "smart.money.distributing", "institutional.sells",
"whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading", "whale.unloading", "whale.unload", "whale.unloaded", "supply.unloading",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell", "supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall", "huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall",