feat(tests): 신규 키움 웹소켓 조건검색 및 실시간 조건검색 테스트 추가
변경 사항 ---- - _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>
This commit is contained in:
41
kis_trader/utils/position_sizing.py
Normal file
41
kis_trader/utils/position_sizing.py
Normal file
@@ -0,0 +1,41 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user