← Назад"""
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