Files
Bithumb/deepcoin/data/mtf_bb.py
xavis d7848df6f7 refactor: GT·시뮬·운영 3축 정리 및 hybrid 실거래 정합
Phase C/dry-run·미사용 모듈·재생성 HTML을 제거하고, 운영 체결을
sim_causal_hybrid와 동일한 hybrid 로직으로 통합한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 23:50:28 +09:00

57 lines
1.7 KiB
Python

"""
coins.db에서 전 간격 봉 데이터를 로드합니다.
"""
from __future__ import annotations
import pandas as pd
from config import DOWNLOAD_INTERVALS, DOWNLOAD_INTERVALS_WM, SYMBOL
from deepcoin.data.candle_intervals import interval_display_label
def interval_label(interval: int) -> str:
"""봉 간격 표시 라벨."""
return interval_display_label(interval)
def _all_load_intervals() -> tuple[int, ...]:
seen: set[int] = set()
out: list[int] = []
for iv in (*DOWNLOAD_INTERVALS, *DOWNLOAD_INTERVALS_WM):
if iv not in seen:
seen.add(iv)
out.append(iv)
return tuple(out)
def load_frames_from_db(
monitor,
symbol: str,
lookback_days: int | None = None,
) -> dict[int, pd.DataFrame]:
"""
coins.db에서 DOWNLOAD_INTERVALS 전부 로드·지표 계산.
Args:
monitor: Monitor 인스턴스.
symbol: 코인 심볼.
lookback_days: 지정 시 간격별로 해당 일수만큼 DB에서 더 많이 읽습니다.
Returns:
간격(분) → OHLCV+지표 DataFrame.
"""
frames: dict[int, pd.DataFrame] = {}
for iv in _all_load_intervals():
db_max = None
if lookback_days is not None:
db_max = monitor.db_row_limit_for_interval(iv, lookback_days)
df = monitor.get_coin_some_data(symbol, iv, db_max_rows=db_max)
if df is None or df.empty:
print(f" [{interval_label(iv)}] DB/API 데이터 없음 — 스킵")
continue
df = monitor.calculate_technical_indicators(df)
frames[iv] = df
print(f" [{interval_label(iv)}] {len(df)}{df.index[0]} ~ {df.index[-1]}")
return frames