Files
ai-trade/modules/config.py

79 lines
2.6 KiB
Python

import os
import sys
from dotenv import load_dotenv
# .env 파일 로드
load_dotenv()
class Config:
# 1. 기본 설정
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 2. NAS 및 AI 서버
NAS_API_URL = os.getenv("NAS_API_URL", "http://192.168.45.54:18500")
OLLAMA_API_URL = os.getenv("OLLAMA_API_URL", "http://localhost:11434")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llama3.1:8b-instruct-q8_0")
# 3. KIS 한국투자증권
KIS_ENV_TYPE = os.getenv("KIS_ENV_TYPE", "virtual").lower()
if KIS_ENV_TYPE == "real":
KIS_APP_KEY = os.getenv("KIS_REAL_APP_KEY")
KIS_APP_SECRET = os.getenv("KIS_REAL_APP_SECRET")
KIS_ACCOUNT = os.getenv("KIS_REAL_ACCOUNT")
KIS_IS_VIRTUAL = False
KIS_BASE_URL = "https://openapi.koreainvestment.com:9443"
else:
KIS_APP_KEY = os.getenv("KIS_VIRTUAL_APP_KEY")
KIS_APP_SECRET = os.getenv("KIS_VIRTUAL_APP_SECRET")
KIS_ACCOUNT = os.getenv("KIS_VIRTUAL_ACCOUNT")
KIS_IS_VIRTUAL = True
KIS_BASE_URL = "https://openapivts.koreainvestment.com:29443"
# 4. 텔레그램
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
# 5. 매매 설정 (상수)
MAX_INVESTMENT_PER_STOCK = 3000000 # 종목당 최대 300만원
# 6. 데이터 경로
DATA_DIR = os.path.join(BASE_DIR, "data")
if not os.path.exists(DATA_DIR):
os.makedirs(DATA_DIR, exist_ok=True)
HISTORY_FILE = os.path.join(DATA_DIR, "daily_trade_history.json")
WATCHLIST_FILE = os.path.join(DATA_DIR, "watchlist.json")
# 모델 체크포인트 디렉토리
MODEL_DIR = os.path.join(DATA_DIR, "models")
if not os.path.exists(MODEL_DIR):
os.makedirs(MODEL_DIR, exist_ok=True)
# 7. IPC 설정
SHM_NAME = "web_ai_bot_ipc"
SHM_SIZE = 131072 # 128KB
IPC_STALENESS = 120 # 120초 (메인 봇 사이클 60초 + 여유)
# 8. GPU 설정
VRAM_WARNING_THRESHOLD = 12.0 # GB (14 → 12로 조기 경고)
# 9. 프로세스 관리
WATCHDOG_INTERVAL = 30 # 헬스체크 간격(초)
MAX_RESTART_COUNT = 3 # 최대 자동 재시작 횟수
# 10. 타임아웃 등
HTTP_TIMEOUT = 10
@staticmethod
def validate():
"""필수 설정 검증"""
missing = []
if not Config.KIS_APP_KEY: missing.append("KIS_APP_KEY")
if not Config.KIS_APP_SECRET: missing.append("KIS_APP_SECRET")
if missing:
print(f"⚠️ [Config] Missing Env Params: {', '.join(missing)}")
return False
return True