Robinhood 链自动选币·模型自适应集中流动性做市(Uniswap 实盘版)
Robinhood Chain Adaptive Concentrated-Liquidity Market Maker (Uniswap, Live)
Risk warning: this is a live-only strategy; once started it sends real on-chain transactions and spends gas. Providing liquidity is essentially selling volatility: fee income is not guaranteed to cover price declines, impermanent loss, swap slippage or gas. Once the price falls below the lower bound, the position is entirely the token and keeps losing as the price falls until an exit is triggered. The model's fee forecast can be wrong (live results came in at only 2%–30% of the forecast). Only Uniswap on Robinhood Chain is supported; any other exchange or chain is rejected at startup. Start with a small amount.
Idea
The bot looks for a token and pool currently suited to LP, solves the range, size and expected holding time with a single model, re-evaluates "hold / exit now / re-range at the current price" every minute while in position, sells back to the home currency on exit, and then selects the next token.
text
Startup check (exchange / chain / wallet / balances / gas)
→ Entry check (home currency covers the group, gas above the floor, no risk limit hit)
→ Selection: GMGN 5-minute volume above the threshold + safety checks → pool with the highest fee per unit of capital across quote currencies
→ Model: range, size (half Kelly, probe size for new tokens), payback time → move to the next token if it fails
→ Open (swap the home currency into the pool's quote currency when needed)
→ Hold: reconcile fees every minute, model decides hold / exit / re-range; hard stop as a backstop
→ Exit: remove liquidity, sell the token, swap back to the home currency → bookkeeping, fee monitor (SPC) → back to the entry check
Token and pool selection
- Selection thresholds: 5-minute volume ≥
pMinVol5m, at leastpModelMinAgeHhours since launch (24 by default), and a 1-hour drawdown no larger thanpModelMaxDD% (10 by default); then tax, honeypot, transfer-restriction and blacklist checks. - For each candidate, the bot picks the pool with the highest daily fee per unit of capital across home-currency, ETH, WETH and other quote pools; pool TVL must be at least
pPoolTvlXtimes the capital cap. - The score is "fees ÷ inventory loss" and must be at least 1; after an abnormal volume bar (likely wash trading or a sandwich) the bot does not enter for 2 hours.
- A token rejected by the model is skipped for 60 minutes; a token that lost money is frozen for
pFreezeHourshours. As long as a token meets the entry conditions it can be re-entered with no limit on rounds.
Entry and sizing
- The model bootstraps the token's 15-minute candles to simulate future price paths, compares the risk-adjusted return of different ranges and sizes, and takes the best.
- Size = Kelly optimum ×
pKellyFrac(half Kelly by default), capped at the capital limit. - Minimum effective size: no position below
pMinPos, or when round-trip gas exceeds 2% of the position. - Probe size: size scales with the hours of fees already measured in range for this token: with no measurements it is the model size ×
pProbeFrac(30% by default), never below the minimum effective size, reaching the full model size afterpProbeHourshours (6 by default, the prior strength of the fee correction κ), linearly in between. Return and payback are recalculated at the actual reduced size; a failed check prevents entry. - Payback check: round-trip cost must be recovered within
pPaybackK× the expected holding time; the expected holding time also uses actual holding times over the last 48 hours. - Hot tokens (
pHot, off by default): when enabled, hot momentum tokens use a momentum range. Return and payback are recalculated for that range and the model-sized position; a failed check prevents entry. - Occasional candle-API timeouts are retried automatically; if candles are still unavailable the token is not evaluated that round instead of entering on degraded data.
Holding and exit
- Every minute the fee-forecast correction κ is updated with the fees actually received, then the model solves "hold / exit now / re-range".
- Inside the range, an exit needs
pExitHitsconsecutive identical decisions and at leastpExitMinMinminutes of holding; once the price is beyond the tolerance band, 3 consecutive decisions are enough. - Re-ranging requires at least
pRerangeMinHhours of holding and an advantage abovepRrMargin. - Hard stop: if the group loses
pModelHardStop% after gas, it exits and sells regardless of the model. The stop needs a position valuation and consecutive confirmations, and exit and sell slippage can push the realised loss past the threshold: it is a trigger rule, not a maximum-loss guarantee. - Rug and safety checks while holding: pool TVL is read every 5 minutes and a 50% drop from entry triggers an exit; token tax / honeypot / sell restrictions are rechecked every 30 minutes and a failure triggers an exit. API failures only raise alerts.
- Position not found: after 3 consecutive independent reads without the group's positions, leftover tokens in the wallet are sold, the group is booked at its last valuation (capped at 0; a full loss if there is none), counted towards the daily loss and the losing streak, and the bot pauses. The original position IDs are retained for a fresh check on "Resume"; resumption is refused if a position is found. An on-chain check by the operator is still required.
- After exit, leftover tokens are sold and swapped back to the home currency.
Risk controls
| Level | Rule |
|---|---|
| Startup | Stops if the exchange is not Uniswap, the chain is not Robinhood, or the wallet address or balances cannot be read |
| Before each group | No new group when the home-currency balance is below the group budget or gas is below the chain floor; a push notification is sent |
| Per group | Hard stop pModelHardStop (20% by default) |
| Per day | Once the day's loss (closed groups plus the open group's floating P&L after gas) reaches capital cap × pDailyLossPct (5% by default), an open group is exited and sold, and no new groups open for the rest of the day |
| Streak | Stops opening groups after pMaxLossStreak losing groups in a row; resume manually |
| Fee monitor | When actual fees keep falling short of the forecast (SPC), size is halved, then new groups pause for pSpcCool minutes |
Main parameters
| Parameter | Default | Description |
|---|---|---|
Capital cap pBudget | 20 | Required. Maximum capital the model may use (home currency). |
GMGN API Key pGmgnKey | empty | Required. Read-only, used for selection. |
5m volume floor pMinVol5m | 30000 | Selection threshold (USD). |
Minimum effective size pMinPos | 5 | No position below this. |
Probe start fraction pProbeFrac | 30% | Size fraction before any measured fees, never below the minimum effective size. |
Probe period pProbeHours | 6 hours | Full size after this many measured hours; 0 = no probing. |
Minimum token age pModelMinAgeH | 24 hours | 0 = no limit. |
Max 1-hour drawdown pModelMaxDD | 10% | 0 = no limit. |
Hard stop pModelHardStop | 20% | Per-group hard stop. |
Daily loss limit pDailyLossPct | 5% | Includes floating loss; 0 = off (not recommended). |
Hot tokens pHot | Off | When on, hot tokens use a momentum range; size is still set by the model. |
Losing-streak stop pMaxLossStreak | 2 | Number of groups. |
On stop pOnStop | keep positions | Can be set to close everything when the strategy stops. |
The model's internal parameters (groups ④ and ⑤) default to historically calibrated values; do not change them unless you are sure.
Interactive controls
Pause new groups, resume, rescan now, collect fees, re-range at current price, exit keeping tokens, close this group, close and pause, remove all liquidity and sell, emergency exit, blacklist current token: executed on click with no confirmation input. Unfreeze / remove from blacklist: enter the contract address.
Exchange and chain
Only the Uniswap exchange (DEX set to Uniswap on the configuration page) on Robinhood Chain (chainId 4663) is supported, with USDG as the home currency and ETH for gas. The strategy is designed around this chain (USDG home currency, Robinhood stock tokens, gas estimates); other DEXes (PancakeSwap / Aerodrome / Velodrome) or other chains stop with an error at startup.
Validation
- Ran live on Robinhood on 2026-10-22–23 (bot 680971, capital cap 100 USDG): 3 groups opened from about 40 candidates; selection, pool choice, swaps, opening, removal, selling back and returning to the home currency all worked end to end; the two closed groups made +0.149 USDG in total (NOTE +0.21, META −0.06).
- Live fees came in at only 0.30× and 0.02× the forecast. In response, probe sizing, a minimum effective size, a payback check against actual holding times, candle retries and entry checks were added, and the stop defaults were tightened. A further 10-23 revision: the hot-token branch is off by default; entry is recalculated after probe sizing or a switch to the momentum range; probe size defaults to model size × 30% (minimum 5 USDG); the daily loss includes the open group's floating loss; a missing position pauses the bot and retains its IDs for a check before resumption; rug and safety checks while holding are on by default. These changes have only been tested locally and have not yet run live.
- The sample is very small and does not prove long-term profitability.
- 1
