← Back
"""
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")

📜 Git History

c6f6bd5chore: initial commit — version control setup5 weeks ago
Show last diff
Loading...