- config.py: CHRONOS_MODEL env (default amazon/chronos-2) - state.py: PollState extended with daily_ohlcv + chronos_predictions + minute_momentum - requirements.txt: transformers + chronos-forecasting 33 existing tests still pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
"""Signal V2 환경변수 로딩."""
|
|
import os
|
|
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv(Path(__file__).parent.parent / ".env")
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Settings:
|
|
stock_api_url: str = field(
|
|
default_factory=lambda: os.getenv("STOCK_API_URL", "").rstrip("/")
|
|
)
|
|
webai_api_key: str = field(
|
|
default_factory=lambda: os.getenv("WEBAI_API_KEY", "").strip()
|
|
)
|
|
port: int = field(default_factory=lambda: int(os.getenv("SIGNAL_V2_PORT", "8001")))
|
|
db_path: Path = field(
|
|
default_factory=lambda: Path(__file__).parent / "data" / "signal_v2.db"
|
|
)
|
|
# KIS — V1 호환 패턴 (KIS_ENV_TYPE virtual/real)
|
|
kis_env_type: str = field(default_factory=lambda: os.getenv("KIS_ENV_TYPE", "virtual").lower())
|
|
kis_real_app_key: str = field(default_factory=lambda: os.getenv("KIS_REAL_APP_KEY", "").strip())
|
|
kis_real_app_secret: str = field(default_factory=lambda: os.getenv("KIS_REAL_APP_SECRET", "").strip())
|
|
kis_real_account: str = field(default_factory=lambda: os.getenv("KIS_REAL_ACCOUNT", "").strip())
|
|
kis_virtual_app_key: str = field(default_factory=lambda: os.getenv("KIS_VIRTUAL_APP_KEY", "").strip())
|
|
kis_virtual_app_secret: str = field(default_factory=lambda: os.getenv("KIS_VIRTUAL_APP_SECRET", "").strip())
|
|
kis_virtual_account: str = field(default_factory=lambda: os.getenv("KIS_VIRTUAL_ACCOUNT", "").strip())
|
|
v1_token_path: Path = field(
|
|
default_factory=lambda: Path(
|
|
os.getenv("V1_TOKEN_PATH",
|
|
str(Path(__file__).parent.parent / "signal_v1" / "data" / "kis_token.json"))
|
|
)
|
|
)
|
|
chronos_model: str = field(default_factory=lambda: os.getenv("CHRONOS_MODEL", "amazon/chronos-2"))
|
|
|
|
@property
|
|
def kis_is_virtual(self) -> bool:
|
|
return self.kis_env_type != "real"
|
|
|
|
@property
|
|
def kis_app_key(self) -> str:
|
|
return self.kis_real_app_key if self.kis_env_type == "real" else self.kis_virtual_app_key
|
|
|
|
@property
|
|
def kis_app_secret(self) -> str:
|
|
return self.kis_real_app_secret if self.kis_env_type == "real" else self.kis_virtual_app_secret
|
|
|
|
@property
|
|
def kis_account(self) -> str:
|
|
return self.kis_real_account if self.kis_env_type == "real" else self.kis_virtual_account
|
|
|
|
|
|
def get_settings() -> Settings:
|
|
return Settings()
|