35 lines
984 B
Python
35 lines
984 B
Python
"""Base class for daily feature plugins."""
|
|
|
|
from abc import ABC, abstractmethod
|
|
|
|
import pandas as pd
|
|
|
|
|
|
class BaseFeature(ABC):
|
|
"""Aggregate raw minute bars into daily, symbol-keyed feature columns."""
|
|
|
|
#: Unique registry key. Every concrete feature must set this to a non-empty str.
|
|
name: str = ""
|
|
|
|
@abstractmethod
|
|
def compute(
|
|
self,
|
|
minute: pd.DataFrame,
|
|
daily: pd.DataFrame | None = None,
|
|
) -> pd.DataFrame:
|
|
"""Compute daily features.
|
|
|
|
Args:
|
|
minute: Raw minute bars with ``symbol_id`` and ``date`` keys.
|
|
daily: Optional daily data frame for calendar alignment or
|
|
reference daily columns.
|
|
|
|
Returns:
|
|
DataFrame with ``symbol_id``, ``date``, and one or more numeric
|
|
feature columns.
|
|
"""
|
|
|
|
def __repr__(self) -> str:
|
|
params = ", ".join(f"{k}={v!r}" for k, v in vars(self).items())
|
|
return f"{type(self).__name__}({params})"
|