From 94a034ef385944236865d9a8721ad9dd7fda0a46 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 25 May 2026 19:54:45 +0900 Subject: [PATCH] =?UTF-8?q?feat(ai=5Ftrade):=20SIGNAL=5FTTL=5FSECONDS=20en?= =?UTF-8?q?v=20=EC=B6=94=EA=B0=80=20(F5=20part=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 신호 expires_at 계산용 TTL (default 300s). 환경별로 조정 가능. Co-Authored-By: Claude Opus 4.7 (1M context) --- ai_trade/config.py | 3 +++ ai_trade/tests/test_state_signals_lifecycle.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ai_trade/config.py b/ai_trade/config.py index 53c793a..d120605 100644 --- a/ai_trade/config.py +++ b/ai_trade/config.py @@ -53,6 +53,9 @@ class Settings: min_momentum_for_buy: str = field( default_factory=lambda: os.getenv("MIN_MOMENTUM_FOR_BUY", "strong_up") ) + signal_ttl_seconds: int = field( + default_factory=lambda: int(os.getenv("SIGNAL_TTL_SECONDS", "300")) + ) @property def kis_is_virtual(self) -> bool: diff --git a/ai_trade/tests/test_state_signals_lifecycle.py b/ai_trade/tests/test_state_signals_lifecycle.py index ba785b9..310a9dd 100644 --- a/ai_trade/tests/test_state_signals_lifecycle.py +++ b/ai_trade/tests/test_state_signals_lifecycle.py @@ -48,3 +48,19 @@ def test_purge_expired_signals_removes_expired(): assert "A" in state.signals assert "B" not in state.signals assert removed == 1 + + +# ----- SIGNAL_TTL_SECONDS env ----- + +def test_signal_ttl_seconds_default(monkeypatch): + monkeypatch.delenv("SIGNAL_TTL_SECONDS", raising=False) + from ai_trade.config import Settings + s = Settings() + assert s.signal_ttl_seconds == 300 + + +def test_signal_ttl_seconds_env_override(monkeypatch): + monkeypatch.setenv("SIGNAL_TTL_SECONDS", "60") + from ai_trade.config import Settings + s = Settings() + assert s.signal_ttl_seconds == 60