''' 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 )