예제 소스
실시간 XGBoost와 DQN 결합 구조: 거래 AI를 검증하는 법 · 파일 59개
main_llm_db_test_ollama_viewer.py
"""
Ollama 비전 백테스트 뷰어.
UI는 viewer.VisionBacktestViewer (하단 포트폴리오·수익 히스토리 포함)를 사용합니다.
python main_llm_db_test_ollama_viewer.py --ollama-model llava:latest
"""
from __future__ import annotations
import argparse
import json
import logging.config
import warnings
import numpy as np
warnings.filterwarnings("ignore")
np.seterr(divide="ignore", invalid="ignore")
with open("config/logging.json", "r") as f:
logging.config.dictConfig(json.load(f))
import logging
logger = logging.getLogger(__name__)
from Market import Market # noqa: E402
import main_llm_db_test_ollama as ollama_bt # noqa: E402
from viewer import VisionBacktestViewer, make_ollama_vision_callable # noqa: E402
def main() -> None:
parser = argparse.ArgumentParser(description="Ollama 비전 백테스트 (viewer.VisionBacktestViewer)")
parser.add_argument("--min-bars", type=int, default=100)
parser.add_argument("--bar-step", type=int, default=3)
parser.add_argument("--ollama-host", default=ollama_bt.DEFAULT_OLLAMA_HOST)
parser.add_argument("--ollama-model", default=ollama_bt.DEFAULT_OLLAMA_MODEL)
parser.add_argument("--initial", type=float, default=ollama_bt.DEFAULT_INITIAL_KRW)
parser.add_argument("--min-trade-bars", type=int, default=5)
parser.add_argument("--dry-run", action="store_true")
parser.add_argument("--auto-interval-sec", type=float, default=3.0)
parser.add_argument("--chart-max-width", type=int, default=900)
args = parser.parse_args()
vision = make_ollama_vision_callable(
host=str(args.ollama_host),
model=str(args.ollama_model),
)
logger.info("Market.get_data() …")
market = Market()
df = market.get_data()
if df is None or len(df) < args.min_bars + args.bar_step:
raise SystemExit("데이터가 부족합니다.")
port = ollama_bt.PaperLlmPortfolio(float(args.initial))
port.min_trade_bars = max(0, int(args.min_trade_bars))
app = VisionBacktestViewer(
df=df,
portfolio=port,
vision_call=vision,
min_bars=max(50, args.min_bars),
bar_step=max(1, args.bar_step),
dry_run=args.dry_run,
auto_interval_sec=args.auto_interval_sec,
chart_max_width=args.chart_max_width,
vision_retries=max(1, int(ollama_bt.OLLAMA_RETRY)),
vision_backoff_sec=float(ollama_bt.OLLAMA_RETRY_BACKOFF_SEC),
window_title="Ollama 비전 백테스트 뷰어",
status_backend_label=f"ollama · {args.ollama_model}",
)
app.mainloop()
if __name__ == "__main__":
main()