9개 간격(1~1440분) BB·일목 위치 특징을 3분 타임라인에 맞춰 분석하고, discover로 매수·매도 규칙을 찾은 뒤 HTML 차트에 해당 체결만 표시한다. simulation_1h.py를 simulation.py로 변경했으며, 파라미터 없이 실행하면 analyze→discover→차트가 한 번에 수행된다. Co-authored-by: Cursor <cursoragent@cursor.com>
77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
"""
|
||
전역 설정 (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
|
||
|
||
# --- 쿨다운(초) ---
|
||
BUY_COOLDOWN_SEC = int(os.getenv("BUY_COOLDOWN_SEC", "300"))
|
||
SELL_COOLDOWN_SEC = int(os.getenv("SELL_COOLDOWN_SEC", "180"))
|
||
BUY_MINUTE_LIMIT = BUY_COOLDOWN_SEC
|
||
|
||
# --- 볼린저 (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"
|