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",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow",
# Inflows & accumulation (in crypto: exchange OUTFLOWS = bullish, INFLOWS = bearish)
"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",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"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",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight",
# Outflows & selling (in crypto: exchange INFLOWS = bearish)
"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",
"distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
@@ -410,6 +416,16 @@ class CryptoSentimentCalibrator:
# Bankruptcy & insolvency
"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",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
@@ -475,6 +491,9 @@ class CryptoSentimentCalibrator:
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.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",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"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",
"institutional.selling", "institutional.distributes", "institutional.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",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"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",
"parabolic", "parabolic.move", "explosive", "explosive.move", "violent.move.up",
# Inflows & accumulation
"inflow", "inflows", "net.inflow", "positive.flow", "capital.inflow", "institutional.inflow",
# Inflows & accumulation (in crypto: exchange OUTFLOWS = bullish, INFLOWS = bearish)
"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",
"accumulate", "accumulates", "accumulated", "whale.accumulation", "smart.money.accumulation",
"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",
"reserve.shortfall", "reserves.insufficient", "collateral.ratio", "undercollateralized",
# Outflows & selling
"outflow", "outflows", "net.outflow", "negative.flow", "capital.outflow", "capital.flight",
# Outflows & selling (in crypto: exchange INFLOWS = bearish)
"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",
"distribute", "distributes", "distributed", "distributing", "distribution",
"whale.selling", "whale.distribution", "smart.money.selling", "insider.selling",
@@ -1025,6 +1053,16 @@ class CryptoSentimentCalibrator:
# Bankruptcy & insolvency
"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",
"creditors", "creditor", "claims", "recovery", "recovery.rate", "haircut",
"ftx", "celcius", "voyager", "blockfi", "genesis", "three.arrows", "3ac",
@@ -1090,6 +1128,9 @@ class CryptoSentimentCalibrator:
"smart.money.accumulating", "smart.money.buys", "smart.money.accumulates",
"institutional.accumulation", "institutional.buying", "institutional.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",
"supply.absorption", "whale.absorbing.supply", "bid.absorption", "strong.bids",
"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",
"institutional.selling", "institutional.distributes", "institutional.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",
"supply.flooding", "whale.flooding", "massive.sell", "massive.sells", "huge.sell",
"huge.sells", "large.sell", "large.sells", "sell.wall", "sell.walls", "massive.sell.wall",