Do the opposite, on purpose.
Fadebook is an inverse copy trading terminal. You pick traders who are reliably wrong. When they buy, you sell. When they sell, you buy. These docs explain how a loser gets picked, how a trade gets flipped, and how to run the same logic yourself with fade.js.
Quick start
Everything the site does with orders lives in one small file with no dependencies: /lib/fade.js. Load it from this site and call Fade.invert() on any trade.
// Node or a bundler: download lib/fade.js next to your file first const Fade = require('./fade.js'); const his = { side: 'buy', mint: 'TOPS…pump', usd: 4200, price: 0.0119, ts: Date.now() }; const mine = Fade.invert(his, { usd: 100 }); console.log(mine.side, mine.usd, mine.tp, mine.sl); // → "sell" 100 0.008925 0.013328
<script src="https://fadebookapp.vercel.app/lib/fade.js"></script> <script> const order = Fade.invert({ side: 'sell', mint: 'BAGZ…pump', usd: 900 }, { usd: 50 }); document.body.innerHTML = Fade.avatar('kevin', { size: 96 }); console.log(order.side); // "buy" </script>
# grab the library, it is one file curl -O https://fadebookapp.vercel.app/lib/fade.js # check the version you got node -e "console.log(require('./fade.js').version)"
window.Fade, in Node it exports the same object. There is no npm package, the file on this site is the package.How fading works
Copy trading follows people who are right. Fading follows people who are wrong, which turns out to be a much bigger and more consistent group. The loop has four steps, the same four you see on the home page.
- Find a loser. Every tracked wallet gets a fade score from 0 to 100. High score means they lose often, buy close to local tops and do it with conviction.
- Read the thesis. Every trade is a post. You see why they bought, so you know exactly what you are betting against.
- See the market. The chart puts their face on every buy. If the faces sit on the wicks, you are looking at a good fade.
- Fade. When their trade lands,
invert()builds the opposite order with your own size, take profit, stop loss and trailing.
The loser cloud
The hero shows the 16 worst traders of the last 24 hours as bubbles. Bubble size is the size of the loss, so the biggest bubble is the person you most want on the other side of your trades. The top three get a rank badge, and the number one gets a gold ring he did not ask for.
Hover or tap a bubble to open the trader card: PnL, win rate, how many people are already fading them, and a Fade button.
Theses and the feed
Each trade comes with the trader's own reasoning. Fadebook does not edit it. Once you fade someone, their next thesis lands in your feed already flipped: their buy shows as your sell, with your size next to it.
The counter under a post, for example 64 faded this, shows how many people took the other side of that exact trade.
Faces on the chart
The market card draws candles for the token and pins the trader's avatar above every candle where they bought. It is the fastest way to judge a loser. If their faces sit at the top of the wicks across 5m, 15m and 1h, the score is earned.
The fade ticket
The ticket has one switch and one number.
| Control | What it does |
|---|---|
| He buys, you sell | Default. Fades entries. Your order is a sell with take profit below entry. |
| He sells, you buy | Fades exits. Useful for traders who panic sell bottoms with the same precision they buy tops. |
| Amount | Fixed size in USD per fade. Presets $10, $50, $100, $500. Mirror sizing is available in the library. |
Check a friend
Type any handle on the home page and Fadebook builds a profile: win rate, tops bought, bottoms sold, what they are still holding, and a fade score with a verdict. The same handle always gets the same result, so the verdict holds up in the group chat.
| Score | Verdict |
|---|---|
90–100 | Perfect contrarian indicator |
75–89 | Generationally wrong |
55–74 | Reliably wrong |
35–54 | Mildly wrong |
0–34 | Annoyingly right. Do not fade |
Liquidations
Sometimes a bubble pops. That is a trader getting liquidated, and the next worst trader on the bench inflates into the empty spot. The cloud always holds 16. There is never a shortage.
fade.js
One file, about 12 KB, no dependencies. It exposes:
| Member | Returns |
|---|---|
Fade.invert(trade, opts) | A FadeOrder, or throws a FadeError |
Fade.score(stats) | { score, tier } |
Fade.profile(handle) | Deterministic loser profile for any handle |
Fade.avatar(seed, opts) | SVG string, the same faces as the site |
Fade.usd(n, signed) | "$647K", "-$4.2K", "+$38K" |
Fade.rng(seed), Fade.hash(str) | Seeded random and FNV-1a hash used everywhere above |
Try it
This box runs the real library from /lib/fade.js.
invert(trade, opts)
Takes the trade you want to fade and returns the order you should place. Side is flipped. Take profit and stop loss are placed on the correct side for the flipped direction, so a fade sell takes profit below entry.
const order = Fade.invert( { side: 'buy', mint: 'TOPS…pump', usd: 4200, price: 0.0119, wallet: 'Top…9000', ts: Date.now() }, { sizing: 'mirror', ratio: 0.05, tp: 0.3, sl: 0.1, self: myWallet } ); // order.usd === 210, order.side === "sell"
self with your own wallet. If the wallet you are fading turns out to be yours, invert() throws E_SELF. It happens more often than you would think.score(stats)
Combines three numbers into one. Win rate carries the most weight, then how often they buy local tops, then how close to the top they buy on average. Wallets with fewer than 40 trades are pulled toward 50, so one bad week does not make a legend.
raw = (1 - winRate) × 0.55 + (topBuys / trades) × 0.30 + avgFromTop × 0.15 conf = min(1, trades / 40) score = round(100 × (0.5 + (raw - 0.5) × conf))
profile() and avatar()
profile(handle) returns the same object the home page shows when you check a friend: trades, winRate, topBuys, bottomSells, avgFromTop, pnl30d, holding, score, tier. It is seeded by the handle, so it never changes.
avatar(seed, {size, bg}) draws the face: 7 eye types, 5 mouths, 7 hats, 10 skin tones. Laser eyes are about one in seven, as in real life.
FadeOrder format
| Field | Type | Meaning |
|---|---|---|
v | number | Format version, currently 1 |
side | "buy" | "sell" | Always the opposite of the source trade |
mint | string | Token mint, copied from the source |
usd | number | Your size after sizing and maxUsd |
entry | number | null | Source price, if given |
tp, sl | number | null | Absolute prices when entry is known, fractions otherwise |
trailing | number | null | Trailing stop distance |
slippageBps | number | Max slippage in basis points |
feeUsd | number | 0.3% of size |
source | object | { wallet, sig, side, usd } of the trade you faded |
createdAt | number | Unix ms |
Defaults
| Option | Default | Notes |
|---|---|---|
sizing | "fixed" | "mirror" uses trade.usd × ratio |
usd | 100 | Fixed size per fade |
ratio | 0.02 | Mirror ratio |
maxUsd | 5000 | Hard cap per order |
tp / sl | 0.25 / 0.12 | 0 turns either off |
trailing | 0 | Off by default |
slippageBps | 300 | 3% |
maxAgeMs | 90000 | Older trades are refused |
feeBps | 30 | 0.3% |
Errors
Every error is a FadeError with a code.
| Code | When |
|---|---|
E_SIDE | Trade side is not "buy" or "sell" |
E_MINT | Trade has no mint |
E_SIZE | Size resolves below $1 |
E_SELF | You tried to fade your own wallet |
E_STALE | Source trade is older than maxAgeMs |
E_RISK | Stop loss outside 0–1 |
Limits
- Losers can get lucky. A 3% win rate still wins 3% of the time. The stop loss is there for those days.
- Losers can quit. A wallet that stops trading drops out of the cloud after 24 hours without a trade.
- Losers can catch on. If someone starts doing the opposite of themselves, their score falls and the cloud replaces them.
- Speed. Fades fill about a second after the source trade. On a thin token that second is visible in your entry.
- Keys. Fadebook is non-custodial. Orders are signed by your wallet, never by ours.
$FADE
$FADE is the token of Fadebook. Contract, chart and buy links below fill in automatically from the home page settings.
FAQ
Is fading just shorting?
On a spot token, a fade sell is selling what you hold, and a fade buy is buying what they dumped. You only fade in the direction you can actually trade.
Can I fade myself?
No. invert() throws E_SELF. Check a friend will still score you if you type your own handle, and the result is private between you and your screen.
What if everyone fades the same loser?
Then he becomes the most important trader on the chain. We do not know what happens next either.
Where do the faces come from?
They are drawn by Fade.avatar() from the handle. Nobody's photo is used anywhere on Fadebook.