feat: full automation for PancakeSwap BNB Chain with Smart Router & Stable Detection

This commit is contained in:
2025-12-27 21:23:56 +01:00
parent c04eb3f377
commit 90c4453ab4
3 changed files with 199 additions and 55 deletions

76
clp_config.py Normal file
View File

@ -0,0 +1,76 @@
import os
from decimal import Decimal
# --- GLOBAL SETTINGS ---
# Use environment variables to switch profiles
# Example: TARGET_DEX="UNISWAP_V3"
TARGET_DEX = os.environ.get("TARGET_DEX", "UNISWAP_V3")
STATUS_FILE = os.environ.get("STATUS_FILE", "hedge_status.json")
# --- DEX PROFILES ---
DEX_PROFILES = {
"UNISWAP_V3": {
"NAME": "Uniswap V3 (Arbitrum)",
"COIN_SYMBOL": "ETH", # Asset to hedge on Hyperliquid
"RPC_ENV_VAR": "MAINNET_RPC_URL", # Env var to read RPC from
"NPM_ADDRESS": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
"ROUTER_ADDRESS": "0xE592427A0AEce92De3Edee1F18E0157C05861564",
"WETH_ADDRESS": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", # WETH
"USDC_ADDRESS": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", # USDC
"POOL_FEE": 500, # 0.05%
},
"PANCAKESWAP_V3": {
"NAME": "PancakeSwap V3 (Arbitrum)",
"COIN_SYMBOL": "ETH",
"RPC_ENV_VAR": "MAINNET_RPC_URL",
"NPM_ADDRESS": "0x46A15B0b27311cedF172AB29E4f4766fbE7F4364",
"ROUTER_ADDRESS": "0x1b81D678ffb9C0263b24A97847620C99d213eB14",
"WETH_ADDRESS": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
"USDC_ADDRESS": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"POOL_FEE": 500,
},
"UNISWAP_BNB": {
"NAME": "Uniswap V3 (BNB Chain)",
"COIN_SYMBOL": "BNB", # Hedge BNB
"RPC_ENV_VAR": "BNB_RPC_URL", # Needs a BSC RPC
# Uniswap V3 Official Addresses on BNB Chain
"NPM_ADDRESS": "0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613",
"ROUTER_ADDRESS": "0xB971eF87ede563556b2ED4b1C0b0019111Dd35d2",
# Pool: 0x47a90a2d92a8367a91efa1906bfc8c1e05bf10c4
# Tokens: WBNB / USDT
"WETH_ADDRESS": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", # WBNB
"USDC_ADDRESS": "0x55d398326f99059fF775485246999027B3197955", # USDT (BSC)
"POOL_FEE": 500, # 0.05%
},
"PANCAKESWAP_BNB": {
"NAME": "PancakeSwap V3 (BNB Chain)",
"COIN_SYMBOL": "BNB",
"RPC_ENV_VAR": "BNB_RPC_URL",
"NPM_ADDRESS": "0x46A15B0b27311cedF172AB29E4f4766fbE7F4364",
"ROUTER_ADDRESS": "0x1b81D678ffb9C0263b24A97847620C99d213eB14", # Smart Router
# Pool: 0x172fcD41E0913e95784454622d1c3724f546f849 (USDT/WBNB)
"WETH_ADDRESS": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", # WBNB
"USDC_ADDRESS": "0x55d398326f99059fF775485246999027B3197955", # USDT
"POOL_FEE": 100,
}
}
# --- STRATEGY SETTINGS ---
MONITOR_INTERVAL_SECONDS = 60
CLOSE_POSITION_ENABLED = True
OPEN_POSITION_ENABLED = True
REBALANCE_ON_CLOSE_BELOW_RANGE = True
TARGET_INVESTMENT_VALUE_USDC = 2000
INITIAL_HEDGE_CAPITAL_USDC = 1000
RANGE_WIDTH_PCT = Decimal("0.05") # +/- 5%
SLIPPAGE_TOLERANCE = Decimal("0.02") # 2%
TRANSACTION_TIMEOUT_SECONDS = 30
# --- HELPER TO GET ACTIVE CONFIG ---
def get_current_config():
conf = DEX_PROFILES.get(TARGET_DEX)
if not conf:
raise ValueError(f"Unknown DEX profile: {TARGET_DEX}")
return conf