""" 전역 설정 (WLD 월드코인, 3분 BB MTF 전략). """ import os try: from dotenv import load_dotenv load_dotenv() except ImportError: pass # --- API / 알림 --- COIN_TELEGRAM_BOT_TOKEN = os.getenv("COIN_TELEGRAM_BOT_TOKEN", "") COIN_TELEGRAM_CHAT_ID = os.getenv("COIN_TELEGRAM_CHAT_ID", "") # --- 거래 대상 --- SYMBOL = "WLD" COIN_NAME = "월드코인" KR_COINS: dict[str, str] = { SYMBOL: COIN_NAME, } # --- 타임프레임 (분) --- TREND_INTERVAL_1H = 60 TREND_INTERVAL_1D = 1440 # --- 쿨다운(초) — 3분봉: 기본 30분/15분 (빈번 체결 완화) --- BUY_COOLDOWN_SEC = int(os.getenv("BUY_COOLDOWN_SEC", "1800")) SELL_COOLDOWN_SEC = int(os.getenv("SELL_COOLDOWN_SEC", "900")) BUY_MINUTE_LIMIT = BUY_COOLDOWN_SEC # 매수·매도 신호는 조건이 False→True로 바뀐 봉에서만 (연속 참 방지) SIGNAL_EDGE_ONLY = os.getenv("SIGNAL_EDGE_ONLY", "true").lower() in ("1", "true", "yes") # 체결(매수·매도 공통) 후 최소 대기 봉 수 (3분봉 5봉 = 15분) TRADE_MIN_GAP_BARS = int(os.getenv("TRADE_MIN_GAP_BARS", "5")) # 규칙 탐색 시 거래 횟수 패널티 (학습 구간) DISCOVER_MAX_TRADES = int(os.getenv("DISCOVER_MAX_TRADES", "120")) DISCOVER_TRADE_PENALTY_PCT = float(os.getenv("DISCOVER_TRADE_PENALTY_PCT", "0.03")) # 3분 BB 위치: 이 값 미만에서 상단돌파 매도 차단 (저점 익절 방지) SELL_MIN_BB_POS = float(os.getenv("SELL_MIN_BB_POS", "0.4")) # 3분 BB 위치: 이 값 이상이면 단독 상단구간 매수 차단 (고점 추격 방지) BUY_MAX_BB_POS_CHASE = float(os.getenv("BUY_MAX_BB_POS_CHASE", "0.55")) # --- 볼린저 (3분봉, 20, 2σ) --- BB_PERIOD = 20 BB_STD = 2 BB_MIN_WIDTH_PCT = float(os.getenv("BB_MIN_WIDTH_PCT", "0.8")) # --- RSI / 거래량 (조합 필터) --- RSI_PERIOD = 14 RSI_BUY_MAX = float(os.getenv("RSI_BUY_MAX", "42")) VOLUME_BUY_RATIO = float(os.getenv("VOLUME_BUY_RATIO", "1.0")) # --- 추세 / 레짐 --- TREND_RANGE_MA_GAP_PCT = 0.5 # --- 주문 --- DEFAULT_BUY_KRW = int(os.getenv("DEFAULT_BUY_KRW", "30000")) RANGE_BUY_KRW = int(os.getenv("RANGE_BUY_KRW", "15000")) # --- 수수료 (매수·매도 각각 적용, 시뮬레이션) --- TRADING_FEE_RATE = float(os.getenv("TRADING_FEE_RATE", "0.0005")) # --- coins.db (downloader.py 적재 간격, 분) --- # 빗썸 분봉 API: 1,3,5,10,15,30,60,240 / 일봉 1440 ALL_INTERVALS: tuple[int, ...] = (1, 3, 5, 10, 15, 30, 60, 240, 1440) DOWNLOAD_INTERVALS: tuple[int, ...] = ALL_INTERVALS DOWNLOAD_MONTHS = int(os.getenv("DOWNLOAD_MONTHS", "6")) # 1분봉은 용량·API 부담으로 기본 2개월 (환경변수로 조정) DOWNLOAD_MONTHS_1M = int(os.getenv("DOWNLOAD_MONTHS_1M", "2")) DB_PATH = "coins.db" # 규칙 탐색·조합 분석 기준 타임라인 ENTRY_INTERVAL = 3 # 실시간: discovered_rules + 전 봉 BB·일목 조합 (False면 mtf_bb_policy) USE_DISCOVERED_LIVE = os.getenv("USE_DISCOVERED_LIVE", "true").lower() in ("1", "true", "yes") # --- 시뮬레이션 --- SIM_INITIAL_CASH_KRW = int(os.getenv("SIM_INITIAL_CASH_KRW", "200000")) SIM_MIN_ORDER_KRW = int(os.getenv("SIM_MIN_ORDER_KRW", "5000")) # --- 실행 --- MONITOR_LOOP_SLEEP_SEC = 10 COOLDOWN_FILE = "coins_buy_time.json"