3분~일봉 GT 타점 분석(03c), leg 체결 순서 수정, 총자산 90% 검증 루프, walk-forward Go/No-Go 시뮬, monitor·live_trader 및 reference 문서를 포함한다. Co-authored-by: Cursor <cursoragent@cursor.com>
62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
"""
|
|
04 산출 matched_rules.json 로드.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from deepcoin.paths import MATCHING_MATCHED_RULES
|
|
|
|
|
|
def load_matched_rules(path: Path | None = None) -> dict[str, Any]:
|
|
"""
|
|
matched_rules.json 전체를 로드합니다.
|
|
|
|
Args:
|
|
path: JSON 경로. None이면 기본 경로.
|
|
|
|
Returns:
|
|
matched_rules dict. 없으면 빈 dict.
|
|
"""
|
|
p = path or MATCHING_MATCHED_RULES
|
|
if not p.is_file():
|
|
return {}
|
|
return json.loads(p.read_text(encoding="utf-8"))
|
|
|
|
|
|
def load_active_rules(path: Path | None = None) -> list[dict[str, Any]]:
|
|
"""
|
|
04 선별 규칙 전체(strict 우선).
|
|
|
|
Args:
|
|
path: matched_rules.json 경로.
|
|
|
|
Returns:
|
|
규칙 dict 리스트.
|
|
"""
|
|
data = load_matched_rules(path)
|
|
selected = data.get("selected") or []
|
|
if selected:
|
|
return list(selected)
|
|
return list(data.get("selected_best_effort") or [])
|
|
|
|
|
|
def load_monitor_rules(path: Path | None = None) -> list[dict[str, Any]]:
|
|
"""
|
|
05 모니터·텔레그램에 쓸 규칙 (holdout 통과, 매수·매도 각 최대 1개).
|
|
|
|
Args:
|
|
path: matched_rules.json 경로.
|
|
|
|
Returns:
|
|
monitor_rules 또는 active_rules fallback.
|
|
"""
|
|
data = load_matched_rules(path)
|
|
monitor = data.get("monitor_rules") or []
|
|
if monitor:
|
|
return list(monitor)
|
|
return load_active_rules(path)
|