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)

        """