← Назад"""
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": "Пробой уровня",
}