Files
kis_bot/kis_trader/engine/trigger_eval_collect.py
Your Name fc27e726f9 feat: 새로운 안전 규칙 및 최적화 적용을 통한 트레이딩 시스템 개선
변경 사항 (Changes):

구문 오류(Syntax error) 및 토큰 낭비를 방지하기 위해 에이전트 쉘(Agent shell)과 파이썬 코드 스니펫에 다수의 신규 안전 규칙(Safety rules)을 추가함.

스키마 검증 및 적절한 SQL 포맷팅을 보장하기 위해 임시(Ad-hoc) 데이터베이스 쿼리 작성 가이드라인을 도입함.

코드 수정 후 UI 기능이 정상 작동하는지 확인하기 위해, 백테스트 웹 서비스 재시작 및 브라우저 검증에 대한 새로운 규칙을 구현함.

시스템 전반의 무결성(Integrity)을 유지하기 위해 실전 매매(Live trading), 웹 백테스팅, 파라미터 탐색(Parameter searches) 간의 일관성 검사(Consistency checks) 체계를 확립함.

기대 효과 (Impact):

이러한 개선 사항들은 트레이딩 시스템의 견고성(Robustness)과 신뢰성을 향상시키며, 에러 발생을 최소화하고 다양한 시스템 컴포넌트 간의 원활한 상호작용을 보장함.
2026-07-17 01:09:09 +09:00

77 lines
2.7 KiB
Python

"""
trigger_eval_collect.py — TRIGGER 스냅샷 수집 vs 필터 적용 분리
================================================================
- 필터 OFF: 실매 주문은 막지 않음
- 수집 ON: TRIGGER 시점 호가·프로그램 스냅 + 판정 결과를 DB에 저장 (백테·파람서치용)
"""
from __future__ import annotations
from typing import Any, Dict
from kis_trader.utils.env import get_env_bool, get_env_from_db
def _strategy_prefix_orderbook(strategy: str) -> str:
s = (strategy or "").strip().upper()
if s in ("BREAKOUT", "BO"):
return "BREAKOUT"
if s in ("MOMENTUM", "MOM"):
return "MOMENTUM"
if s in ("TAIL", "SHORT", "TAIL_CATCH"):
return "TAIL"
return s or "ORDERBOOK"
def _strategy_prefix_program(strategy: str) -> str:
s = (strategy or "").strip().upper()
if s in ("BREAKOUT", "BO"):
return "BREAKOUT"
if s in ("MOMENTUM", "MOM"):
return "MOMENTUM"
if s in ("TAIL", "SHORT", "TAIL_CATCH"):
return "TAIL"
return s or "PROGRAM"
def trigger_eval_save_master_enabled() -> bool:
"""TriggerEvalRecorder 마스터 스위치."""
return get_env_bool("WS_TRIGGER_EVAL_SAVE_ENABLED", True)
def orderbook_collect_enabled(params: Dict[str, Any], strategy: str) -> bool:
"""TRIGGER 호가 스냅 DB 수집 여부 (필터 ON/OFF 와 무관)."""
if params.get("_skip_trigger_eval_persist"):
return False
ov_all = params.get("_trigger_eval_collect_enabled")
if ov_all is not None and not bool(ov_all):
return False
if not trigger_eval_save_master_enabled():
return False
ov = params.get("_orderbook_collect_enabled")
if ov is not None:
return bool(ov)
pfx = _strategy_prefix_orderbook(strategy)
sk = f"{pfx}_ORDERBOOK_COLLECT_ENABLED"
if str(get_env_from_db(sk, "")).strip():
return get_env_bool(sk, True)
return get_env_bool("WS_ORDERBOOK_COLLECT_ENABLED", True)
def program_collect_enabled(params: Dict[str, Any], strategy: str) -> bool:
"""TRIGGER 프로그램 스냅 DB 수집 여부 (필터 ON/OFF 와 무관)."""
if params.get("_skip_trigger_eval_persist"):
return False
ov_all = params.get("_trigger_eval_collect_enabled")
if ov_all is not None and not bool(ov_all):
return False
if not trigger_eval_save_master_enabled():
return False
ov = params.get("_program_collect_enabled")
if ov is not None:
return bool(ov)
pfx = _strategy_prefix_program(strategy)
sk = f"{pfx}_PROGRAM_COLLECT_ENABLED"
if str(get_env_from_db(sk, "")).strip():
return get_env_bool(sk, True)
return get_env_bool("WS_PROGRAM_COLLECT_ENABLED", True)