43 lines
1.1 KiB
Python
Raw Normal View History

"""
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