refactor: GT·시뮬·운영 3축 정리 및 hybrid 실거래 정합
Phase C/dry-run·미사용 모듈·재생성 HTML을 제거하고, 운영 체결을 sim_causal_hybrid와 동일한 hybrid 로직으로 통합한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
"""
|
||||
WLD 볼린저 밴드 차트.
|
||||
Ground Truth 차트 HTML (05_chart_truth).
|
||||
|
||||
python scripts/05_chart_bb.py
|
||||
python scripts/05_chart_truth.py
|
||||
python scripts/02_ground_truth.py
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -44,12 +42,11 @@ from deepcoin.ops.monitor import Monitor
|
||||
from deepcoin.data.mtf_bb import interval_label, load_frames_from_db
|
||||
|
||||
from deepcoin.ops.chart_report import wrap_chart_report_page
|
||||
from deepcoin.paths import CHART_BB_HTML, CHART_TRUTH_HTML, resolve_ground_truth_file
|
||||
from deepcoin.paths import CHART_TRUTH_HTML, resolve_ground_truth_file
|
||||
|
||||
OUTPUT_HTML = CHART_BB_HTML
|
||||
TRUTH_HTML = CHART_TRUTH_HTML
|
||||
GROUND_TRUTH_PATH = resolve_ground_truth_file()
|
||||
REPORT_DIR = CHART_BB_HTML.parent
|
||||
REPORT_DIR = CHART_TRUTH_HTML.parent
|
||||
|
||||
|
||||
def interval_chart_label(interval_min: int) -> str:
|
||||
@@ -606,19 +603,34 @@ def load_chart_frames() -> dict[int, pd.DataFrame] | None:
|
||||
return frames
|
||||
|
||||
|
||||
def run_ground_truth_chart(open_browser: bool = True) -> Path:
|
||||
def run_ground_truth_chart(
|
||||
open_browser: bool = True,
|
||||
*,
|
||||
from_json: bool = True,
|
||||
) -> Path:
|
||||
"""
|
||||
정답 타점을 생성·저장하고 마커가 포함된 HTML 차트를 만듭니다.
|
||||
정답 타점 마커가 포함된 HTML 차트를 만듭니다.
|
||||
|
||||
Args:
|
||||
open_browser: True면 브라우저로 HTML을 엽니다.
|
||||
from_json: True면 기존 ground_truth_trades.json 을 사용합니다.
|
||||
False면 DB에서 GT를 재생성합니다.
|
||||
|
||||
Returns:
|
||||
HTML 파일 경로.
|
||||
"""
|
||||
from deepcoin.ground_truth.ground_truth import run_from_db
|
||||
from deepcoin.ground_truth.ground_truth import load_ground_truth, run_from_db
|
||||
|
||||
data = run_from_db()
|
||||
gt_path = resolve_ground_truth_file()
|
||||
if from_json:
|
||||
data = load_ground_truth(gt_path)
|
||||
if not data:
|
||||
print(f"GT JSON 없음({gt_path}) — DB에서 재생성합니다.")
|
||||
data = run_from_db()
|
||||
else:
|
||||
print(f"GT JSON 로드: {gt_path}")
|
||||
else:
|
||||
data = run_from_db()
|
||||
frames = load_chart_frames()
|
||||
if frames is None:
|
||||
raise RuntimeError("차트 데이터 로드 실패")
|
||||
@@ -645,74 +657,12 @@ def run_ground_truth_chart(open_browser: bool = True) -> Path:
|
||||
return TRUTH_HTML
|
||||
|
||||
|
||||
def run_chart(open_browser: bool = True) -> Path:
|
||||
"""
|
||||
3분봉 BB 차트 HTML을 생성합니다.
|
||||
|
||||
Args:
|
||||
open_browser: True면 기본 브라우저로 HTML을 엽니다.
|
||||
|
||||
Returns:
|
||||
저장된 HTML 경로.
|
||||
"""
|
||||
frames = load_chart_frames()
|
||||
if frames is None:
|
||||
raise RuntimeError("차트 데이터 로드 실패")
|
||||
|
||||
df_1d, df_1h, df_3m = _frames_to_mtf(frames)
|
||||
trend = get_trend(df_1d, df_1h)
|
||||
df_chart = apply_bar_indicators(df_3m)
|
||||
print(f"\n추세(참고): {trend}")
|
||||
print(f"3분: {df_chart.index[0]} ~ {df_chart.index[-1]} ({len(df_chart)}봉)")
|
||||
|
||||
html = build_chart_html(
|
||||
df_chart,
|
||||
trend,
|
||||
note="자동 매수·매도 전략은 사용하지 않습니다.",
|
||||
)
|
||||
REPORT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
OUTPUT_HTML.write_text(html, encoding="utf-8")
|
||||
print(f"HTML: {OUTPUT_HTML}")
|
||||
if open_browser:
|
||||
webbrowser.open(OUTPUT_HTML.resolve().as_uri())
|
||||
return OUTPUT_HTML
|
||||
|
||||
|
||||
def print_usage() -> None:
|
||||
print(
|
||||
"""
|
||||
DeepCoin simulation.py
|
||||
|
||||
python simulation.py
|
||||
WLD 3분봉 BB 차트 → docs/charts/wld_bb_chart.html
|
||||
|
||||
python simulation.py truth
|
||||
정답 타점 생성 → ground_truth_trades.json
|
||||
차트 → docs/02_ground_truth/wld_ground_truth_chart.html
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""05_chart_truth CLI 진입 (미사용 시 no-op)."""
|
||||
if len(sys.argv) > 1 and sys.argv[1] in ("-h", "--help", "help"):
|
||||
print_usage()
|
||||
print("GT 차트: python scripts/05_chart_truth.py")
|
||||
return
|
||||
if len(sys.argv) > 1 and sys.argv[1] in ("truth", "ground-truth", "gt"):
|
||||
print("=" * 60)
|
||||
print("정답 타점 생성 + 차트")
|
||||
print("=" * 60)
|
||||
run_ground_truth_chart()
|
||||
print("\n완료.")
|
||||
return
|
||||
if len(sys.argv) > 1:
|
||||
print(f"알 수 없는 옵션: {sys.argv[1]}\n")
|
||||
print_usage()
|
||||
return
|
||||
print("=" * 60)
|
||||
print("WLD BB 차트 (매매 전략 없음)")
|
||||
print("=" * 60)
|
||||
run_chart()
|
||||
print("\n완료.")
|
||||
run_ground_truth_chart(open_browser=False)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user