zephyrdark 3f8ef7e108 feat: add multi-factor, quality, and value-momentum strategies
- BaseStrategy abstract class
- MultiFactorStrategy with weighted factors
- QualityStrategy with F-Score filtering
- ValueMomentumStrategy combining value and momentum

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 08:59:05 +09:00

43 lines
1.1 KiB
Python

"""
Base strategy class.
"""
from abc import ABC, abstractmethod
from datetime import date
from typing import List
from sqlalchemy.orm import Session
from app.schemas.strategy import StockFactor, StrategyResult, UniverseFilter
from app.services.factor_calculator import FactorCalculator
class BaseStrategy(ABC):
"""Base class for quant strategies."""
strategy_name: str = "base"
def __init__(self, db: Session):
self.db = db
self.factor_calc = FactorCalculator(db)
def get_universe(self, filter: UniverseFilter) -> List:
"""Get filtered stock universe."""
return self.factor_calc.get_universe(
markets=filter.markets,
min_market_cap=filter.min_market_cap,
max_market_cap=filter.max_market_cap,
exclude_stock_types=filter.exclude_stock_types,
exclude_sectors=filter.exclude_sectors,
)
@abstractmethod
def run(
self,
universe_filter: UniverseFilter,
top_n: int,
base_date: date = None,
**kwargs,
) -> StrategyResult:
"""Run the strategy and return ranked stocks."""
pass