← Назад
""" Grid Bot — Configuration v3 (NEUTRAL GRID, низкая волатильность) ================================================================== Переосмысленная стратегия: ищем СПЯЩИЕ монеты в узком рейндже, а не волатильные (как в v2). Это фундаментально противоположный подход. Депо: $150, биржа: Binance Futures v3 изменения vs v2: - НЕТ гонки за волой: NATR < 0.65% (раньше MV ≥ 65 — искали активность) - Profit target per grid: +1% equity → ротация - Soft SL per grid: -3% equity → закрытие без inventory blow-up - Rebalance 90 min (было 5 min — recenter жрал прибыль) - Coin lockout: 2 убыточных грида → бан 2 часа - Max exposure 70% equity - Funding filter: |funding| < 0.035% (перегретый рынок = скоро breakout) - EMA20 slope < 0.4% (защита от тренда) - Vol ≥ $150M (ликвидность мажоров) - ✗ Time stop выключен (по просьбе Rick'а) """ import os # ============================================================ # BINANCE # ============================================================ BINANCE_API_KEY = os.getenv("BINANCE_API_KEY", "") BINANCE_API_SECRET = os.getenv("BINANCE_API_SECRET", "") # ============================================================ # TELEGRAM # ============================================================ TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "") TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID", "") # ============================================================ # DEPOSIT & SIZING (под $150) # ============================================================ DEPOSIT_USD = float(os.getenv("DEPOSIT_USD", "150")) # ============================================================ # GRID STRATEGY # ============================================================ GRID_LEVELS = 4 # 4 per side (4 buy + 4 sell = 8 total) GRID_SPACING_PCT = 0.45 # base spacing 0.45% (overridden by ATR) POSITION_SIZE_USD = 11.0 # $11 → notional $22 (Binance min $20 + запас) LEVERAGE = 2 # 2x # Расчёт экспозиции (только MAX одна сторона при нейтральном гриде): # BO $11 × 2x = $22 notional/order # Max one-side: 4 × $22 = $88 notional/grid = 59% от $150 # 2 grids × $88 = $176 notional = 117% (в worst case обе стороны в минусе) # ATR-adaptive spacing ATR_SPACING_ENABLED = True ATR_PERIOD = 14 ATR_SPACING_MULT = 0.90 # spacing = ATR/price * 100 * mult (v3.2: 1.15→0.90) SPACING_MIN_PCT = 0.40 # floor (v3.2: 0.35→0.40) SPACING_MAX_PCT = 0.50 # ceiling (v3.2: 0.60→0.50, узкий диапазон под ETH boковик) # ============================================================ # INVENTORY MANAGEMENT (более мягкое — rely on soft SL вместо) # ============================================================ INVENTORY_WARN_LEVELS = 3 INVENTORY_MAX_LEVELS = 6 UNSTUCK_ENABLED = True UNSTUCK_THRESHOLD = 5 # было 4 — реже триггерим, soft SL защитит раньше UNSTUCK_CLOSE_PCT = 0.50 # ============================================================ # TRAILING CENTER (90 мин rebalance — реже = меньше P&L жор) # ============================================================ EMA_CENTER_PERIOD = 20 CENTER_UPDATE_SEC = 5400 # 90 min (было 300 = 5 min) CENTER_DRIFT_THRESHOLD = 6 # ============================================================ # PROFIT TARGET & SOFT SL (per grid session) # ============================================================ PROFIT_TARGET_USD = 1.50 # +1% от $150 → закрыть грид и ротировать SOFT_SL_USD = 4.50 # -3% от $150 → закрыть грид (защита от slow bleed) # ============================================================ # SCREENER (новые фильтры под Neutral Grid) # ============================================================ SCREENER_INTERVAL_SEC = 300 SCREENER_MIN_VOLUME = 100_000_000 # $100M (Rick 16 Apr v3.2: 150→100M, +кандидатов) SCREENER_BB_PERIOD = 20 SCREENER_BB_STD = 2.0 SCREENER_BB_WIDTH_MIN = 0.3 SCREENER_BB_WIDTH_MAX = 1.5 SCREENER_ADX_PERIOD = 14 SCREENER_ADX_MAX = 22 # строже (было 25) SCREENER_BREAKOUT_BB_MULT = 1.5 SCREENER_BREAKOUT_ADX = 28 SCREENER_TOP_N = 30 SCREENER_TF = "15m" # Choppiness Index SCREENER_CHOP_PERIOD = 14 SCREENER_CHOP_MIN_ENTRY = 45 # мягче (Rick 16 Apr v3.2) — пустит больше мажоров SCREENER_CHOP_MAX_EXIT = 40 # NATR filter (ГЛАВНОЕ ИЗМЕНЕНИЕ v3: ищем НИЗКУЮ волу) SCREENER_NATR_MAX = 0.65 # %, волатильнее — не берём (grid blow-up risk) # EMA20 slope filter (защита от тренда) EMA_SLOPE_PERIOD = 20 # EMA(20) на 15m TF EMA_SLOPE_MAX_PCT = 0.5 # |slope| < 0.5% (Rick 16 Apr v3.2) # Funding rate filter (перегретый рынок фильтруем) FUNDING_MAX_ABS = 0.00035 # |funding| < 0.035% # Micro-volatility (оставляем для инфо, но НЕ hard gate) SCREENER_MV_MIN_INFO = 5 # инфо, не блокирующий # Candidates pool — крупные мажоры с ликвидностью $150M+ GRID_CANDIDATES = [ "ETHUSDT", "SOLUSDT", "XRPUSDT", "DOGEUSDT", "AVAXUSDT", "LINKUSDT", "DOTUSDT", "NEARUSDT", "ADAUSDT", "LTCUSDT", "AAVEUSDT", "UNIUSDT", "ATOMUSDT", "OPUSDT", "ARBUSDT", "INJUSDT", "TONUSDT", "WLDUSDT", "FILUSDT", "ONDOUSDT", "1000PEPEUSDT", "1000SHIBUSDT", "SUIUSDT", ] # Blacklist — TradFi-перпы требуют отдельных agreement'ов (Rick 16 Apr v3.2) GRID_BLACKLIST = { "XAUUSDT", "XAGUSDT", "XAUTUSDT", "PAXGUSDT", "CLUSDT", } # ============================================================ # RISK MANAGEMENT # ============================================================ MAX_LOSS_PCT = 4.50 # USD, per session — совпадает с SOFT_SL_USD DAILY_LOSS_LIMIT_USD = 10.0 # абсолютный лимит, $10 (было % от баланса) DAILY_LOSS_LIMIT_PCT = 6.7 # ≈ $10/$150 (для совместимости с RiskManager) CIRCUIT_BREAKER_STOPS = 5 CIRCUIT_BREAKER_PAUSE_MIN = 30 MAX_CONCURRENT_GRIDS = 2 # Max exposure (защита от over-leveraged) MAX_EXPOSURE_PCT = 130.0 # до 130% (нейтр. грид держит обе стороны) # Coin lockout (2 фейла → бан) COIN_LOCKOUT_FAILS = 2 # 2 убыточных сессии на монете COIN_LOCKOUT_HOURS = 2 # бан 2 часа # Cooldown после breakout BREAKOUT_COOLDOWN_MIN = 10 # 10 мин (раньше 30) # ============================================================ # PROFIT SYSTEM # ============================================================ CHECKPOINT_DAY = 6 CHECKPOINT_HOUR = 21 WITHDRAW_RATIO = 0.5 EMERGENCY_DRAWDOWN_PCT = 20.0 # ============================================================ # COMMISSION # ============================================================ MAKER_FEE = 0.0002 TAKER_FEE = 0.0004 # ============================================================ # TMM # ============================================================ TMM_STRATEGY_TAG = "Grid.v3" TMM_TAG_COL_STRATEGY = int(os.getenv("TMM_TAG_COL_STRATEGY", "10")) TMM_TAG_COL_ENTRY = 1 # ============================================================ # FILES # ============================================================ DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data") GRID_STATE_FILE = os.path.join(DATA_DIR, "grid_state.json") SESSION_LOG_FILE = os.path.join(DATA_DIR, "session_log.json") DAILY_PNL_FILE = os.path.join(DATA_DIR, "daily_pnl.json") COIN_STATS_FILE = os.path.join(DATA_DIR, "coin_stats.json") # для lockout tracking