This repository has been archived on 2025-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
2025-05-06 21:23:04 +09:00

54 lines
2.2 KiB
Python

'''
strategy_engine/run_strategy.py
전략 엔진 실행 진입점:
- tradable 종목 로딩 → 전략 템플릿 적용 → 포지션 계산 → 최종 결과 저장
- 사용자 입력: 투자 금액(total_capital), 전략 유형(strategy)
'''
import argparse
import pandas as pd
from strategy_engine.selector import select_candidates
from strategy_engine.templates.basic_strategy import apply_basic_strategy
from strategy_engine.templates.risk_adjusted_strategy import apply_risk_adjusted_strategy
from strategy_engine.position_manager import assign_position
def run_strategy(risk_filtered_path: str, total_capital: float, strategy: str = "adjusted", output_path: str = "final_strategy_result.csv"):
# 1단계: 전략 대상 종목 필터링
selected = select_candidates(risk_filtered_path)
if selected.empty:
print("[알림] 조건을 만족하는 종목이 없습니다.")
return None
# 2단계: 전략 템플릿 선택 적용
if strategy == "basic":
strategy_df = apply_basic_strategy(selected)
else:
strategy_df = apply_risk_adjusted_strategy(selected)
# 3단계: 포지션 할당 (자금 배분)
final_df = pd.merge(selected, strategy_df, on="symbol")
final_df = assign_position(final_df, total_capital=total_capital)
# 4단계: 결과 저장 및 반환
final_df.to_csv(output_path, index=False)
print(f"[완료] 전략 실행 결과 저장됨 → {output_path}")
return final_df
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="SightRay 전략 엔진 실행")
parser.add_argument("--input", type=str, required=True, help="risk_filtered_result.csv 경로")
parser.add_argument("--capital", type=float, required=True, help="총 투자 자본 (예: 1000000)")
parser.add_argument("--strategy", type=str, choices=["basic", "adjusted"], default="adjusted", help="사용할 전략 템플릿 (기본: adjusted)")
parser.add_argument("--output", type=str, default="final_strategy_result.csv", help="출력 파일명")
args = parser.parse_args()
run_strategy(
risk_filtered_path=args.input,
total_capital=args.capital,
strategy=args.strategy,
output_path=args.output
)