File size: 1,214 Bytes
d53dc44 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | """
strategy/base.py — Abstract strategy interface.
All strategies must implement generate_signal().
"""
from __future__ import annotations
from abc import ABC, abstractmethod
import pandas as pd
from contracts import TechnicalScore, PriceTarget
class Strategy(ABC):
"""Abstract base class for all trading strategies."""
name: str = "base"
@abstractmethod
def generate_signal(
self,
symbol: str,
df_5m: pd.DataFrame,
df_1h: pd.DataFrame | None = None,
df_1d: pd.DataFrame | None = None,
open_positions: dict[str, str] | None = None,
corr_matrix: pd.DataFrame | None = None,
) -> tuple[TechnicalScore, PriceTarget]:
"""Generate a technical signal and price target for a symbol.
Args:
symbol: Stock symbol
df_5m: 5-minute OHLCV bars
df_1h: 1-hour OHLCV bars (optional, for multi-timeframe)
df_1d: Daily OHLCV bars (optional, for trend filter)
open_positions: {symbol: "buy"|"sell"} of open positions
corr_matrix: Correlation matrix for guard
Returns: (TechnicalScore, PriceTarget)
"""
|