Pool Ranking — fees/TVL yield scan
Goal: produce a ranked shortlist of Solana CLMM pools to LP into, quoted in quote_asset, on an allowed venue.
1. Source candidates (GeckoTerminal)
explore_geckoterminal(action="trending_pools", network="solana")— momentum memecoins.explore_geckoterminal(action="top_pools", network="solana", dex_id="<venue>")— top by volume per venue (loopvenues).- Optionally
action="new_pools"for fresh launches (higher risk/higher fee).
2. Filter
- Keep only pools whose quote ==
quote_asset(SOL or USDC). - Keep only pools on an allowed venue (meteora / orca / raydium).
- Drop pools already held by an open slot.
- Drop ultra-thin TVL (
reserve_usd) — thin pools gap out of range immediately and IL dominates. Rule of thumb: skip TVL < ~$25k unless volume is exceptional.
3. Score — fee yield
For each survivor: fee_yield = fees(ranking_window) / reserve_usd.
- GeckoTerminal pool fields give volume + reserve; when a direct fee figure isn't present, estimate
fees ≈ volume(window) × pool_fee_pct. - Higher fee_yield = more fee income per dollar of liquidity = better. This is the primary sort key.
4. Sanity-check the top few
explore_dex_pools(action="get_pool_info", connector=<venue>, network="solana-mainnet-beta", pool_address=...)→ live price,bin_step/tick_spacing, liquidity distribution.explore_geckoterminal(action="ohlcv", network="solana", pool_address=..., timeframe="1h")→ volatility (for range width) and trend. Reject pools in a steep one-directional dump (fees won't cover IL / you'll be single-sided into a falling knife).
5. Output
Ranked list: pool | venue | pair | TVL | vol(window) | fee_pct | fee_yield | bin_step/tick | price | trend. Lead with the single best for the next free slot.
Notes
- Raydium pool-info comes from the Raydium API (not Gateway); Meteora/Orca via Gateway.
- Re-rank every tick that has free slots — trending sets rotate fast.