← Назад
""" Squeeze-VWAP Bot — Configuration ================================== LazyBear Combo: Squeeze Momentum + Z-VWAP + Waddah Attar Explosion All settings in one place. Override via ecosystem.config.js env vars. Exchange: Bybit Futures (Linear USDT Perpetuals) """ import os # ============================================================ # BYBIT # ============================================================ BYBIT_API_KEY = os.getenv("BYBIT_API_KEY", "") BYBIT_API_SECRET = os.getenv("BYBIT_API_SECRET", "") BYBIT_TESTNET = os.getenv("BYBIT_TESTNET", "false").lower() == "true" # ============================================================ # TELEGRAM # ============================================================ TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "") TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID", "") # ============================================================ # STRATEGY: Squeeze + Z-VWAP + Waddah Attar on 5m # ============================================================ TIMEFRAME = "5m" # --- Squeeze Momentum (BB inside KC = squeeze) --- SQZ_BB_LEN = 20 # Bollinger Bands length SQZ_BB_MULT = 2.0 # BB multiplier (std dev) SQZ_KC_LEN = 20 # Keltner Channel length SQZ_KC_MULT = 1.5 # KC multiplier (ATR-based) SQZ_LINREG_LEN = 20 # Linear regression length for momentum histogram # --- Z-Distance from VWAP --- ZVWAP_PERIOD = 50 # VWAP lookback (candles) ZVWAP_ENTRY_THRESHOLD = 1.8 # entry when |Z| > 1.8 (was 1.5 — zone 1.5-1.7 = WR 26%, pure noise) ZVWAP_EXIT_THRESHOLD = 0.5 # TP when |Z| < 0.5 (returned to fair value) # --- Waddah Attar Explosion --- WAD_FAST_LEN = 20 # Fast MACD EMA WAD_SLOW_LEN = 40 # Slow MACD EMA WAD_BB_LEN = 20 # BB length for explosion line WAD_BB_MULT = 2.0 # BB multiplier WAD_SENSITIVITY = 150 # Sensitivity multiplier # --- ADX Regime Filter (optional) --- ADX_PERIOD = 14 ADX_TREND_THRESHOLD = 25 # ADX > 25 = trending (skip mean reversion) # ============================================================ # SCREENER # ============================================================ SCAN_INTERVAL_SEC = 300 # 5 minutes MIN_VOLUME_24H = 30_000_000 # $30M minimum MIN_TRADES_24H = 300_000 # 300K trades minimum (Bybit: bypassed, uses volume) ATR_MIN_PCT = 3.0 # ATR(14) minimum % (1h) ATR_PERIOD = 14 NATR_5M_MIN = 1.2 # NATR(14) на 5m минимум % — отсекает "спящие" монеты # ============================================================ # RISK MANAGEMENT # ============================================================ TRADE_SIZE_USD = float(os.getenv("TRADE_SIZE_USD", "5")) LEVERAGE = int(os.getenv("LEVERAGE", "10")) MAX_POSITIONS = int(os.getenv("MAX_POSITIONS", "3")) COOLDOWN_MIN = 30 # minutes cooldown after SL (was 10 — too quick re-entry) # SL/TP SL_PCT = 0.025 # 2.5% SL (was 1.5% — noise kept hitting it on 5m) MAX_TP_PCT = 0.05 # max 5% cap for remaining 50% after TP1 TIME_STOP_MIN = 30 # time stop (was 15 — too early, killed winners) BE_TRIGGER_PCT = 0.01 # legacy — BE now auto after TP1 # TP1 partial + trailing (4 Apr 2026) TP1_PCT = 0.012 # 1.2% — close 50% of position (MFE analysis: 51% hit rate, +$4.04 delta) TP1_CLOSE_RATIO = 0.5 # close 50% at TP1 TRAIL_CALLBACK_PCT = 0.007 # 0.7% trailing distance from peak → close rest # ============================================================ # COMMISSION (Bybit Futures) # ============================================================ MAKER_FEE = 0.0002 # 0.02% maker (limit orders) TAKER_FEE = 0.00055 # 0.055% taker (market orders) — higher than Binance! # ============================================================ # BLACKLIST — heavy coins + problematic # ============================================================ BLACKLIST = { "BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT", "XRPUSDT", "DOGEUSDT", "ADAUSDT", "DOTUSDT", "LTCUSDT", "LINKUSDT", "AVAXUSDT", "TRXUSDT", "MATICUSDT", "SHIBUSDT", "TONUSDT", "BCHUSDT", "XLMUSDT", "ATOMUSDT", "ICPUSDT", "UNIUSDT", "XAUUSDT", "PEPEUSDT", "1000PEPEUSDT", } # ============================================================ # FILES # ============================================================ DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data") POSITIONS_FILE = os.path.join(DATA_DIR, "positions.json") TRADE_LOG_FILE = os.path.join(DATA_DIR, "trade_log.json") WATCHLIST_FILE = os.path.join(DATA_DIR, "watchlist.json") COOLDOWNS_FILE = os.path.join(DATA_DIR, "cooldowns.json")