변경 사항 (Changes): 구문 오류(Syntax error) 및 토큰 낭비를 방지하기 위해 에이전트 쉘(Agent shell)과 파이썬 코드 스니펫에 다수의 신규 안전 규칙(Safety rules)을 추가함. 스키마 검증 및 적절한 SQL 포맷팅을 보장하기 위해 임시(Ad-hoc) 데이터베이스 쿼리 작성 가이드라인을 도입함. 코드 수정 후 UI 기능이 정상 작동하는지 확인하기 위해, 백테스트 웹 서비스 재시작 및 브라우저 검증에 대한 새로운 규칙을 구현함. 시스템 전반의 무결성(Integrity)을 유지하기 위해 실전 매매(Live trading), 웹 백테스팅, 파라미터 탐색(Parameter searches) 간의 일관성 검사(Consistency checks) 체계를 확립함. 기대 효과 (Impact): 이러한 개선 사항들은 트레이딩 시스템의 견고성(Robustness)과 신뢰성을 향상시키며, 에러 발생을 최소화하고 다양한 시스템 컴포넌트 간의 원활한 상호작용을 보장함.
77 lines
2.7 KiB
Python
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)
|