54 lines
2.2 KiB
Python
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
|
|
)
|