GT MTF 프로필·캘리브레이션과 04 매칭/시뮬/실거래 파이프라인을 추가한다.
3분~일봉 GT 타점 분석(03c), leg 체결 순서 수정, 총자산 90% 검증 루프, walk-forward Go/No-Go 시뮬, monitor·live_trader 및 reference 문서를 포함한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
78
config.py
78
config.py
@@ -219,6 +219,8 @@ MONITOR_MA_WINDOWS: tuple[int, ...] = _parse_int_tuple(
|
||||
)
|
||||
MONITOR_NORM_WINDOW = _getenv_int("MONITOR_NORM_WINDOW", "20")
|
||||
MONITOR_TELEGRAM_BATCH_SIZE = _getenv_int("MONITOR_TELEGRAM_BATCH_SIZE", "20")
|
||||
# 규칙 알림 참고 금액(매수 시 수량=금액/가격). 매도 시에는 보유 수량 우선.
|
||||
MONITOR_ALERT_KRW_AMOUNT = _getenv_int("MONITOR_ALERT_KRW_AMOUNT", "100000")
|
||||
|
||||
# --- general_analysis ---
|
||||
GA_COL_PREFIX = _getenv("GA_COL_PREFIX", "ga_")
|
||||
@@ -262,3 +264,79 @@ GA_PIVOT_ORDER = _getenv_int("GA_PIVOT_ORDER", "3")
|
||||
GA_PSAR_AF_START = _getenv_float("GA_PSAR_AF_START", "0.02")
|
||||
GA_PSAR_AF_STEP = _getenv_float("GA_PSAR_AF_STEP", "0.02")
|
||||
GA_PSAR_AF_MAX = _getenv_float("GA_PSAR_AF_MAX", "0.2")
|
||||
|
||||
# --- 04 매칭 (GT 프로필 + 전구간 EV) ---
|
||||
MATCH_PRIMARY_INTERVAL = _getenv_int("MATCH_PRIMARY_INTERVAL", "3")
|
||||
MATCH_GT_TOLERANCE_MIN = _getenv_int("MATCH_GT_TOLERANCE_MIN", "15")
|
||||
MATCH_FORWARD_BARS = _getenv_int("MATCH_FORWARD_BARS", "60")
|
||||
MATCH_FEE_RATE = _getenv_float("MATCH_FEE_RATE", "0.0005")
|
||||
MATCH_MIN_FIRES = _getenv_int("MATCH_MIN_FIRES", "10")
|
||||
MATCH_TRAIN_RATIO = _getenv_float("MATCH_TRAIN_RATIO", "0.7")
|
||||
MATCH_MAX_RULES_PER_SIDE = _getenv_int("MATCH_MAX_RULES_PER_SIDE", "5")
|
||||
MATCH_PROFILE_QUANTILE_LO = _getenv_float("MATCH_PROFILE_QUANTILE_LO", "0.25")
|
||||
MATCH_PROFILE_QUANTILE_HI = _getenv_float("MATCH_PROFILE_QUANTILE_HI", "0.75")
|
||||
MATCH_MIN_EV_VALID = _getenv_float("MATCH_MIN_EV_VALID", "0.0")
|
||||
MATCH_MIN_PROFIT_FACTOR = _getenv_float("MATCH_MIN_PROFIT_FACTOR", "1.0")
|
||||
MATCH_MAX_VALID_FIRE_RATE = _getenv_float("MATCH_MAX_VALID_FIRE_RATE", "0.35")
|
||||
MATCH_BEST_EFFORT_PER_SIDE = _getenv_int("MATCH_BEST_EFFORT_PER_SIDE", "3")
|
||||
MATCH_INCLUDE_WIDE_RULES = _getenv("MATCH_INCLUDE_WIDE_RULES", "0").strip() in (
|
||||
"1",
|
||||
"true",
|
||||
"True",
|
||||
"yes",
|
||||
)
|
||||
MATCH_PROFILE_TIGHT_LO = _getenv_float("MATCH_PROFILE_TIGHT_LO", "0.35")
|
||||
MATCH_PROFILE_TIGHT_HI = _getenv_float("MATCH_PROFILE_TIGHT_HI", "0.65")
|
||||
MATCH_PROFILE_TOP_PER_TF = _getenv_int("MATCH_PROFILE_TOP_PER_TF", "6")
|
||||
MATCH_PROFILE_TOP_GLOBAL = _getenv_int("MATCH_PROFILE_TOP_GLOBAL", "30")
|
||||
MATCH_PROFILE_MIN_SEPARATION = _getenv_float("MATCH_PROFILE_MIN_SEPARATION", "0.25")
|
||||
MATCH_PROFILE_MIN_SAMPLES = _getenv_int("MATCH_PROFILE_MIN_SAMPLES", "10")
|
||||
MATCH_INCLUDE_MTF_CROSS = _getenv("MATCH_INCLUDE_MTF_CROSS", "1").strip() in (
|
||||
"1",
|
||||
"true",
|
||||
"True",
|
||||
"yes",
|
||||
)
|
||||
MATCH_LIVE_LOOKBACK_DAYS = _getenv_int("MATCH_LIVE_LOOKBACK_DAYS", "14")
|
||||
MATCH_LIVE_CACHE_SEC = _getenv_int("MATCH_LIVE_CACHE_SEC", "300")
|
||||
MATCH_LABEL_MODE = _getenv("MATCH_LABEL_MODE", "leg_gt")
|
||||
MATCH_MAX_HOLD_DAYS = _getenv_int("MATCH_MAX_HOLD_DAYS", "45")
|
||||
MATCH_INCLUDE_ATOMIC = _getenv("MATCH_INCLUDE_ATOMIC", "0").strip() in (
|
||||
"1",
|
||||
"true",
|
||||
"True",
|
||||
"yes",
|
||||
)
|
||||
MATCH_HOLDOUT_RATIO = _getenv_float("MATCH_HOLDOUT_RATIO", "0.15")
|
||||
MATCH_MIN_FIRES_HOLDOUT = _getenv_int("MATCH_MIN_FIRES_HOLDOUT", "5")
|
||||
MATCH_MONITOR_MAX_PER_SIDE = _getenv_int("MATCH_MONITOR_MAX_PER_SIDE", "1")
|
||||
MONITOR_ALERT_COOLDOWN_MIN = _getenv_int("MONITOR_ALERT_COOLDOWN_MIN", "180")
|
||||
MATCH_KIND_PRIORITY: tuple[str, ...] = tuple(
|
||||
x.strip()
|
||||
for x in _getenv(
|
||||
"MATCH_KIND_PRIORITY",
|
||||
"mtf_cross,compound_tight,contrast,compound,atomic,wide",
|
||||
).split(",")
|
||||
if x.strip()
|
||||
)
|
||||
|
||||
# --- 1단계 시뮬레이션 리포트 ---
|
||||
SIM_WALK_FORWARD_MIN_MONTHS = _getenv_int("SIM_WALK_FORWARD_MIN_MONTHS", "3")
|
||||
SIM_FEE_STRESS_MULT = _getenv_float("SIM_FEE_STRESS_MULT", "2.0")
|
||||
SIM_GO_MIN_HOLDOUT_EV = _getenv_float("SIM_GO_MIN_HOLDOUT_EV", "0.0")
|
||||
SIM_GO_MIN_HOLDOUT_PF = _getenv_float("SIM_GO_MIN_HOLDOUT_PF", "1.0")
|
||||
SIM_GO_WF_POSITIVE_RATIO = _getenv_float("SIM_GO_WF_POSITIVE_RATIO", "0.5")
|
||||
|
||||
# --- 3단계 실거래 (오픈 전 문서·시뮬 Go 필수) ---
|
||||
LIVE_TRADING_ENABLED = _getenv("LIVE_TRADING_ENABLED", "0").strip() in (
|
||||
"1",
|
||||
"true",
|
||||
"True",
|
||||
"yes",
|
||||
)
|
||||
LIVE_ORDER_KRW = _getenv_int("LIVE_ORDER_KRW", "100000")
|
||||
LIVE_DAILY_KRW_MAX = _getenv_int("LIVE_DAILY_KRW_MAX", "300000")
|
||||
LIVE_COOLDOWN_MIN = _getenv_int("LIVE_COOLDOWN_MIN", "180")
|
||||
LIVE_MAX_TRADES_PER_DAY = _getenv_int("LIVE_MAX_TRADES_PER_DAY", "10")
|
||||
LIVE_DAILY_LOSS_LIMIT_KRW = _getenv_int("LIVE_DAILY_LOSS_LIMIT_KRW", "50000")
|
||||
LIVE_SLIPPAGE_PCT = _getenv_float("LIVE_SLIPPAGE_PCT", "0.05")
|
||||
|
||||
Reference in New Issue
Block a user