변경 사항 ---- - _test_kiwoom_condition_list.py: 키움 웹소켓 조건검색 '목록조회' 기능을 단독으로 테스트하는 스크립트 추가 - _test_kiwoom_condition_realtime.py: 'momentum' 조건식을 실시간으로 등록하고 초기 매칭 종목 리스트 및 실시간 편입/이탈을 수신하는 테스트 스크립트 추가 - _verify_columnar_bitid.py, _verify_shared_e2e_breakout.py, _verify_shared_e2e.py: 공유 메모리 및 dict 간의 데이터 일관성을 검증하는 테스트 추가 영향 ---- - 신규 테스트 스크립트 추가로 키움 웹소켓 API의 기능 검증 및 안정성을 높임 - 기존 기능에 대한 영향 없음 Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
"""
|
|
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
|