""" kis_trader.utils.position_sizing — 전략 공통 1회 매수 금액(원) ============================================================ ``SLOT_MONEY_DEFAULT``(및 전략별 *_SLOT_MONEY) 를 그대로 쓰고, 과거 ``max_loss / sl_pct`` 로 포지션을 줄이던 방식은 폐기한다. (금액 손실컷 ``MAX_LOSS_PER_TRADE_KRW`` 는 청산 엔진에서만 사용.) """ from __future__ import annotations from ..utils.env import get_env_int def invest_qty_for_price(entry_price: float, invest_krw: float) -> int: """ 1회 투자금으로 살 수 있는 정수 주수. 주가가 투자금보다 비싸면 0 (최소 1주 강제 매수 없음). """ if entry_price <= 0 or invest_krw <= 0: return 0 qty = int(float(invest_krw) / entry_price) return qty if qty >= 1 else 0 def resolve_invest_amount_krw( slot_money: int, *, max_loss_krw: int = 0, sl_pct: float = 0.0, extra_cap: int = 0, ) -> int: """ 1회 매수에 쓸 금액(원). 기본 = ``slot_money``. ``extra_cap`` > 0 이면 min(slot, extra_cap) — UPDOW 총한도 잔여 등. ``max_loss_krw`` / ``sl_pct`` 는 하위 호환용으로만 받고 투자금 산출에는 미사용. """ base = int(slot_money or 0) if base <= 0: base = get_env_int("SLOT_MONEY_DEFAULT", 3_000_000) if extra_cap > 0: return int(min(base, extra_cap)) return base