36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
'''
|
|
strategy_engine/position_manager.py
|
|
|
|
전략 조건이 부여된 종목에 대해 실제 포지션(자금 배분, 수량 등)을 결정하는 모듈입니다.
|
|
- 고정 자산 총액을 기준으로 자산을 분산하여 각 종목에 배정
|
|
- 리스크 점수를 반영하여 투자 비중 조정 가능 (향후 확장)
|
|
'''
|
|
|
|
import pandas as pd
|
|
|
|
def assign_position(df: pd.DataFrame, total_capital: float = 0) -> pd.DataFrame:
|
|
"""
|
|
각 종목에 대해 자금 배분 및 포지션 수량 계산
|
|
|
|
Parameters:
|
|
df (pd.DataFrame): 전략 조건이 포함된 종목 테이블 (symbol, entry_price 등)
|
|
total_capital (float): 전체 투자 가능 자금 (기본: 0 → 반드시 사용자가 설정해야 함)
|
|
|
|
Returns:
|
|
pd.DataFrame: position_size, capital_allocated 컬럼 추가된 최종 포지션 테이블
|
|
"""
|
|
if total_capital <= 0:
|
|
raise ValueError("[오류] total_capital 값이 0 이하입니다. 유효한 자금 규모를 입력하세요.")
|
|
|
|
df = df.copy()
|
|
num_assets = len(df)
|
|
|
|
if num_assets == 0:
|
|
return df
|
|
|
|
capital_per_asset = total_capital / num_assets
|
|
df['capital_allocated'] = capital_per_asset
|
|
df['position_size'] = (capital_per_asset / df['entry_price']).apply(lambda x: int(x)) # 정수 주식 수량
|
|
|
|
return df
|