This directory is python/ in the Liquidity_pool_screener repo. The bot expects .env beside this README (i.e. python/.env). Copy from .env.example; do not commit secrets.
This code is experimental: live PnL, IL, and fee figures may be approximate or incomplete depending on chain, pool type, and what is read from the sheet vs on-chain. It is meant for developers already using the LP Screener sheet. Do not treat the dashboard as audited financial or execution software.
| Variável | Uso |
|---|---|
ETHEREUM_RPC_URL |
RPC HTTP Ethereum (Uniswap V2 / métricas EVM) |
BSC_RPC_URL |
RPC HTTP BSC (PancakeSwap V2) |
BASE_RPC_URL |
RPC HTTP Base (apenas se usar entradas *_v3_base em dex_endpoints.yaml; leitor live V3 ainda não implementado) |
SOLANA_RPC_URL |
Obrigatório para live metrics de pancakeswap_v3_solana (JSON-RPC Solana; ver config/dex_endpoints.yaml) |
Chave em dexes: |
rpc_url_env |
|---|---|
uniswap_v2 |
ETHEREUM_RPC_URL |
pancakeswap_v2 |
BSC_RPC_URL |
uniswap_v3_base, pancakeswap_v3_base |
BASE_RPC_URL |
pancakeswap_v3_solana |
SOLANA_RPC_URL |
Substitua os placeholders em .env pelos endpoints HTTPS do vosso fornecedor (Alchemy, Infura, QuickNode, etc.); veja também .env.example.
Dashboard Streamlit: após alterar RPCs no .env, reinicie o Streamlit (streamlit run scripts/dashboard.py).
Métricas live de facto: valores como https://SEU_RPC_ETHEREUM são placeholders — o código não consegue falar com a chain até substituíres por URLs JSON-RPC reais (domínio com ponto, tipicamente com API key no path ou query). Exemplos de fornecedores: Alchemy, Infura, QuickNode, Ankr, Helius ou outro RPC Solana. Para Ethereum e BSC costuma ser obrigatório ter conta num destes serviços. Para Solana, podes testar com o endpoint público (limitado): https://api.mainnet-beta.solana.com — em produção prefere um RPC com quota dedicada.
Credenciais Google Sheets / outras variáveis do projeto continuam como já configuradas.
pancakeswap_v3_solana: semSOLANA_RPC_URLno.env, as linhas Solana aparecem como live não suportado (env_not_set:SOLANA_RPC_URL); o dashboard avisa na sidebar. Defina o RPC na raiz do projeto (mesmo ficheiro.envque as variáveis EVM).- O endereço da pool na planilha deve ser base58 (32 bytes), não
0x…. - A conta da pool deve ser CLMM compatível com o layout
PoolStatedo Raydium; o owner do programa deve estar emclmm_program_idsno YAML (por padrão inclui o programa Raydium CLMM). - Preços em USD vêm da API pública DexScreener (melhor par
chainId: solanapor liquidez): são estimativas agregadas, não cotação on-chain. - IL (USD): no dashboard,
il_usdé exibido como proxy de mark-to-market (valor atual - capital inicial). Não é necessariamente o IL matemático vs hodl.
- Variação de preço (% m5/h1/h6/h24): API DexScreener por par (
/latest/dex/pairs/{chain}/{pairAddress}). Não é o mesmo motor do site oficial do DEX; pode faltar par ou haver divergência. - APR (
apr_fees_24h): quando a pool não devolve APR on-chain (0), o valor vem do APR da linha do screener na abertura (entry_apr_fees_24h), se existir. Campo opcionalapr_fees_24h_fill=entry_screener. - Fees (
fees_accrued_usd) na tabela ao vivo: coluna—— fees LP não são estimadas por poll (evita valores que mudavam a cada refresh). Fees reais via eventos (OPEN/CLOSE/delta_fees_usd) quando esse fluxo existir.fees_model=not_tracked_live. - EVM live: só pools estilo Uniswap V2 (
getReserves). Endereços V3 noutra chain ou contratos incompatíveis devolvem motivos comopool_not_v2_pairoudex_missing_chain_or_rpc. Rótulos explícitos Base V3 (uniswap-v3-base,pancakeswap-v3-base→ YAML comlive_metrics_mode: none) não abrem posição até existir leitor; caso contrário use DEX/pool V2 na rede configurada. - Range (simulação):
- EVM V2:
range_type=amm_v2_curve(curva x·y=k; sem ticks). - Solana CLMM: opcional via planilha —
FullRange/TickLower/TickUpper(ver abertura noexecutor). Com ticks + métricas on-chain,tick_currenteposition_tick_in_rangeindicam se o preço está dentro do range.
- EVM V2:
- Limitações: ticks “reais” de uma NFT on-chain não são lidos; só o que for guardado na abertura ou inferido acima.
| Coluna | Uso |
|---|---|
TickLower / tick_lower |
Tick inferior (CLMM), opcional |
TickUpper / tick_upper |
Tick superior (CLMM), opcional |
FullRange / full_range / RangeFull |
yes/true/full = range completo; no/narrow = range curto (usa ticks se existirem) |
O APR de entrada continua a ser lido dos campos já suportados (AdjAPR, optimizedAPR, baseAPR, etc.) como em risk_strategy._extract_apr.