← Назад
""" Gerchik Levels Strategy — Configuration. All params configurable via environment variables. """ import os # === Enable/Disable === GERCHIK_ENABLED = os.environ.get("GERCHIK_ENABLED", "false").lower() == "true" # Allowed models (comma-separated: A,B,C,D). Default: only A (bounce) GERCHIK_ALLOWED_MODELS = set( m.strip().upper() for m in os.environ.get("GERCHIK_ALLOWED_MODELS", "A").split(",") if m.strip() ) # === Position Sizing === GERCHIK_SIZE_USDT = float(os.environ.get("GERCHIK_SIZE_USDT", "10")) GERCHIK_LEVERAGE = int(os.environ.get("GERCHIK_LEVERAGE", "5")) GERCHIK_MAX_POSITIONS = int(os.environ.get("GERCHIK_MAX_POSITIONS", "3")) # === Risk/Reward === GERCHIK_MIN_RR = float(os.environ.get("GERCHIK_MIN_RR", "3.0")) # Minimum risk:reward ratio # TP split ratios (must sum to 1.0) GERCHIK_TP1_RR = float(os.environ.get("GERCHIK_TP1_RR", "3.0")) # TP1 = 3x SL GERCHIK_TP2_RR = float(os.environ.get("GERCHIK_TP2_RR", "4.0")) # TP2 = 4x SL GERCHIK_TP3_RR = float(os.environ.get("GERCHIK_TP3_RR", "5.0")) # TP3 = 5x SL GERCHIK_TP1_CLOSE_PCT = 0.50 # Close 50% at TP1 GERCHIK_TP2_CLOSE_PCT = 0.50 # Close 50% of remaining at TP2 # Rest closes at TP3 # Move SL to BE after N stoploss-distances in profit GERCHIK_BE_TRIGGER_STOPLOSS_MULT = 2.0 # 2x SL distance = move to BE # === Level Detection === GERCHIK_LEVEL_MIN_TOUCHES = int(os.environ.get("GERCHIK_LEVEL_MIN_TOUCHES", "3")) GERCHIK_LEVEL_TOLERANCE_PCT = float(os.environ.get("GERCHIK_LEVEL_TOLERANCE_PCT", "0.15")) GERCHIK_LEVEL_CANDLES = int(os.environ.get("GERCHIK_LEVEL_CANDLES", "500")) # 1H candles GERCHIK_MAX_LEVELS = int(os.environ.get("GERCHIK_MAX_LEVELS", "10")) # SL buffer beyond level (% added to SL past the level) GERCHIK_SL_BUFFER_PCT = float(os.environ.get("GERCHIK_SL_BUFFER_PCT", "0.1")) # Max SL allowed (skip trade if SL is too big) GERCHIK_MAX_SL_PCT = float(os.environ.get("GERCHIK_MAX_SL_PCT", "2.0")) # === Scanning === GERCHIK_SCAN_INTERVAL = int(os.environ.get("GERCHIK_SCAN_INTERVAL", "300")) # 5 min GERCHIK_CHECK_INTERVAL = int(os.environ.get("GERCHIK_CHECK_INTERVAL", "3")) # Position check # === Instrument Filters === GERCHIK_MIN_VOLUME_24H = float(os.environ.get("GERCHIK_MIN_VOLUME_24H", "50000000")) # $50M GERCHIK_MIN_ATR_PCT = float(os.environ.get("GERCHIK_MIN_ATR_PCT", "0.5")) GERCHIK_TOP_N_PAIRS = int(os.environ.get("GERCHIK_TOP_N_PAIRS", "50")) # === Order Type === GERCHIK_USE_LIMIT_ORDERS = os.environ.get("GERCHIK_USE_LIMIT_ORDERS", "true").lower() == "true" GERCHIK_LIMIT_FALLBACK_SEC = int(os.environ.get("GERCHIK_LIMIT_FALLBACK_SEC", "10")) GERCHIK_USE_EXCHANGE_ORDERS = os.environ.get("GERCHIK_USE_EXCHANGE_ORDERS", "true").lower() == "true" # Fees TAKER_FEE_PCT = 0.04 MAKER_FEE_PCT = 0.02 # Model labels MODEL_LABELS = { "A": "Отбой от уровня", "B": "Ложный пробой", "C": "Сложный ложный пробой", "D": "Пробой уровня", }